From 354dc2c61c9450b6ba471dde95c220026f92563b Mon Sep 17 00:00:00 2001 From: Cord Westhoff <cord.westhoff@mgm-tp.com> Date: Tue, 13 May 2025 11:42:18 +0200 Subject: [PATCH] OZG-8086 OZG-8172 add components and helper methods --- .../datenanfragen-form.e2e.component.ts | 58 +++++++++++++++++++ .../datenanfragen.e2e.component.ts | 47 +++++++++++++++ .../datenanfragen/auswertung-erstellen.cy.ts | 16 ++--- .../datenanfragen/datenanfragen.executor.ts | 22 +++++++ .../datenanfragen/datenanfragen.helper.ts | 16 +++++ .../datenanfragen/datenanfragen.navigator.ts | 18 ++++++ .../datenanfragen/datenanfragen.verifier.ts | 34 +++++++++++ 7 files changed, 203 insertions(+), 8 deletions(-) create mode 100644 alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen-form.e2e.component.ts create mode 100644 alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen.e2e.component.ts create mode 100644 alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.executor.ts create mode 100644 alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.helper.ts create mode 100644 alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.navigator.ts create mode 100644 alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.verifier.ts diff --git a/alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen-form.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen-form.e2e.component.ts new file mode 100644 index 0000000000..c8c7deab28 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen-form.e2e.component.ts @@ -0,0 +1,58 @@ +export class DatenanfragenFormE2EComponent { + private readonly root: string = 'auswertung-form'; + + private readonly nameInput: string = 'auswertung-name-text-input'; + private readonly formEngineInput: string = 'form-engine-name-text-input'; + private readonly formIdInput: string = 'form-id-text-input'; + private readonly dataFieldInputPrefix: string = 'auswertung-field-mapping-form-'; + private readonly sourceMappingFieldInputPrefix: string = 'source-mapping-field-'; + private readonly targetMappingFieldInputPrefix: string = 'target-mapping-field-'; + private readonly addDataFieldButton: string = 'add-mapping-button'; + private readonly deleteDataFieldButtonPrefix: string = 'remove-mapping-button-'; + private readonly saveButton: string = 'save-button'; + private readonly cancelButton: string = 'cancel-button'; + + public getRoot(): Cypress.Chainable<Element> { + return cy.getTestElement(this.root); + } + + public getNameInput(): Cypress.Chainable<Element> { + return cy.getTestElement(this.nameInput); + } + + public getFormEngineInput(): Cypress.Chainable<Element> { + return cy.getTestElement(this.formEngineInput); + } + + public getFormIdInput(): Cypress.Chainable<Element> { + return cy.getTestElement(this.formIdInput); + } + + public getDataFieldInput(index: number): Cypress.Chainable<Element> { + return cy.getTestElement(`${this.dataFieldInputPrefix}${index}`); + } + + public getAddFieldButton(): Cypress.Chainable<Element> { + return cy.getTestElement(this.addDataFieldButton); + } + + public getSourceMappingFieldInput(index: number): Cypress.Chainable<Element> { + return cy.getTestElement(`${this.sourceMappingFieldInputPrefix}${index}-text-input`); + } + + public getTargetMappingFieldInput(index: number): Cypress.Chainable<Element> { + return cy.getTestElement(`${this.targetMappingFieldInputPrefix}${index}-text-input`); + } + + public getDataFieldDeleteButton(index: number): Cypress.Chainable<Element> { + return cy.getTestElement(this.deleteDataFieldButtonPrefix + index); + } + + public getSaveButton(): Cypress.Chainable<Element> { + return cy.getTestElement(this.saveButton); + } + + public getCancelButton(): Cypress.Chainable<Element> { + return cy.getTestElement(this.cancelButton); + } +} diff --git a/alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen.e2e.component.ts new file mode 100644 index 0000000000..ee8426c061 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/components/datenanfragen/datenanfragen.e2e.component.ts @@ -0,0 +1,47 @@ +import { getTestElement } from '../../support/cypress-helper'; +import { convertToDataTestId } from '../../support/tech-util'; + +export class DatenanfragenE2EComponent { + private readonly headerText: string = 'auswertung-header-text'; + private readonly weitereFelderAuswertenButton = 'weitere-felder-auswerten-button'; + + public getHeaderText(): Cypress.Chainable<Element> { + return cy.getTestElement(this.headerText); + } + + public getWeitereFelderAuswertenButton(): Cypress.Chainable<Element> { + return cy.getTestElement(this.weitereFelderAuswertenButton); + } + + public getListItem(name: string): DatenanfragenListItemE2EComponent { + return new DatenanfragenListItemE2EComponent(name); + } +} + +export class DatenanfragenListItemE2EComponent { + private root: string; + + private readonly listItemName: string = 'list-item-name'; + private readonly listItemFormEngineName: string = 'list-item-form-engine-name'; + private readonly listItemFormId: string = 'list-item-form-id'; + + constructor(root: string) { + this.root = convertToDataTestId(root); + } + + public getRoot(): Cypress.Chainable<Element> { + return getTestElement(this.root); + } + + public getName(): Cypress.Chainable<Element> { + return this.getRoot().findTestElementWithClass(this.listItemName); + } + + public getFormEngineName(): Cypress.Chainable<Element> { + return this.getRoot().findTestElementWithClass(this.listItemFormEngineName); + } + + public getFormId(): Cypress.Chainable<Element> { + return this.getRoot().findTestElementWithClass(this.listItemFormId); + } +} diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/datenanfragen/auswertung-erstellen.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/datenanfragen/auswertung-erstellen.cy.ts index 9f702fb6d4..98002db9dd 100644 --- a/alfa-client/apps/admin-e2e/src/e2e/main-tests/datenanfragen/auswertung-erstellen.cy.ts +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/datenanfragen/auswertung-erstellen.cy.ts @@ -1,18 +1,18 @@ import { Auswertung, FieldMapping } from '@admin-client/reporting-shared'; -import { AuswertungFormE2EComponent } from '../../../components/auswertung/auswertung-form.e2e.component'; -import { AuswertungE2EComponent } from '../../../components/auswertung/auswertung.e2e.component'; -import { E2EAuswertungHelper } from '../../../helper/auswertung/auswertung.helper'; -import { E2EAuswertungVerifier } from '../../../helper/auswertung/auswertung.verifier'; +import { DatenanfragenFormE2EComponent } from '../../../components/datenanfragen/datenanfragen-form.e2e.component'; +import { DatenanfragenE2EComponent } from '../../../components/datenanfragen/datenanfragen.e2e.component'; +import { E2EDatenanfragenHelper } from '../../../helper/datenanfragen/datenanfragen.helper'; +import { E2EDatenanfragenVerifier } from '../../../helper/datenanfragen/datenanfragen.verifier'; import { dropCollections } from '../../../support/cypress-helper'; import { exist, notExist } from '../../../support/cypress.util'; import { loginAsDaria } from '../../../support/user-util'; describe('Datenanfrage erstellen', () => { - const page: AuswertungE2EComponent = new AuswertungE2EComponent(); - const form: AuswertungFormE2EComponent = new AuswertungFormE2EComponent(); + const page: DatenanfragenE2EComponent = new DatenanfragenE2EComponent(); + const form: DatenanfragenFormE2EComponent = new DatenanfragenFormE2EComponent(); - const helper: E2EAuswertungHelper = new E2EAuswertungHelper(); - const verifier: E2EAuswertungVerifier = new E2EAuswertungVerifier(); + const helper: E2EDatenanfragenHelper = new E2EDatenanfragenHelper(); + const verifier: E2EDatenanfragenVerifier = new E2EDatenanfragenVerifier(); const fieldMapping0: FieldMapping = { sourcePath: '/path/to/source/a', diff --git a/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.executor.ts b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.executor.ts new file mode 100644 index 0000000000..f3c1d934cc --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.executor.ts @@ -0,0 +1,22 @@ +import { Auswertung, FieldMapping } from '@admin-client/reporting-shared'; +import { AuswertungFormE2EComponent } from '../../components/auswertung/auswertung-form.e2e.component'; +import { enterWith } from '../../support/cypress.util'; + +export class E2EDatenanfragenExecutor { + private formComponent: AuswertungFormE2EComponent = new AuswertungFormE2EComponent(); + + public fillFormular(Auswertung: Auswertung): void { + enterWith(this.formComponent.getNameInput(), Auswertung.name); + enterWith(this.formComponent.getFormEngineInput(), Auswertung.formIdentifier.formEngineName); + enterWith(this.formComponent.getFormIdInput(), Auswertung.formIdentifier.formId); + + Auswertung.mappings.forEach((fieldMapping, index) => { + this.enterFieldMapping(fieldMapping, index); + }); + } + + private enterFieldMapping(fieldMapping: FieldMapping, index: number): void { + enterWith(this.formComponent.getSourceMappingFieldInput(index), fieldMapping.sourcePath); + enterWith(this.formComponent.getTargetMappingFieldInput(index), fieldMapping.targetPath); + } +} diff --git a/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.helper.ts b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.helper.ts new file mode 100644 index 0000000000..7026d7d27f --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.helper.ts @@ -0,0 +1,16 @@ +import { Auswertung } from '@admin-client/reporting-shared'; +import { E2EDatenanfragenExecutor } from './datenanfragen.executor'; +import { E2EDatenanfragenNavigator } from './datenanfragen.navigator'; + +export class E2EDatenanfragenHelper { + private readonly navigator: E2EDatenanfragenNavigator = new E2EDatenanfragenNavigator(); + private readonly executor: E2EDatenanfragenExecutor = new E2EDatenanfragenExecutor(); + + public openDatenanfragen(): void { + this.navigator.openDatenanfragen(); + } + + public fillFormular(Auswertung: Auswertung): void { + this.executor.fillFormular(Auswertung); + } +} diff --git a/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.navigator.ts b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.navigator.ts new file mode 100644 index 0000000000..832db3fd9d --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.navigator.ts @@ -0,0 +1,18 @@ +import { DatenanfragenE2EComponent } from '../../components/datenanfragen/datenanfragen.e2e.component'; +import { MainPage } from '../../page-objects/main.po'; +import { exist } from '../../support/cypress.util'; +import { E2EAppHelper } from '../app.helper'; + +export class E2EDatenanfragenNavigator { + private readonly appHelper: E2EAppHelper = new E2EAppHelper(); + + private readonly mainPage: MainPage = new MainPage(); + + private readonly AuswertungPage: DatenanfragenE2EComponent = new DatenanfragenE2EComponent(); + + public openDatenanfragen(): void { + this.appHelper.navigateToDomain(); + this.mainPage.getDatenAnfragenNavigationItem().getRoot().click(); + exist(this.AuswertungPage.getHeaderText()); + } +} diff --git a/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.verifier.ts b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.verifier.ts new file mode 100644 index 0000000000..eef9bf1475 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/helper/datenanfragen/datenanfragen.verifier.ts @@ -0,0 +1,34 @@ +import { Auswertung, FieldMapping } from '@admin-client/reporting-shared'; +import { DatenanfragenFormE2EComponent } from '../../components/datenanfragen/datenanfragen-form.e2e.component'; +import { + DatenanfragenE2EComponent, + DatenanfragenListItemE2EComponent, +} from '../../components/datenanfragen/datenanfragen.e2e.component'; +import { haveText, haveValue } from '../../support/cypress.util'; + +export class E2EDatenanfragenVerifier { + private component: DatenanfragenE2EComponent = new DatenanfragenE2EComponent(); + private formComponent: DatenanfragenFormE2EComponent = new DatenanfragenFormE2EComponent(); + + public verifyFieldMapping(fieldMapping: FieldMapping, index: number): void { + haveValue(this.formComponent.getSourceMappingFieldInput(index), fieldMapping.sourcePath); + haveValue(this.formComponent.getTargetMappingFieldInput(index), fieldMapping.targetPath); + } + + public verifyForm(Auswertung: Auswertung): void { + haveValue(this.formComponent.getNameInput(), Auswertung.name); + haveValue(this.formComponent.getFormEngineInput(), Auswertung.formIdentifier.formEngineName); + haveValue(this.formComponent.getFormIdInput(), Auswertung.formIdentifier.formId); + + Auswertung.mappings.forEach((fieldMapping, index) => { + this.verifyFieldMapping(fieldMapping, index); + }); + } + + public verifyAuswertungInList(Auswertung: Auswertung): void { + const listItem: DatenanfragenListItemE2EComponent = this.component.getListItem(Auswertung.name); + haveText(listItem.getName(), Auswertung.name); + haveText(listItem.getFormEngineName(), Auswertung.formIdentifier.formEngineName); + haveText(listItem.getFormId(), Auswertung.formIdentifier.formId); + } +} -- GitLab