diff --git a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts index 7966bd73c0f92a7660a3e8ce3e01677d0a3aef00..5e001becb9fc1a2faed1e290fc1437c735c4a7a3 100644 --- a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts @@ -24,15 +24,17 @@ import { convertToDataTestId } from '../../support/tech.util'; export class AttachmentContainerE2EComponent { - private readonly locatorFileUploadInput: string = '-file-upload-input'; + private readonly multiUploadInput: string = 'multi-file-upload-button'; + // private readonly attachmentList: AttachmentListE2EComponent = new AttachmentListE2EComponent(); public getList(): AttachmentListE2EComponent { return this.attachmentList; } + //TODO Rename getMultiUploadButton public getUploadInput(): Cypress.Chainable<HTMLElement> { - return cy.getTestElementContaining(this.locatorFileUploadInput); + return cy.getTestElement(this.multiUploadInput); } } diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts index 057b39b29c7de8819c69e745af44cda24e300859..4b1e36d8940baf9c31b74c0db1496400ff3f3a16 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts @@ -49,7 +49,6 @@ export class VorgangBescheidWizardE2EComponent { private readonly uploadBescheidFileButton: string = '-single-file-upload-button'; private readonly uploadAttachmentButton: string = 'Anhang_hochladen-file-upload-button'; private readonly uploadAutomaticBescheid: string = 'create-bescheid-document-button'; - private readonly mailTextArea: string = 'Text-textarea-editor'; private readonly saveBescheid: string = 'save-button'; private readonly sendBescheid: string = 'send-button'; private readonly confirmAndSaveButton: string = 'confirm-and-save-button'; @@ -63,10 +62,6 @@ export class VorgangBescheidWizardE2EComponent { private readonly bescheidDocument: string = 'bescheid-document'; private readonly attachmentDocument: string = 'bescheid-attachments'; - private readonly bescheidUploadSpinner: string = '[data-test-id="bescheid-document"] ods-spinner-icon'; - private readonly attachmentUploadSpinner: string = '[data-test-id="bescheid-attachments"] ods-spinner-icon'; - private readonly bescheidSaveSpinner: string = '[data-test-id="confirm-and-save-button"] ods-spinner-icon'; - private readonly sendenSpinner: string = '[data-test-id="send-button"] ods-spinner-icon'; private readonly missingBescheidDocumentMessage: string = 'missing-bescheid-document-error-message'; private locatorRoot: string = 'bescheid-wizard'; @@ -142,35 +137,35 @@ export class VorgangBescheidWizardE2EComponent { return cy.getTestElement(this.closeDialog); } - public getCloseVerwerfenButton(): Cypress.Chainable<JQuery<HTMLElement>> { + public getCloseVerwerfenButton(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.bescheidVerwerfenButton); } - public getCloseSpeichernButton(): Cypress.Chainable<JQuery<HTMLElement>> { + public getCloseSpeichernButton(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.bescheidSpeichernButton); } - public getUploadBescheidButton(): Cypress.Chainable<JQuery<HTMLElement>> { + public getUploadBescheidButton(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.uploadBescheidFileButton); } - public getUploadAttachmentButton(): Cypress.Chainable<JQuery<HTMLElement>> { + public getUploadAttachmentButton(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.uploadAttachmentButton); } - public getFileBescheidValidInWizard(): Cypress.Chainable<JQuery<HTMLElement>> { + public getFileBescheidValidInWizard(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileBescheidValid}]`); } - public getFileAnhangValidInWizard(): Cypress.Chainable<JQuery<HTMLElement>> { + public getFileAnhangValidInWizard(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAnhangValid}]`); } - public getAutomaticBescheidFileInWizard() { + public getAutomaticBescheidFileInWizard(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAutomaticBescheid}]`); } - public getDeleteButtonOfElement(element: string): Cypress.Chainable<JQuery<HTMLElement>> { + public getDeleteButtonOfElement(element: string): Cypress.Chainable<HTMLElement> { return cy.getTestElement(element).find('[title="Anhang löschen"]'); } @@ -178,30 +173,14 @@ export class VorgangBescheidWizardE2EComponent { return filename.replace(/\./g, '') + '-file-item'; } - public getBescheidDocument(): Cypress.Chainable<JQuery<HTMLElement>> { + public getBescheidDocument(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.bescheidDocument); } - public getAttachmentDocument(): Cypress.Chainable<JQuery<HTMLElement>> { + public getAttachmentDocument(): Cypress.Chainable<HTMLElement> { return cy.getTestElement(this.attachmentDocument); } - public getBescheidUploadSpinner(): Cypress.Chainable<JQuery<HTMLElement>> { - return cy.get(this.bescheidUploadSpinner); - } - - public getAttachmentUploadSpinner(): Cypress.Chainable<JQuery<HTMLElement>> { - return cy.get(this.attachmentUploadSpinner); - } - - public getBescheidSaveSpinner(): Cypress.Chainable<JQuery<HTMLElement>> { - return cy.get(this.bescheidSaveSpinner); - } - - public getSendenSpinner(): Cypress.Chainable<JQuery<HTMLElement>> { - return cy.get(this.sendenSpinner); - } - public getMailText(): Cypress.Chainable<JQuery<HTMLElement>> { return cy.getTestElement(this.nachrichtText); } @@ -274,14 +253,6 @@ export class VorgangBescheidWizardE2EComponent { uploadFile(this.getUploadAttachmentButton(), fileName); } - public bescheidUploadSpinnerIsClosed(): void { - this.getBescheidUploadSpinner().should('not.exist'); - } - - public attachmentSpinnerIsClosed(): void { - this.getAttachmentUploadSpinner().should('not.exist'); - } - public enterDate(difference: number): void { this.getDateInput().should('exist'); enterWith(this.getDateInput(), getAdjustedDateGerman(difference)); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts index 2f0235885f20f005854b6a72df819534cbd15c6c..71531d122d7f3fdc14570feb7d498dd7f449b467 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts @@ -26,15 +26,25 @@ import localeDe from '@angular/common/locales/de'; import localeDeExtra from '@angular/common/locales/extra/de'; import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component'; import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; +import { E2EAttachmentHelper } from 'apps/alfa-e2e/src/helper/attachment/attachment.helper'; +import { E2EAttachmentVerifier } from 'apps/alfa-e2e/src/helper/attachment/attachment.verifier'; import { VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang'; import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload'; import 'cypress-real-events/support'; import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; -import { dropCollections, getTestElement } from '../../../support/cypress-helper'; +import { dropCollections } from '../../../support/cypress-helper'; import { contains, exist, haveText, haveValue, notContains, notExist } from '../../../support/cypress.util'; -import { TEST_FILE_BESCHEID_ANHANG_BIG, TEST_FILE_BESCHEID_ANHANG_VALID, TEST_FILE_BESCHEID_VALID, TEST_FILE_JPEG, TEST_FILE_JPG, TEST_FILE_PNG, TEST_FILE_WITH_CONTENT, } from '../../../support/data.util'; +import { + TEST_FILE_BESCHEID_ANHANG_BIG, + TEST_FILE_BESCHEID_ANHANG_VALID, + TEST_FILE_BESCHEID_VALID, + TEST_FILE_JPEG, + TEST_FILE_JPG, + TEST_FILE_PNG, + TEST_FILE_WITH_CONTENT, +} from '../../../support/data.util'; import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; import { buildVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util'; @@ -54,6 +64,9 @@ describe('Bescheid Dokumente hochladen', () => { const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons(); + const attachmentHelper: E2EAttachmentHelper = new E2EAttachmentHelper(); + const attachmentVerifier: E2EAttachmentVerifier = new E2EAttachmentVerifier(); + const documentError: string = 'Erlaubte Dateiendungen'; const sizeError: string = 'Anhänge größer'; const missingBescheidError: string = 'Bitte fügen Sie ein Bescheiddokument hinzu.'; @@ -90,13 +103,15 @@ describe('Bescheid Dokumente hochladen', () => { it('should upload manual Bescheid file', () => { uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID); - notExist(bescheidWizard.getBescheidUploadSpinner()); + waitForSpinnerToDisappear(); + exist(bescheidWizard.getFileBescheidValidInWizard()); }); it('should upload attachment file', () => { - uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID); - exist(bescheidWizard.getFileAnhangValidInWizard()); + attachmentHelper.uploadAttachment(TEST_FILE_BESCHEID_ANHANG_VALID); + + attachmentVerifier.verifyAttachmentInList(TEST_FILE_BESCHEID_ANHANG_VALID); }); it('should still show files after clicking Weiter and step 2', () => { @@ -127,15 +142,9 @@ describe('Bescheid Dokumente hochladen', () => { }); it('should be able to attach all valid types of files', () => { - uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_JPG); - notExist(bescheidWizard.getAttachmentUploadSpinner()); - uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_JPEG); - notExist(bescheidWizard.getAttachmentUploadSpinner()); - uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_PNG); - notExist(bescheidWizard.getAttachmentUploadSpinner()); - exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_JPG))); - exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_JPEG))); - exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_PNG))); + attachmentHelper.uploadAttachments([TEST_FILE_JPG, TEST_FILE_JPEG, TEST_FILE_PNG]); + + attachmentVerifier.verifyAttachmentsInList([TEST_FILE_JPG, TEST_FILE_JPEG, TEST_FILE_PNG]); }); }); @@ -145,8 +154,9 @@ describe('Bescheid Dokumente hochladen', () => { contains(bescheidWizard.getBescheidDocument(), documentError); }); - it('should show error if file is too big', () => { + it('should show error if file is too big', { defaultCommandTimeout: 90000 }, () => { uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_BIG); + contains(bescheidWizard.getAttachmentDocument(), sizeError); }); }); @@ -162,7 +172,7 @@ describe('Bescheid Dokumente hochladen', () => { describe('check contents of step 3', () => { it('should show Max Testermann as Antragsteller, the default message text', () => { uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID); - notExist(bescheidWizard.getBescheidUploadSpinner()); + waitForSpinnerToDisappear(); bescheidWizard.getWeiterButton().click(); diff --git a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts index 74c7bdf3d509660a3ab7e2084b8f968346331e8b..dd9743081a8eae3596b692daf53ff5b2479ce74b 100644 --- a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts +++ b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts @@ -16,8 +16,8 @@ export class E2EAttachmentHelper { this.uploadAttachments([fileName]); } - public uploadAttachments(fileName: string[]): void { - this.executor.uploadAttachment(fileName); + public uploadAttachments(fileNames: string[]): void { + this.executor.uploadAttachment(fileNames); } public uploadEmptyAttachment(fileName: string = TEST_FILE_WITHOUT_CONTENT): void { diff --git a/alfa-client/apps/alfa-e2e/src/support/data.util.ts b/alfa-client/apps/alfa-e2e/src/support/data.util.ts index 47f84cd7927ba964684b1de514a846d866d188af..46c335ab573be9cd33c24970ebd37cce56f1da15 100644 --- a/alfa-client/apps/alfa-e2e/src/support/data.util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/data.util.ts @@ -36,10 +36,13 @@ export const ORGANISATIONSEINHEITEN_ID_FOR_ADELHEIT = '10363455'; export const ORGANISATIONSEINHEITEN_ID_FOR_SABINE = '9030229'; export const ORGANISATIONSEINHEITEN_ID_FOR_BEATE = '12345678'; +//TODO Rename = nicht fachlich bezogen bspw. TEST_FILE_WITH_CONTENT_5_MB anstelle von "invalid" oder "big" export const TEST_FILE_BESCHEID_VALID: string = 'Bescheid_valid.pdf'; export const TEST_FILE_BESCHEID_BIG: string = 'Bescheid_5mb.pdf'; export const TEST_FILE_BESCHEID_ANHANG_VALID: string = 'Anhang_valid.pdf'; export const TEST_FILE_BESCHEID_ANHANG_BIG: string = 'Anhang_5mb.pdf'; +// + export const TEST_FILE_JPG: string = 'small_jpg.jpg'; export const TEST_FILE_JPEG: string = 'small_jpeg.jpeg'; export const TEST_FILE_PNG: string = 'small_png.png'; diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html index 4024dc2de95e58d010447f113834a2b1b0387252..538932cf346eea42688fc28259a330b1d18fb552 100644 --- a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html +++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html @@ -6,6 +6,7 @@ [isLoading]="isUploadInProgress$ | async" [variant]="uploadButtonVariant" data-test-id="binary-file-upload" + dataTestId="multi-file-upload-button" > <ods-spinner-icon spinner size="medium" /> <ods-attachment-icon icon size="medium" /> diff --git a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html index ff08ce18e4ad8cc6037b84833bd941f375a6da0f..e3807c40af21c86b0026c201ed9cb12525aa263b 100644 --- a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html +++ b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html @@ -35,6 +35,7 @@ [attr.data-test-id]="(label | convertForDataTest) + '-file-upload-button'" [isLoading]="uploadInProgress.loading" class="relative w-full max-w-72" + dataTestId="file-upload-editor" > <ods-spinner-icon spinner size="medium" /> <ods-attachment-icon icon size="medium" /> diff --git a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html index 837b069ad149e2e7e2eb08305e54e8ab74df16f5..409101e9b6320310d915e0364f8da49bf82a7fda 100644 --- a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html +++ b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html @@ -29,6 +29,7 @@ [isLoading]="uploadInProgress" [accept]="accept" [attr.data-test-id]="(label | convertForDataTest) + '-single-file-upload-button'" + dataTestId="single-file-upload-button" > <ng-content icon select="[icon]"></ng-content> <ng-content text select="[text]"></ng-content> diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html index b65b88d5b02c74982b872549c6d87aeccdf1644b..2e4573ac9c648f820f392f51dc8e96c237f74fb5 100644 --- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html +++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html @@ -32,7 +32,7 @@ (click)="resetInput()" [disabled]="isLoading" [multiple]="multi" - [attr.data-test-id]="(id | convertForDataTest) + '-file-upload-input'" + [attr.data-test-id]="dataTestId" /> <label [for]="id" [ngClass]="uploadButtonVariants({ variant })" role="button"> @if (isLoading) { diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts index 54b7d3b7dde522ce018e0efae8b4210f6e2e2cff..bc63bfe1e214deec130fcd1f487045d14a68ad79 100644 --- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts @@ -21,7 +21,6 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { faker } from '@faker-js/faker'; @@ -34,16 +33,18 @@ describe('FileUploadButtonComponent', () => { let fixture: ComponentFixture<FileUploadButtonComponent>; const labelText: string = faker.word.noun(); - const inputTestClass: string = getDataTestIdOf(labelText + '-file-upload-input'); + const dataTestId: string = 'dummyDataTestId'; + const input: string = getDataTestIdOf(dataTestId); beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [FileUploadButtonComponent, ConvertForDataTestPipe], + imports: [FileUploadButtonComponent], }).compileComponents(); fixture = TestBed.createComponent(FileUploadButtonComponent); component = fixture.componentInstance; component.id = labelText; + component.dataTestId = dataTestId; fixture.detectChanges(); }); @@ -54,7 +55,7 @@ describe('FileUploadButtonComponent', () => { describe('click at file input', () => { it('should call resetInput()', () => { component.resetInput = jest.fn(); - const fileInput = getElementFromFixture(fixture, inputTestClass); + const fileInput = getElementFromFixture(fixture, input); fileInput.click(); fixture.detectChanges(); @@ -68,7 +69,7 @@ describe('FileUploadButtonComponent', () => { component.multi = true; fixture.detectChanges(); - const inputElement: HTMLInputElement = getElementFromFixture(fixture, inputTestClass); + const inputElement: HTMLInputElement = getElementFromFixture(fixture, input); expect(inputElement.multiple).toEqual(component.multi); }); diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts index b5048be11b1b7e67eaf8c077e3d4cd0caab66388..9f06d3864e0c7767b368509d49449e68d18ac0a0 100644 --- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts @@ -59,6 +59,7 @@ export class FileUploadButtonComponent { @Input() accept: string = '*/*'; @Input() multi: boolean = false; @Input() variant: UploadButtonVariants['variant']; + @Input({ required: true }) dataTestId: string; @ViewChild('inputElement') inputElement: ElementRef = new ElementRef({});