diff --git a/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d45b8fd9846b8704c67c83f8e54dfc756ee1e34 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/components/postfach/postfach.e2e.component.ts @@ -0,0 +1,26 @@ +import { haveValue, typeText } from '../../support/cypress.util'; + +export class PostfachE2EComponent { + private readonly signaturText: string = 'signatur-text'; + private readonly saveSignaturButton: string = 'save-button'; + + public getSignaturText(): any { + return cy.getTestElement(this.signaturText); + } + + public setSignatur(signatur: string): void { + typeText(this.getSignaturText(), signatur); + } + + public getSaveButton(): Cypress.Chainable<Element> { + return cy.getTestElement(this.saveSignaturButton); + } + + public saveSignatur(): void { + this.getSaveButton().click(); + } + + public signatureContains(compare: string): void { + haveValue(this.getSignaturText(), compare); + } +} diff --git a/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts index fcd0df958f62ff980ee9e4134aee07cd310a29a6..b3a0b2113cef0d09537e23164dd3d5b35108cefe 100644 --- a/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts +++ b/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts @@ -15,8 +15,7 @@ describe('Login and Logout', () => { const header: HeaderE2EComponent = mainPage.getHeader(); before(() => { - // Wozu Logout? - // cy.logout(); + //loginAsAriane(); }); it('login as test user', () => { diff --git a/alfa-client/apps/admin-e2e/src/e2e/navigation/navigation.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/navigation/navigation.cy.ts deleted file mode 100644 index 9268aee2937b2ccedf333a527abf8674f495de79..0000000000000000000000000000000000000000 --- a/alfa-client/apps/admin-e2e/src/e2e/navigation/navigation.cy.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { NavigationE2EComponent } from 'apps/alfa-e2e/src/components/navigation/navigation.e2e.component'; -import { VorgangListE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-list.e2e.component'; -import { VorgangSearchE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-search.e2e.component'; -import { VorgangViewsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-views.e2e.component'; -import { UsermanagerUserE2E } from 'apps/alfa-e2e/src/model/usermanager'; -import { VorgangE2E } from 'apps/alfa-e2e/src/model/vorgang'; -import { HeaderE2EComponent } from 'apps/alfa-e2e/src/page-objects/header.po'; -import { MainPage, waitForSpinnerToDisappear } from 'apps/alfa-e2e/src/page-objects/main.po'; -import { dropCollections, dropSearchIndex } from 'apps/alfa-e2e/src/support/cypress-helper'; -import { enterWith, exist, haveText, notExist } from 'apps/alfa-e2e/src/support/cypress.util'; -import { - getUserManagerUserSabine, - getUserSabineId, - initUsermanagerUsers, - loginAsSabine, -} from 'apps/alfa-e2e/src/support/user-util'; -import { - buildVorgang, - createVorgang, - initSearchIndex, - initVorgaenge, - objectIds, -} from 'apps/alfa-e2e/src/support/vorgang-util'; - -describe('Navigation', () => { - const mainPage: MainPage = new MainPage(); - - const header: HeaderE2EComponent = mainPage.getHeader(); - const vorgangSearch: VorgangSearchE2EComponent = header.getVorgangSearch(); - - const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); - - const navigation: NavigationE2EComponent = mainPage.getNavigation(); - - const views: VorgangViewsE2EComponent = mainPage.getViews(); - - const usermanagerUserSabine: UsermanagerUserE2E = getUserManagerUserSabine(); - - const vorgang: VorgangE2E = createVorgang(); - const vorgangNotBeFiltered: VorgangE2E = { - ...buildVorgang(objectIds[0], 'vorgangNotBeFiltered'), - }; - const vorgangAssigned: VorgangE2E = { - ...buildVorgang(objectIds[1], 'vorgangAssigned'), - assignedTo: getUserSabineId(), - }; - const vorgangAssignedNotBeFiltered: VorgangE2E = { - ...buildVorgang(objectIds[2], 'vorgangAssignedNotBeFiltered'), - assignedTo: getUserSabineId(), - }; - - const searchString: string = 'NotBeFiltered'; - - before(() => { - initVorgaenge([vorgang, vorgangNotBeFiltered, vorgangAssigned, vorgangAssignedNotBeFiltered]); - initSearchIndex([vorgang, vorgangNotBeFiltered, vorgangAssigned, vorgangAssignedNotBeFiltered]); - initUsermanagerUsers(); - - loginAsSabine(); - - waitForSpinnerToDisappear(); - exist(vorgangList.getRoot()); - navigation.getAlleFilter().click(); - waitForSpinnerToDisappear(); - exist(vorgangList.getRoot()); - }); - - after(() => { - dropCollections(); - dropSearchIndex(); - }); - - describe('navigation item myVorgaenge', () => { - it('should exists', () => { - exist(navigation.getMeineVorgaengeFilter()); - }); - }); - - describe('navigation item allVorgaenge', () => { - it('should exists', () => { - exist(navigation.getAlleFilter()); - }); - }); - - describe('click on my vorgaenge', () => { - it('should hide not to user assigned vorgaenge', () => { - navigation.getMeineVorgaengeFilter().click(); - waitForSpinnerToDisappear(); - - notExist(vorgangList.getListItem(vorgang.name).getRoot()); - notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); - exist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); - exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); - }); - - it('should hide not matching vorgaenge after do search', () => { - doSearch(searchString); - waitForSpinnerToDisappear(); - - notExist(vorgangList.getListItem(vorgang.name).getRoot()); - notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); - notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); - exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); - }); - }); - - describe('click on all vorgaenge', () => { - it('should show all vorgaenge', () => { - navigation.getAlleFilter().click(); - waitForSpinnerToDisappear(); - views.getVorgangList().getRoot().click(); - - waitForSpinnerToDisappear(); - - exist(vorgangList.getListItem(vorgang.name).getRoot()); - exist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); - exist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); - exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); - }); - - it('should hide not matching vorgaenge after do search', () => { - doSearch(searchString); - waitForSpinnerToDisappear(); - - notExist(vorgangList.getListItem(vorgang.name).getRoot()); - exist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); - notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); - exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); - }); - }); - - describe('click on Suche view', () => { - it('and alle filter should show empty list', () => { - vorgangSearch.getClearButton().click(); - - waitForSpinnerToDisappear(); - - views.getSuche().getRoot().click(); - - waitForSpinnerToDisappear(); - - notExist(vorgangList.getListItem(vorgang.name).getRoot()); - notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); - notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); - notExist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); - - //TODO sauber implementieren - haveText(cy.getTestElement('empty-list-text'), 'Bitte geben Sie einen Suchbegriff ein.'); - }); - - it('and meine filter should show empty list', () => { - navigation.getMeineVorgaengeFilter().click(); - - waitForSpinnerToDisappear(); - - notExist(vorgangList.getListItem(vorgang.name).getRoot()); - notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); - notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); - notExist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); - - //TODO sauber implementieren - haveText(cy.getTestElement('empty-list-text'), 'Bitte geben Sie einen Suchbegriff ein.'); - }); - }); - - function doSearch(searchString: string): void { - enterWith(vorgangSearch.getInput(), searchString); - } -}); diff --git a/alfa-client/apps/admin-e2e/src/e2e/postfach/signatur.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/postfach/signatur.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..3c18311da5cdc478ea2a70eb772111868708078e --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/e2e/postfach/signatur.cy.ts @@ -0,0 +1,48 @@ +import { getUserAriane } from 'apps/admin-e2e/src/support/user-util'; +import { PostfachE2EComponent } from '../../components/postfach/postfach.e2e.component'; +import { UserE2E } from '../../model/user'; +import { HeaderE2EComponent } from '../../page-objects/header.po'; +import { MainPage, waitForSpinnerToDisappear } from '../../page-objects/main.po'; +import { exist } from '../../support/cypress.util'; + +describe('Signatur', () => { + //const app: App = getApp(); + const user: UserE2E = getUserAriane(); + + const mainPage: MainPage = new MainPage(); + const header: HeaderE2EComponent = mainPage.getHeader(); + const postfachTab: PostfachE2EComponent = new PostfachE2EComponent(); + + const signaturText: string = 'Signatur'; + + before(() => { + //loginAsAriane(); + }); + + it('login as Ariane', () => { + cy.visit('') + .get('#kc-login') + .should('exist') + .get('#username') + .type(user.name) + .get('#password') + .type(user.password) + .get('#kc-login') + .click(); + }); + + it('should show Signatur input', () => { + waitForSpinnerToDisappear(); + + postfachTab.setSignatur(signaturText); + postfachTab.saveSignatur(); + + postfachTab.signatureContains(signaturText); + }); + + it('should logout', () => { + header.getCurrentUserProfile().logout(); + + exist(cy.get('#kc-login')); + }); +}); diff --git a/alfa-client/apps/admin-e2e/src/support/cypress.util.ts b/alfa-client/apps/admin-e2e/src/support/cypress.util.ts index 081f34e8cb5b61c51a12c6861b133d671439177e..e6292d5ae941564deeb05ca3bd459c61761fa947 100644 --- a/alfa-client/apps/admin-e2e/src/support/cypress.util.ts +++ b/alfa-client/apps/admin-e2e/src/support/cypress.util.ts @@ -105,6 +105,10 @@ export function enterWith( element.type(CypressKeyboardActions.ENTER); } +export function typeText(element: Cypress.Chainable<JQuery<HTMLElement>>, value: string): void { + element.clear().type(value); +} + export function backspaceOn(element: any): void { element.type(CypressKeyboardActions.BACKSPACE); } diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json index 178722703f8963a3057633fb386ca9cd4e900f3e..a4407ce0e00d3e9f7a76516af245b149079cbbfe 100644 --- a/alfa-client/package-lock.json +++ b/alfa-client/package-lock.json @@ -53,7 +53,6 @@ "@angular-eslint/eslint-plugin-template": "17.3.0", "@angular-eslint/template-parser": "17.3.0", "@angular/cli": "~17.3.8", - "@angular/compiler": "^17.3.10", "@angular/compiler-cli": "17.3.10", "@angular/language-service": "17.3.10", "@bahmutov/cypress-extends": "1.1.0", @@ -89,6 +88,7 @@ "autoprefixer": "^10.4.19", "cypress": "13.6.2", "cypress-file-upload": "5.0.8", + "cypress-keycloak": "^2.0.2", "cypress-mochawesome-reporter": "3.8", "cypress-real-events": "^1.12.0", "cypress-timestamps": "^1.2.3", @@ -1398,6 +1398,7 @@ "version": "17.3.10", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@angular/compiler/-/compiler-17.3.10.tgz", "integrity": "sha512-6Ce4siHyF0fCZBDm/cz+blJByGDu1/hbPkQVGmk5HGZTmCUeKkgyjoM6bZr7ssAsyGDRwxBh2SGHO4Ce31vuPA==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -20197,6 +20198,26 @@ "cypress": ">3.0.0" } }, + "node_modules/cypress-keycloak": { + "version": "2.0.2", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cypress-keycloak/-/cypress-keycloak-2.0.2.tgz", + "integrity": "sha512-pHCjn68pai6y3MPuaM7c6UEidIfaXfl2+4WKhQ/8wgprQb7YlPcuBI1txBC477O2OFLx9ii1XlSXXq7fUP8ZAg==", + "dev": true, + "dependencies": { + "base64-js": "^1.5.1", + "js-sha256": "^0.9.0" + }, + "peerDependencies": { + "cypress": "^6.5.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0" + } + }, + "node_modules/cypress-keycloak/node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "dev": true, + "license": "MIT" + }, "node_modules/cypress-mochawesome-reporter": { "version": "3.8.2", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/cypress-mochawesome-reporter/-/cypress-mochawesome-reporter-3.8.2.tgz", diff --git a/alfa-client/package.json b/alfa-client/package.json index 83d3c5b04d4de6dee47a54b4d83d3ef45e871490..bb4bb197dcfae32595b70c19ee11b3221a5f85d5 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -130,6 +130,7 @@ "autoprefixer": "^10.4.19", "cypress": "13.6.2", "cypress-file-upload": "5.0.8", + "cypress-keycloak": "^2.0.2", "cypress-mochawesome-reporter": "3.8", "cypress-real-events": "^1.12.0", "cypress-timestamps": "^1.2.3", @@ -163,4 +164,4 @@ "ts-node": "10.9.1", "typescript": "5.4.5" } -} \ No newline at end of file +}