diff --git a/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts index 5a67a4226ff7d7d4eda4f7d57a69fdca18bd4d72..0e8e8e7f9acc081d300bfb18acb04c4292e7ab17 100644 --- a/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts +++ b/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts @@ -13,11 +13,16 @@ export class BenutzerE2EComponent { private readonly loeschenCheckbox: string = 'Loschen-checkbox-editor'; private readonly userCheckbox: string = 'User-checkbox-editor'; private readonly postCheckbox: string = 'Poststelle-checkbox-editor'; + private readonly userRolesTable: string = 'User-roles-table'; public getHinzufuegenButton(): Cypress.Chainable<Element> { return cy.getTestElement(this.benutzerHinzufuegenButton); } + public getUserRolesTable(): Cypress.Chainable<Element> { + return cy.getTestElement(this.userRolesTable); + } + public addUser(): void { this.getHinzufuegenButton().click(); } diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts index df8ad2a80810e40567c1788ce9d2af63ed96e912..c1d04589ac61fa4b53ac9781ac7f8cb6ca18a130 100644 --- a/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts @@ -1,7 +1,7 @@ -import { BenutzerE2EComponent } from '../../components/benutzer/benutzer.e2e.component'; -import { MainPage } from '../../page-objects/main.po'; -import { beChecked, beEnabled, exist, notBeChecked, notBeEnabled } from '../../support/cypress.util'; -import { loginAsAriane } from '../../support/user-util'; +import { MainPage } from 'apps/admin-e2e/src/page-objects/main.po'; +import { BenutzerE2EComponent } from '../../../components/benutzer/benutzer.e2e.component'; +import { beChecked, beEnabled, exist, notBeChecked, notBeEnabled } from '../../../support/cypress.util'; +import { loginAsAriane } from '../../../support/user-util'; const mainPage: MainPage = new MainPage(); const benutzerPage: BenutzerE2EComponent = new BenutzerE2EComponent(); @@ -25,6 +25,10 @@ describe('Benutzer und Rollen', () => { exist(benutzerPage.getHinzufuegenButton()); }); + it('should show table with users and roles', () => { + exist(benutzerPage.getUserRolesTable()); + }); + it('should show users and attributes in table', () => { exist(benutzerPage.getUserEntry('ariane')); benutzerPage.stringExistsInUserEntry(role1, 'dorothea'); diff --git a/alfa-client/apps/alfa-e2e/cypress.config.json b/alfa-client/apps/alfa-e2e/cypress.config.json index 10160a6f1a1a224da71dcdc3671381d635fed8b9..4368e301cc77905eaf8ef585f7893173713dccad 100644 --- a/alfa-client/apps/alfa-e2e/cypress.config.json +++ b/alfa-client/apps/alfa-e2e/cypress.config.json @@ -28,7 +28,7 @@ "chromeWebSecurity": false, "reporter": "../../node_modules/cypress-mochawesome-reporter", "defaultCommandTimeout": 10000, - "specPattern": "src/e2e/**/*.cy.{js,jsx,ts,tsx}", + "specPattern": ["src/e2e/init-users.cy.ts", "src/e2e/**/*.cy.{js,jsx,ts,tsx}"], "supportFile": "src/support/e2e.ts", "testIsolation": false, "reporterOptions": { diff --git a/alfa-client/apps/alfa-e2e/src/components/user-profile/current-user-profile.component.e2e.ts b/alfa-client/apps/alfa-e2e/src/components/user-profile/current-user-profile.component.e2e.ts index caa4da170044134fd7d8439b78e4870fcb43a678..faaeee09f8b06e25d4ae46129171db67f8f73576 100644 --- a/alfa-client/apps/alfa-e2e/src/components/user-profile/current-user-profile.component.e2e.ts +++ b/alfa-client/apps/alfa-e2e/src/components/user-profile/current-user-profile.component.e2e.ts @@ -46,7 +46,7 @@ export class CurrentUserProfileE2EComponent { return cy.getTestElement(this.locatorUserIconButton); } - private getLogoutButton() { + public getLogoutButton() { return cy.getTestElement(this.locatorLogoutButton); } } diff --git a/alfa-client/apps/alfa-e2e/src/e2e/einheitlicher-ansprechpartner/vorgang-detail/vorgang-abschliessen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/einheitlicher-ansprechpartner/vorgang-detail/vorgang-abschliessen.cy.ts index 15b06ef2419bd6df855f8a76a59e8878e543a2ae..08d7553417d836b36ea7b90b4770ebbe5ac7a27f 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/einheitlicher-ansprechpartner/vorgang-detail/vorgang-abschliessen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/einheitlicher-ansprechpartner/vorgang-detail/vorgang-abschliessen.cy.ts @@ -23,27 +23,13 @@ */ import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; import { loginAsEmil } from 'apps/alfa-e2e/src/support/user-util'; -import { - buildVorgang, - createVorgang, - initVorgaenge, - objectIds, -} from 'apps/alfa-e2e/src/support/vorgang-util'; +import { buildVorgang, createVorgang, initVorgaenge, objectIds } from 'apps/alfa-e2e/src/support/vorgang-util'; import { SnackBarE2EComponent } from '../../../components/ui/snackbar.e2e.component'; import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; -import { - VorgangE2E, - VorgangMessagesE2E, - VorgangStatusE2E, - vorgangStatusLabelE2E, -} from '../../../model/vorgang'; -import { - MainPage, - waitForSpinnerToDisappear, - waitforSpinnerToAppear, -} from '../../../page-objects/main.po'; +import { VorgangE2E, VorgangMessagesE2E, VorgangStatusE2E, vorgangStatusLabelE2E } from '../../../model/vorgang'; +import { MainPage, waitForSpinnerToDisappear, waitforSpinnerToAppear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; -import { dropCollections } from '../../../support/cypress-helper'; +import { dropCollections, wait } from '../../../support/cypress-helper'; import { contains, exist, haveText, notExist } from '../../../support/cypress.util'; describe('Vorgang abschliessen', () => { @@ -52,8 +38,7 @@ describe('Vorgang abschliessen', () => { const snackBar: SnackBarE2EComponent = mainPage.getSnackBar(); const vorgangPage: VorgangPage = new VorgangPage(); - const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = - vorgangPage.getFormularButtons(); + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons(); const vorgangAbschliessen: VorgangE2E = { ...createVorgang(), @@ -88,10 +73,7 @@ describe('Vorgang abschliessen', () => { describe('by button', () => { it('should have status Beschieden', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[vorgangAbschliessen.status], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[vorgangAbschliessen.status]); }); it('should show snackBar', () => { @@ -108,10 +90,7 @@ describe('Vorgang abschliessen', () => { }); it('should have status Abgeschlossen', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN]); }); it('back to vorgang list', () => { @@ -142,10 +121,7 @@ describe('Vorgang abschliessen', () => { describe('by icon-button', () => { it('should have status Beschieden', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[vorgangAbschliessenRevoke.status], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[vorgangAbschliessenRevoke.status]); }); it('should show snackBar', () => { @@ -157,6 +133,7 @@ describe('Vorgang abschliessen', () => { it('should close snackbar on revoke', () => { snackBar.getRevokeButton().click(); + wait(500); waitForSpinnerToDisappear(); notExist(snackBar.getMessage()); @@ -165,10 +142,7 @@ describe('Vorgang abschliessen', () => { it('should show status Beschieden after progressbar dissapear', () => { notExist(vorgangPage.getProgressBar()); - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.IN_BEARBEITUNG], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.IN_BEARBEITUNG]); }); it('back to vorgang list', () => { diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/init-users.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/init-users.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..b3e205a4319a4986586efbc7d47687041866d2c7 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/init-users.cy.ts @@ -0,0 +1,55 @@ +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import localeDeExtra from '@angular/common/locales/extra/de'; +import { HeaderE2EComponent } from '../../page-objects/header.po'; +import { MainPage, waitForSpinnerToDisappear } from '../../page-objects/main.po'; +import { login, writeUserIdsIntoFile } from '../../support/cypress-helper'; +import { exist } from '../../support/cypress.util'; +import { areUsersSynced, DatabaseUser } from '../../support/user-util'; + +registerLocaleData(localeDe, 'de', localeDeExtra); + +describe('Init users', () => { + const mainPage: MainPage = new MainPage(); + const header: HeaderE2EComponent = mainPage.getHeader(); + + it('should login sabine', () => { + syncUser(DatabaseUser.SABINE); + }); + + it('should login dorothea', () => { + syncUser(DatabaseUser.DOROTHEA); + }); + it('should login peter', () => { + syncUser(DatabaseUser.PETER); + }); + xit('should login emil', () => { + // disabled until password change + syncUser(DatabaseUser.EMIL); + }); + it('should login adelheit', () => { + syncUser(DatabaseUser.ADELHEIT); + }); + it('should login ludwig', () => { + syncUser(DatabaseUser.LUDWIG); + }); + it('should login richard', () => { + syncUser(DatabaseUser.RICHARD); + }); + + it('should write user ids to file', () => { + if (!areUsersSynced()) { + writeUserIdsIntoFile(); + } + }); + + function syncUser(user: DatabaseUser) { + if (!areUsersSynced()) { + login(user); + waitForSpinnerToDisappear(); + exist(header.getLogo()); + header.getCurrentUserProfile().getUserIconButton().click(); + header.getCurrentUserProfile().getLogoutButton().click(); + } + } +}); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/navigation/navigation.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/navigation/navigation.cy.ts index 496c3213996ea51b4d00c1982ba0067ebbad34a9..2e07f38a4bd641af2bc4f306bdc371274bbad5a5 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/navigation/navigation.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/navigation/navigation.cy.ts @@ -37,13 +37,7 @@ import { initUsermanagerUsers, loginAsSabine, } from 'apps/alfa-e2e/src/support/user-util'; -import { - buildVorgang, - createVorgang, - initSearchIndex, - initVorgaenge, - objectIds, -} from 'apps/alfa-e2e/src/support/vorgang-util'; +import { buildVorgang, createVorgang, initSearchIndex, initVorgaenge, objectIds } from 'apps/alfa-e2e/src/support/vorgang-util'; describe('Navigation', () => { const mainPage: MainPage = new MainPage(); @@ -187,6 +181,6 @@ describe('Navigation', () => { }); function doSearch(searchString: string): void { - enterWith(vorgangSearch.getInput(), searchString); + enterWith(vorgangSearch.getInput(), searchString, 500); } }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-profile/user-profile-icon-assign-unassign.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-profile/user-profile-icon-assign-unassign.cy.ts index c1c79e720ee8b57d483e70b000906259be6e79ed..fbcd2ba7850d363047117b9158bdbdec3e501e94 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-profile/user-profile-icon-assign-unassign.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/user-profile/user-profile-icon-assign-unassign.cy.ts @@ -26,20 +26,11 @@ import { VorgangListItemE2EComponent } from '../../../components/vorgang/vorgang import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; import { UserE2E } from '../../../model/user'; import { VorgangE2E } from '../../../model/vorgang'; -import { - MainPage, - waitForSpinnerToDisappear, - waitforSpinnerToAppear, -} from '../../../page-objects/main.po'; +import { MainPage, waitForSpinnerToDisappear, waitforSpinnerToAppear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; import { dropCollections, wait } from '../../../support/cypress-helper'; -import { enter, exist, haveText, notExist } from '../../../support/cypress.util'; -import { - getUserDorothea, - getUserSabine, - initUsermanagerUsers, - loginAsSabine, -} from '../../../support/user-util'; +import { enterWith, exist, haveText, notExist } from '../../../support/cypress.util'; +import { getUserDorothea, getUserSabine, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; import { createVorgang, initVorgang } from '../../../support/vorgang-util'; describe('User Profile im ausgewählten Vorgang', () => { @@ -47,9 +38,7 @@ describe('User Profile im ausgewählten Vorgang', () => { const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); const vorgangPage: VorgangPage = new VorgangPage(); - const userProfileContainer: UserProfileE2EComponent = vorgangPage - .getVorgangDetailHeader() - .getUserContainer(); + const userProfileContainer: UserProfileE2EComponent = vorgangPage.getVorgangDetailHeader().getUserContainer(); const vorgang: VorgangE2E = createVorgang(); @@ -98,15 +87,16 @@ describe('User Profile im ausgewählten Vorgang', () => { describe('fill formular', () => { it('should show error on enter wrong input', () => { - userProfileContainer.getSearchContainer().getInput().clear().type('Clark Kent'); - enter(userProfileContainer.getSearchContainer().getInput()); + enterWith(userProfileContainer.getSearchContainer().getInput(), 'Clark Kent'); + cy.wait(1000); exist(userProfileContainer.getSearchContainer().getError()); exist(userProfileContainer.getIconContainer().getUnassignedIcon()); }); it('should show error on enter empty field', () => { - enter(userProfileContainer.getSearchContainer().getInput()); + enterWith(userProfileContainer.getSearchContainer().getInput(), 'Clark Kent', 500); + cy.wait(1000); exist(userProfileContainer.getSearchContainer().getError()); exist(userProfileContainer.getIconContainer().getUnassignedIcon()); @@ -138,11 +128,7 @@ describe('User Profile im ausgewählten Vorgang', () => { exist(vorgangList.getListItem(vorgang.name).getUserProfile().getRoot()); haveText( - vorgangList - .getListItem(vorgang.name) - .getUserProfile() - .getIconContainer() - .getAssignedIcon(), + vorgangList.getListItem(vorgang.name).getUserProfile().getIconContainer().getAssignedIcon(), userSabine.initials, ); }); @@ -168,10 +154,7 @@ describe('User Profile im ausgewählten Vorgang', () => { it('should hide formular', () => { userProfileContainer.getSearchContainer().getInput().clear().type(userDorothea.name); exist(userProfileContainer.getSearchContainer().getSearchOption(userDorothea.dataTestId)); - userProfileContainer - .getSearchContainer() - .getSearchOption(userDorothea.dataTestId) - .click(); + userProfileContainer.getSearchContainer().getSearchOption(userDorothea.dataTestId).click(); waitforSpinnerToAppear(); waitForSpinnerToDisappear(); @@ -184,10 +167,7 @@ describe('User Profile im ausgewählten Vorgang', () => { // WORKAROUND Hier muss aufs Verarbeiten im Backend gewartet werden - oder: wait(500) wait(500); exist(userProfileContainer.getIconContainer().getAssignedIcon()); - haveText( - userProfileContainer.getIconContainer().getAssignedIcon(), - userDorothea.initials, - ); + haveText(userProfileContainer.getIconContainer().getAssignedIcon(), userDorothea.initials); }); }); }); @@ -201,11 +181,7 @@ describe('User Profile im ausgewählten Vorgang', () => { exist(vorgangList.getListItem(vorgang.name).getUserProfile().getRoot()); haveText( - vorgangList - .getListItem(vorgang.name) - .getUserProfile() - .getIconContainer() - .getAssignedIcon(), + vorgangList.getListItem(vorgang.name).getUserProfile().getIconContainer().getAssignedIcon(), userDorothea.initials, ); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-abschliessen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-abschliessen.cy.ts index 7c24cf66f97dd2c37b98288fbe9bc481c5172aa9..2d3f3b5003c1f2a79e9a0d089eae7a56486c6c45 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-abschliessen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-abschliessen.cy.ts @@ -24,15 +24,10 @@ import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; import { SnackBarE2EComponent } from '../../../components/ui/snackbar.e2e.component'; import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; -import { - VorgangE2E, - VorgangMessagesE2E, - VorgangStatusE2E, - vorgangStatusLabelE2E, -} from '../../../model/vorgang'; +import { VorgangE2E, VorgangMessagesE2E, VorgangStatusE2E, vorgangStatusLabelE2E } from '../../../model/vorgang'; import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; -import { dropCollections } from '../../../support/cypress-helper'; +import { dropCollections, wait } from '../../../support/cypress-helper'; import { contains, exist, haveText, notExist } from '../../../support/cypress.util'; import { loginAsSabine } from '../../../support/user-util'; import { buildVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util'; @@ -43,8 +38,7 @@ describe('Vorgang abschliessen', () => { const snackBar: SnackBarE2EComponent = mainPage.getSnackBar(); const vorgangPage: VorgangPage = new VorgangPage(); - const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = - vorgangPage.getFormularButtons(); + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons(); const vorgangAbschliessen: VorgangE2E = { ...buildVorgang(objectIds[0], 'DoAbschliessen'), @@ -78,10 +72,7 @@ describe('Vorgang abschliessen', () => { describe('by button', () => { it('should have status Beschieden', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[vorgangAbschliessen.status], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[vorgangAbschliessen.status]); }); it('should show snackBar message', () => { @@ -99,10 +90,7 @@ describe('Vorgang abschliessen', () => { }); it('should have status Abgeschlossen', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN]); }); it('back to vorgang list', () => { @@ -131,10 +119,7 @@ describe('Vorgang abschliessen', () => { describe('by icon-button', () => { it('should have status Beschieden', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[vorgangAbschliessenRevoke.status], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[vorgangAbschliessenRevoke.status]); }); it('should show snackBar message', () => { @@ -147,6 +132,7 @@ describe('Vorgang abschliessen', () => { it('should close snackbar on revoke', () => { snackBar.getRevokeButton().click(); + wait(500); waitForSpinnerToDisappear(); notExist(snackBar.getMessage()); @@ -155,10 +141,7 @@ describe('Vorgang abschliessen', () => { it('should show status Beschieden', () => { notExist(vorgangPage.getProgressBar()); - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.BESCHIEDEN], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.BESCHIEDEN]); }); it('back to vorgang list', () => { diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-aktenzeichen-anlegen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-aktenzeichen-anlegen.cy.ts index ffe5e2a8433e232d4859ac4af79d778d16e69193..7d14cdb7bd568826d12bf6ba6edd6d1a45a8be7d 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-aktenzeichen-anlegen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-aktenzeichen-anlegen.cy.ts @@ -22,12 +22,7 @@ import { VorgangPage } from '../../../page-objects/vorgang.po'; import { dropCollections } from '../../../support/cypress-helper'; import { contains, enterWith, exist, notExist } from '../../../support/cypress.util'; import { getUserSabine, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; -import { - buildVorgang, - initSearchIndex, - initVorgaenge, - objectIds, -} from '../../../support/vorgang-util'; +import { buildVorgang, initSearchIndex, initVorgaenge, objectIds } from '../../../support/vorgang-util'; registerLocaleData(localeDe, 'de', localeDeExtra); @@ -46,8 +41,7 @@ describe('Aktenzeichen anlegen', () => { const vorgangPage: VorgangPage = new VorgangPage(); const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader(); - const aktenzeichenEditor: VorgangAktenzeichenEditE2EComponent = - vorgangPage.getAktenzeichenEditor(); + const aktenzeichenEditor: VorgangAktenzeichenEditE2EComponent = vorgangPage.getAktenzeichenEditor(); const header: HeaderE2EComponent = mainPage.getHeader(); const vorgangSearch: VorgangSearchE2EComponent = header.getVorgangSearch(); const bescheidWizard: VorgangBescheidWizardE2EComponent = vorgangPage.getBescheidWizard(); @@ -77,14 +71,10 @@ describe('Aktenzeichen anlegen', () => { aktenzeichen: searchAZ, }; - const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = - vorgangPage.getFormularButtons(); - const vorgangDatenFormular: VorgangFormularDatenE2EComponent = - vorgangPage.getFormularDatenContainer(); + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons(); + const vorgangDatenFormular: VorgangFormularDatenE2EComponent = vorgangPage.getFormularDatenContainer(); - const vorgangShowInSearch: VorgangListItemE2EComponent = vorgangList.getListItem( - aktenzeichenVorgangSearch.name, - ); + const vorgangShowInSearch: VorgangListItemE2EComponent = vorgangList.getListItem(aktenzeichenVorgangSearch.name); before(() => { initVorgaenge([ @@ -305,9 +295,7 @@ describe('Aktenzeichen anlegen', () => { describe('search for Aktenzeichen', () => { it('should find Vorgang with existing Aktenzeichen', () => { vorgangList.getListItem(aktenzeichenVorgangSearch.name).getRoot().click(); - enterWith(vorgangSearch.getInput(), searchAZ); - //currently the first search only works if you manually send an Enter after a short delay - cy.wait(1000); + enterWith(vorgangSearch.getInput(), searchAZ, 500); vorgangSearch.getInput().type('{enter}'); exist(vorgangShowInSearch.getRoot()); @@ -317,7 +305,7 @@ describe('Aktenzeichen anlegen', () => { vorgangList.getListItem(aktenzeichenVorgangSearch.name).getRoot().click(); vorgangHeader.getAktenzeichenEditButton().click(); setNewAktenzeichen(newAZ); - enterWith(vorgangSearch.getInput(), searchAZ); + enterWith(vorgangSearch.getInput(), searchAZ, 500); notExist(vorgangShowInSearch.getRoot()); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-wiedereroeffnen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-wiedereroeffnen.cy.ts index 656e52ca66f34a7cb7c684a7e301551872f6781d..d2645d5b111baa0cb19196e58f8ea48627ffc7a2 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-wiedereroeffnen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-wiedereroeffnen.cy.ts @@ -24,23 +24,13 @@ import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; import { SnackBarE2EComponent } from '../../../components/ui/snackbar.e2e.component'; import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; -import { - VorgangE2E, - VorgangMessagesE2E, - VorgangStatusE2E, - vorgangStatusLabelE2E, -} from '../../../model/vorgang'; +import { VorgangE2E, VorgangMessagesE2E, VorgangStatusE2E, vorgangStatusLabelE2E } from '../../../model/vorgang'; import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; import { dropCollections, wait } from '../../../support/cypress-helper'; import { contains, exist, haveText, notExist } from '../../../support/cypress.util'; import { loginAsSabine } from '../../../support/user-util'; -import { - buildVorgang, - createVorgang, - initVorgaenge, - objectIds, -} from '../../../support/vorgang-util'; +import { buildVorgang, createVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util'; describe('Vorgang wiedereroeffnen', () => { const mainPage: MainPage = new MainPage(); @@ -48,8 +38,7 @@ describe('Vorgang wiedereroeffnen', () => { const snackbar: SnackBarE2EComponent = mainPage.getSnackBar(); const vorgangPage: VorgangPage = new VorgangPage(); - const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = - vorgangPage.getFormularButtons(); + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons(); const vorgangBeschiedenWiedereroeffnen: VorgangE2E = { ...createVorgang(), @@ -119,10 +108,7 @@ describe('Vorgang wiedereroeffnen', () => { }); it('should have status In Bearbeitung', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.IN_BEARBEITUNG], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.IN_BEARBEITUNG]); }); it('back to vorgang list', () => { @@ -177,10 +163,7 @@ describe('Vorgang wiedereroeffnen', () => { it('should show status Beschieden', () => { wait(500); - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.BESCHIEDEN], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.BESCHIEDEN]); }); it('back to vorgang list', () => { @@ -232,10 +215,7 @@ describe('Vorgang wiedereroeffnen', () => { }); it('should have status In Bearbeitung', () => { - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.IN_BEARBEITUNG], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.IN_BEARBEITUNG]); }); it('back to vorgang list', () => { @@ -280,6 +260,7 @@ describe('Vorgang wiedereroeffnen', () => { it('should close snackbar on revoke', () => { snackbar.getRevokeButton().click(); + wait(500); waitForSpinnerToDisappear(); notExist(snackbar.getMessage()); @@ -288,10 +269,7 @@ describe('Vorgang wiedereroeffnen', () => { it('should show status Abgeschlossen', () => { notExist(vorgangPage.getProgressBar()); - haveText( - vorgangPage.getVorgangDetailHeader().getStatus(), - vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN], - ); + haveText(vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN]); }); it('back to vorgang list', () => { diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/user-ids.json b/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/user-ids.json new file mode 100644 index 0000000000000000000000000000000000000000..0967ef424bce6791893e9a57bb952f80fd536e93 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/fixtures/usermanager/user-ids.json @@ -0,0 +1 @@ +{} diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts index aa30f90a3e2aba7dfd964af16093943324b68d14..9787ef0dd9b5e64b2d7b739d6edf255cdf63a58b 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts @@ -42,6 +42,7 @@ enum CypressTasks { DELETE_FOLDER = 'deleteFolder', UNZIP_FILE = 'unzipDownloadFile', GET_DOWNLOAD_FILES = 'getDownloadFiles', + WRITE_USER_IDS_TO_FILE = 'writeUserIdsToFile', } enum MongoCollections { @@ -146,6 +147,10 @@ export function getDownloadFiles(): Cypress.Chainable<Array<string>> { return cy.task(CypressTasks.GET_DOWNLOAD_FILES, DOWNLOAD_FOLDER); } +export function writeUserIdsIntoFile() { + return cy.task(CypressTasks.WRITE_USER_IDS_TO_FILE, { collection: MongoCollections.USER }); +} + export function scrollToWindowBottom(): void { cy.window().scrollTo('bottom'); } @@ -154,11 +159,7 @@ export function intercept(method: string, url: string): Cypress.Chainable<null> return cy.intercept(method, url); } -export function interceptWithResponse( - method, - url: RouteMatcher, - response: RouteHandler, -): Cypress.Chainable<null> { +export function interceptWithResponse(method, url: RouteMatcher, response: RouteHandler): Cypress.Chainable<null> { return cy.intercept(method, url, response); } @@ -185,6 +186,7 @@ export function wait(ms: number, reason = ''): void { console.log(`Had to wait ${ms}ms because of: ${reason}`); } } + // export function reload(): void { diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts b/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts index a1926d26e2cd70c9e92fc9fc40271a782ac16859..cb2d876ca6b1caea67aa0dc913431cba44872609 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts @@ -1,5 +1,5 @@ import { readdir, remove } from 'fs-extra'; -import { Db, Long, MongoClient, ObjectId } from 'mongodb'; +import { Db, Document, Long, MongoClient, ObjectId, WithId } from 'mongodb'; const fs = require('fs'); const decompress = require('decompress'); @@ -66,6 +66,14 @@ module.exports = (on: any, config: any) => { unzipFile(folderName, fileName); return 0; }, + writeUserIdsToFile({ collection }) { + writeUserIds(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collection).then( + (userIds: { [username: string]: string }) => { + fs.writeFileSync('src/fixtures/usermanager/user-ids.json', JSON.stringify(userIds)); + }, + ); + return 0; + }, }); on('after:spec', (spec: Cypress.Spec, results: CypressCommandLine.RunResult) => { @@ -373,3 +381,19 @@ function unzipFile(folderName: string, fileName: string): void { decompress(folderName + '/' + fileName, folderName); return null; } + +async function writeUserIds(databaseUrl, databaseName, collection) { + return MongoClient.connect(databaseUrl).then((client: MongoClient) => { + const db: Db = client.db(databaseName); + const userIds: { [username: string]: string } = {}; + return db + .collection(collection) + .find() + .map((doc: WithId<Document>) => [doc['username'], doc._id.toString()]) + .toArray() + .then((docData: [string, string][]) => { + docData.forEach((data) => Object.assign(userIds, { [data[0]]: data[1] })); + return userIds; + }); + }); +} diff --git a/alfa-client/apps/alfa-e2e/src/support/user-util.ts b/alfa-client/apps/alfa-e2e/src/support/user-util.ts index 34d06a712b3944f70b621d4507ca2dfc3b6ca004..4abfd9ad6eaed01c439575dec62211867312bcf6 100644 --- a/alfa-client/apps/alfa-e2e/src/support/user-util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/user-util.ts @@ -21,9 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { isNotEmpty } from '@alfa-client/tech-shared'; +import { isEmpty } from 'lodash-es'; import { UserE2E } from '../model/user'; import { UsermanagerUserE2E } from '../model/usermanager'; -import { initUsermanagerData, login } from './cypress-helper'; +import { login } from './cypress-helper'; const sabineFixture: UserE2E = require('../fixtures/user-main/user_sabine.json'); const dorotheaFixture: UserE2E = require('../fixtures/user-main/user_dorothea.json'); @@ -36,16 +38,33 @@ const userManagerEmilFixture: UsermanagerUserE2E = require('../fixtures/usermana const userManagerDorotheaFixture: UsermanagerUserE2E = require('../fixtures/usermanager/usermanager_user_dorothea.json'); const userManagerZeldaFixture: UsermanagerUserE2E = require('../fixtures/usermanager/usermanager_user_zelda.json'); const userManagerArianeFixture: UsermanagerUserE2E = require('../fixtures/usermanager/usermanager_user_ariane.json'); +const userIds: { [username: string]: string } = require('../fixtures/usermanager/user-ids.json'); + +type Username = 'sabine' | 'peter' | 'emil' | 'adelheit' | 'ludwig' | 'richard' | 'zonk' | 'dorothea'; + +export function getUserId(username: Username) { + if (isEmpty(userIds)) { + throw new Error('user ids from fixtures/usermanager/user-ids.json empty'); + } + if (isEmpty(userIds[username])) { + throw new Error(`username ${username} not found in fixtures/usermanager/user-ids.json`); + } + return userIds[username]; +} + +export function areUsersSynced(): boolean { + return isNotEmpty(userIds); +} export function initUsermanagerUsers() { - initUsermanagerData([ - getUserManagerUserSabine(), - getUserManagerUserPeter(), - getUserManagerUserEmil(), - getUserManagerUserDorothea(), - getUserManagerUserZelda(), - getUserManagerUserAriane(), - ]); + // initUsermanagerData([ + // getUserManagerUserSabine(), + // getUserManagerUserPeter(), + // getUserManagerUserEmil(), + // getUserManagerUserDorothea(), + // getUserManagerUserZelda(), + // getUserManagerUserAriane(), + // ]); } export function getUserSabine(): UserE2E { @@ -89,20 +108,21 @@ export function getUserManagerUserAriane(): UsermanagerUserE2E { } export function getUserSabineId(): string { - return getUserManagerUserSabine()._id.$oid; + return getUserId('sabine'); } export function getUserDorotheaId(): string { - return getUserManagerUserDorothea()._id.$oid; + return getUserId('dorothea'); } -enum DatabaseUser { +export enum DatabaseUser { EMIL = 'user-ea/user_emil.json', ADELHEIT = 'user-main/user_adelheit.json', LUDWIG = 'user-main/user_ludwig.json', PETER = 'user-main/user_peter.json', RICHARD = 'user-main/user_richard.json', SABINE = 'user-main/user_sabine.json', + DOROTHEA = 'user-main/user_dorothea.json', ZELDA = 'user-main/user_zelda.json', ZONK = 'user-main/user_zonk.json', ARIANE = 'user-main/user_ariane.json',