diff --git a/Jenkinsfile b/Jenkinsfile index 44c34113a1aebaf8ba252f30bf6bd3b9068c9b0a..882add3efb917a596fc38b9a8d6f81b59d66504c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -64,16 +64,12 @@ pipeline { else { sh 'npm run ci-build' } - try { - if (isMasterBranch()) { - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'npm run ci-sonar' - } - } else { - sh 'npm run ci-test' + if (isMasterBranch()) { + withSonarQubeEnv('sonarqube-ozg-sh'){ + sh 'npm run ci-sonar' } - } catch (Exception e) { - unstable("SonarQube failed") + } else { + sh 'npm run ci-test' } } } diff --git a/Jenkinsfile.admin b/Jenkinsfile.admin index 56c20de85b5ca92ab3b912af303bf8b691b9d3cc..32dd06e2912dab4d05728b2baddb0e95ee9bba0a 100644 --- a/Jenkinsfile.admin +++ b/Jenkinsfile.admin @@ -34,31 +34,28 @@ pipeline { stage('build admin client and its docker image') { steps { script { - FAILED_STAGE=env.STAGE_NAME - - dir('alfa-client') { - sh 'echo "registry=https://nexus.ozg-sh.de/repository/npm-proxy" >> ~/.npmrc' - sh 'echo "//nexus.ozg-sh.de/:_auth=amVua2luczprTSFnNVUhMVQzNDZxWQ==" >> ~/.npmrc' - - sh 'npm cache verify' - sh 'npm install' - - if (isReleaseBranch()) { - sh 'npm run ci-prodBuild-admin' - } else { - sh 'npm run ci-build-admin' - } - if (isMasterBranch()) { - try { + FAILED_STAGE=env.STAGE_NAME + + dir('alfa-client') { + sh 'echo "registry=https://nexus.ozg-sh.de/repository/npm-proxy" >> ~/.npmrc' + sh 'echo "//nexus.ozg-sh.de/:_auth=amVua2luczprTSFnNVUhMVQzNDZxWQ==" >> ~/.npmrc' + + sh 'npm cache verify' + sh 'npm install' + + if (isReleaseBranch()) { + sh 'npm run ci-prodBuild-admin' + } else { + sh 'npm run ci-build-admin' + } + if (isMasterBranch()) { withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'npm run ci-sonar-admin' + sh 'npm run ci-sonar' } + } else { + sh 'npm run ci-test' } - catch (Exception e) { - unstable("SonarQube failed") - } - } - } + } } } } 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 new file mode 100644 index 0000000000000000000000000000000000000000..a66d5fbcbcd244b93179ddd19800467997c1cd11 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +export class VorgangBescheidWizardE2EComponent { + private readonly bewilligtButton: string = 'button-bewilligt'; + private readonly abgelehntButton: string ='button-abgelehnt'; + private readonly ueberspringenButton: string='bescheid-ueberspringen' + private readonly statusText: string='bescheid-status-text' + private readonly ueberspringenDialog: string='bescheid-ueberspringen-dialog'; + private readonly ueberspringenAbbrechen: string='ueberspringen-abbrechen-button'; + private readonly ueberspringenAbschliessen: string='ueberspringen-abschliessen-button'; + private readonly dateInput: string='am-date-input'; + private readonly dateError: string='am-date-error'; + private readonly weiterButton: string="bescheid-weiter-button"; + private readonly stepCaption: string="step-cation"; + private readonly stepButton1: string="step-1-button"; + private readonly stepButton2: string="step-2-button"; + private readonly stepButton3: string="step-3-button"; + private readonly closeButton: string="close-bescheid"; + + + private locatorRoot: string = 'bescheid-wizard'; + + public getRoot() { + return cy.getTestElement(this.locatorRoot); + } + + public getBewilligtButton() { + return cy.getTestElement(this.bewilligtButton); + } + + public getAbgelehntButton() { + return cy.getTestElement(this.abgelehntButton); + } + + public getUeberspringenButton() { + return cy.getTestElement(this.ueberspringenButton); + } + public getStatusText() { + return cy.getTestElement(this.statusText); + } + + public getUeberspringenDialog() { + return cy.getTestElement(this.ueberspringenDialog); + } + + public getUeberspringenAbbrechen() { + return cy.getTestElement(this.ueberspringenAbbrechen); + } + + public getUeberspringenAbschliessen() { + return cy.getTestElement(this.ueberspringenAbschliessen); + } + + public getDateInput() { + return cy.getTestElement(this.dateInput); + } + public getDateError() { + return cy.getTestElement(this.dateError); + } + + public getWeiterButton() { + return cy.getTestElement(this.weiterButton); + } + + public getStepCaption() { + return cy.getTestElement(this.stepCaption); + } + + public getStepButton1() { + return cy.getTestElement(this.stepButton1); + } + + public getStepButton2() { + return cy.getTestElement(this.stepButton2); + } + + public getStepButton3() { + return cy.getTestElement(this.stepButton3); + } + + public getCloseButton() { + return cy.getTestElement(this.closeButton); + } + + +} diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..a5e63b2ffcf37a7e62fcf6b7179a97396ce2f08e --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts @@ -0,0 +1,184 @@ +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import localeDeExtra from '@angular/common/locales/extra/de'; +import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; +import { VorgangE2E, VorgangStatusE2E, vorgangStatusLabelE2E } from 'apps/alfa-e2e/src/model/vorgang'; +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 } from '../../../support/cypress-helper'; +import { contains, haveText, exist, notExist } from '../../../support/cypress.util'; +import { + initUsermanagerUsers, + getUserManagerUserSabine, + loginAsSabine, +} from '../../../support/user-util'; +import { + buildVorgang, + initVorgaenge, + objectIds, +} from '../../../support/vorgang-util'; +import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component'; + +registerLocaleData(localeDe, 'de', localeDeExtra); + +describe('Bescheid Wizard', () => { + const mainPage: MainPage = new MainPage(); + const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); + + const bewilligtText: string = 'Bewilligt am'; + const abgelehntText: string = 'Abgelehnt am'; + const stepCaption1: string ='Antrag bescheiden'; + const stepCaption2: string='Dokumente hinzufügen'; + const stepCaption3: string='Bescheid versenden'; + + const vorgangPage: VorgangPage = new VorgangPage(); + const bescheidWizard: VorgangBescheidWizardE2EComponent = + vorgangPage.getBescheidWizard(); + + const wizardVorgang: VorgangE2E = { + ...buildVorgang(objectIds[0], 'Wizard Vorgang'), + status: VorgangStatusE2E.IN_BEARBEITUNG, + }; + + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = + vorgangPage.getFormularButtons(); + + + before(() => { + initVorgaenge([ + wizardVorgang, + ]); + initUsermanagerUsers([getUserManagerUserSabine()]); + + loginAsSabine(); + + waitForSpinnerToDisappear(); + exist(vorgangList.getRoot()); + }); + + after(() => { + dropCollections(); + }); + + function getAdjustedDateFormatted(daysOffset: number): string { + const date = new Date(); + date.setDate(date.getDate() + daysOffset); + + const day = String(date.getDate()).padStart(2, '0'); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const year = date.getFullYear(); + + return `${day}.${month}.${year}`; + } + + function changeDateFormat(dateStr) { + const parts = dateStr.split('.'); + + return `${parts[2]}/${parts[1]}/${parts[0]}`; + } + + describe('testing basic navigation elements', () => { + it('should open Wizard after click on Bescheiden', () => { + vorgangList.getListItem(wizardVorgang.name).getRoot().click(); + waitForSpinnerToDisappear(); + + vorgangFormularButtons.getBescheidenButton().click(); + exist(bescheidWizard.getRoot()); + }); + + it('should click on buttons and adjust text', () => { + bescheidWizard.getAbgelehntButton().click(); + contains(bescheidWizard.getStatusText(), abgelehntText); + + bescheidWizard.getBewilligtButton().click(); + contains(bescheidWizard.getStatusText(), bewilligtText); + + bescheidWizard.getDateInput().clear().type(getAdjustedDateFormatted(-1)); + contains(bescheidWizard.getStatusText(), bewilligtText + ' ' + getAdjustedDateFormatted(-1)); + }); + + it('should show error message on invalid date format', () => { + notExist(bescheidWizard.getDateError()); + + bescheidWizard.getDateInput().clear().type(changeDateFormat(getAdjustedDateFormatted(-1))); + bescheidWizard.getWeiterButton().click(); + exist(bescheidWizard.getDateError()); + + bescheidWizard.getDateInput().clear().type(getAdjustedDateFormatted(-1)); + }) + + it('should show next steps after click on Weiter', () => { + bescheidWizard.getRoot().contains(stepCaption1); + bescheidWizard.getRoot().should('not.contain', stepCaption2); + bescheidWizard.getRoot().should('not.contain', stepCaption3); + + bescheidWizard.getWeiterButton().click(); + bescheidWizard.getRoot().contains(stepCaption1); + bescheidWizard.getRoot().contains(stepCaption2); + bescheidWizard.getRoot().should('not.contain', stepCaption3); + + bescheidWizard.getWeiterButton().click(); + bescheidWizard.getRoot().contains(stepCaption1); + bescheidWizard.getRoot().contains(stepCaption2); + bescheidWizard.getRoot().contains(stepCaption3); + }) + + it('should show previous steps after click on numbers', () => { + bescheidWizard.getStepButton2().click(); + bescheidWizard.getRoot().contains(stepCaption1); + bescheidWizard.getRoot().contains(stepCaption2); + bescheidWizard.getRoot().should('not.contain', stepCaption3); + + bescheidWizard.getStepButton1().click(); + bescheidWizard.getRoot().contains(stepCaption1); + bescheidWizard.getRoot().should('not.contain', stepCaption2); + bescheidWizard.getRoot().should('not.contain', stepCaption3); + }) + + it ('should close Wizard on Überspringen, discard data and set status to Abgeschlossen', () => { + bescheidWizard.getAbgelehntButton().click(); + bescheidWizard.getWeiterButton().click(); + bescheidWizard.getStepButton1().click(); + bescheidWizard.getUeberspringenButton().click(); + exist(bescheidWizard.getUeberspringenDialog()); + + bescheidWizard.getUeberspringenAbbrechen().click(); + notExist(bescheidWizard.getUeberspringenDialog()); + + bescheidWizard.getUeberspringenButton().click(); + bescheidWizard.getUeberspringenAbschliessen().click(); + notExist(bescheidWizard.getRoot()); + + cy.wait(1000); + haveText( + vorgangPage.getVorgangDetailHeader().getStatus(), + vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN] + ); + + vorgangFormularButtons.getWiedereroeffnenButton().click(); + vorgangFormularButtons.getBescheidenButton().click(); + contains(bescheidWizard.getStatusText(), bewilligtText); + }) + }); + + describe('Save entries after Weiter', () => { + it ('should NOT save entries without click on Weiter', () => { + bescheidWizard.getAbgelehntButton().click(); + bescheidWizard.getCloseButton().click(); + vorgangFormularButtons.getBescheidenButton().click(); + contains(bescheidWizard.getStatusText(), bewilligtText); + }) + + it ('should save entries after click on Weiter', () => { + cy.wait(1000); + bescheidWizard.getAbgelehntButton().click(); + bescheidWizard.getWeiterButton().click(); + cy.wait(2000); + bescheidWizard.getCloseButton().click(); + vorgangFormularButtons.getBescheidenButton().click(); + contains(bescheidWizard.getStatusText(), abgelehntText); + }) + }) +}); 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 30d12ec54634d0071e464fc7fb2ac543f21e5bb8..be9a7cee4252677d3fd0303acb10468fbb258628 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 @@ -31,6 +31,7 @@ import { } from 'apps/alfa-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component'; import { VorgangFormularDatenE2EComponent } from '../../../components/vorgang/vorgang-formular.e2e.component'; import { HistorieHeadlineE2E } from 'apps/alfa-e2e/src/model/historie'; +import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component'; registerLocaleData(localeDe, 'de', localeDeExtra); @@ -53,6 +54,7 @@ describe.skip('FIXME, Aktenzeichen anlegen', () => { vorgangPage.getAktenzeichenEditor(); const header: HeaderE2EComponent = mainPage.getHeader(); const vorgangSearch: VorgangSearchE2EComponent = header.getVorgangSearch(); + const bescheidWizard: VorgangBescheidWizardE2EComponent = vorgangPage.getBescheidWizard(); const aktenzeichenVorgang: VorgangE2E = { ...buildVorgang(objectIds[0], 'Aktenzeichen Vorgang'), @@ -138,11 +140,8 @@ describe.skip('FIXME, Aktenzeichen anlegen', () => { it('should not show icon on all following status', () => { vorgangFormularButtons.getBescheidenButton().click(); - waitForSpinnerToDisappear(); - - notExist(vorgangHeader.getAktenzeichenEdit()); - - vorgangFormularButtons.getAbschliessenButton().click(); + bescheidWizard.getUeberspringenButton().click(); + bescheidWizard.getUeberspringenAbschliessen().click(); waitForSpinnerToDisappear(); notExist(vorgangHeader.getAktenzeichenEdit()); diff --git a/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts b/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts index f99a9e9f9954ffc714f3cbf377c33e6cbc00bbfc..b7d4783fbe0ca7aec6225a0a6527219f85b70ec8 100644 --- a/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts +++ b/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts @@ -28,6 +28,7 @@ import { PostfachMailE2EComponent } from '../components/postfach/postfach-mail.e import { FixedDialogE2EComponent } from '../components/ui/fixed-dialog.e2e.component'; import { VorgangAktenzeichenEditE2EComponent } from '../components/vorgang/vorgang-aktenzeichen-edit.e2e.component'; import { AntragstellerE2EComponent } from '../components/vorgang/vorgang-antragsteller.e2e.component'; +import { VorgangBescheidWizardE2EComponent } from '../components/vorgang/vorgang-bescheid-wizard.e2e.component'; import { VorgangDetailHeaderE2EComponent } from '../components/vorgang/vorgang-detail-header.e2e.component'; import { VorgangFormularButtonsE2EComponent } from '../components/vorgang/vorgang-formular-buttons.e2e.components'; import { VorgangFormularDatenE2EComponent } from '../components/vorgang/vorgang-formular.e2e.component'; @@ -48,7 +49,8 @@ export class VorgangPage { private readonly moreMenu: VorgangMoreMenuE2EComponent = new VorgangMoreMenuE2EComponent(); private readonly aktenzeichenEditor: VorgangAktenzeichenEditE2EComponent = new VorgangAktenzeichenEditE2EComponent(); - + private readonly bescheidWizard: VorgangBescheidWizardE2EComponent = + new VorgangBescheidWizardE2EComponent(); private readonly wiedervorlagen: WiedervorlagenInVorgangE2EComponent = new WiedervorlagenInVorgangE2EComponent(); private readonly forwardingContainer: VorgangForwardingE2EComponent = @@ -96,6 +98,10 @@ export class VorgangPage { return this.aktenzeichenEditor; } + public getBescheidWizard(): VorgangBescheidWizardE2EComponent { + return this.bescheidWizard; + } + public getAttachmentContainer(): AttachmentContainerE2EComponent { return this.attachmentContainer; } diff --git a/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts b/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts index 94778bc50d3155b931f31324eec76b52cc538c2d..1319b8d93554b29e92dfc3f46aee07a2b82f5eae 100644 --- a/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts +++ b/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts @@ -13,7 +13,7 @@ import { } from '../../../user/user.model'; import { fakeAsync, tick } from '@angular/core/testing'; import { singleCold, singleHot } from 'libs/tech-shared/src/lib/resource/marbles'; -import { Observable, throwError } from 'rxjs'; +import { lastValueFrom, Observable, throwError } from 'rxjs'; import { hot } from 'jest-marbles'; import { getOrganisationseinheitErrorMessage } from '../../../user/user.util'; @@ -43,31 +43,90 @@ describe('OrganisationseinheitFormService', () => { formService.handleError = jest.fn(); }); - it('should call handle error with service call observable', fakeAsync(() => { - const error: OrganisationseinheitError = createOrganisationseinheitError(); - formService.callService = jest.fn().mockReturnValue(throwError(() => error)); + describe('with successful validation', () => { + beforeEach(() => { + formService.validate = jest.fn().mockReturnValue(true); + }); + it('should call handle error with service call observable', fakeAsync(() => { + const error: OrganisationseinheitError = createOrganisationseinheitError(); + formService.callService = jest.fn().mockReturnValue(throwError(() => error)); + + formService.submit().subscribe(); + tick(); + + expect(formService.handleError).toHaveBeenCalledWith(error); + })); - formService.submit().subscribe(); - tick(); + it('should emit emit progress as false on error', () => { + const error: OrganisationseinheitError = createOrganisationseinheitError(); + formService.callService = jest.fn().mockReturnValue(hot('a#', { a: true }, error)); - expect(formService.handleError).toHaveBeenCalledWith(error); - })); + const progressObservable: Observable<boolean> = formService.submit(); + + expect(progressObservable).toBeObservable(hot('a(b|)', { a: true, b: false })); + }); - it('should emit emit progress as false on error', () => { - const error: OrganisationseinheitError = createOrganisationseinheitError(); - formService.callService = jest.fn().mockReturnValue(hot('a#', { a: true }, error)); + it('should return progress observable', () => { + formService.callService = jest.fn().mockReturnValue(singleCold(true)); - const progressObservable: Observable<boolean> = formService.submit(); + const progressObservable: Observable<boolean> = formService.submit(); - expect(progressObservable).toBeObservable(hot('a(b|)', { a: true, b: false })); + expect(progressObservable).toBeObservable(singleCold(true)); + }); }); + describe('with unsuccessful validation', () => { + beforeEach(() => { + formService.validate = jest.fn().mockReturnValue(false); + }); - it('should return progress observable', () => { - formService.callService = jest.fn().mockReturnValue(singleCold(true)); + it('should return progress observable with false', async () => { + const progressObservable: Observable<boolean> = formService.submit(); - const progressObservable: Observable<boolean> = formService.submit(); + const progress: boolean = await lastValueFrom(progressObservable); - expect(progressObservable).toBeObservable(singleCold(true)); + expect(progress).toBeFalsy(); + }); + }); + }); + + describe('validate', () => { + const hasIdMissingError = () => + formService.form.hasError( + OrganisationseinheitErrorType.ID_MISSING, + OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, + ); + describe('without organisationeinheitIds', () => { + beforeEach(() => { + formService.form.setValue({ + [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: + organisationseinheit.name, + [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD]: ',', + }); + }); + + it('should set id-missing error', () => { + formService.validate(); + + expect(hasIdMissingError()).toBeTruthy(); + }); + it('should be invalid', () => { + const valid: boolean = formService.validate(); + + expect(valid).toBeFalsy(); + }); + }); + describe('with organisationeinheitIds', () => { + it('should not set error', () => { + formService.validate(); + + expect(hasIdMissingError()).toBeFalsy(); + }); + + it('should be valid', () => { + const valid: boolean = formService.validate(); + + expect(valid).toBeTruthy(); + }); }); }); @@ -204,6 +263,14 @@ describe('OrganisationseinheitFormService', () => { describe('patch', () => { const organisationseinheit: Organisationseinheit = createOrganisationseinheit(); + it('should reset', () => { + formService.reset = jest.fn(); + + formService.patch(organisationseinheit); + + expect(formService.reset).toHaveBeenCalled(); + }); + it('should set source', () => { formService.patch(organisationseinheit); @@ -246,6 +313,14 @@ describe('OrganisationseinheitFormService', () => { }); describe('reset', () => { + it('should set source to null', () => { + formService.form.reset = jest.fn(); + + formService.reset(); + + expect(formService.source).toBeNull(); + }); + it('should call form reset', () => { formService.form.reset = jest.fn(); diff --git a/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts b/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts index a5b71af7536c8a763466a3600cd3f67c9487d3dd..ecad82623c8f1f5f192fd77ba5e96d381efedfa8 100644 --- a/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts +++ b/alfa-client/libs/admin-settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-form/organisationseinheit.formservice.ts @@ -30,12 +30,16 @@ export class OrganisationseinheitFormservice { } public submit(): Observable<boolean> { - return this.callService().pipe( - catchError((error: OrganisationseinheitError) => { - this.handleError(error); - return of(false); - }), - ); + if (this.validate()) { + return this.callService().pipe( + catchError((error: OrganisationseinheitError) => { + this.handleError(error); + return of(false); + }), + ); + } else { + return of(false); + } } callService(): Observable<boolean> { @@ -57,6 +61,20 @@ export class OrganisationseinheitFormservice { }); } + validate(): boolean { + let valid: boolean = true; + + if (this.getOrganisationseinheitIds().length == 0) { + this.setError(OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, { + errorType: OrganisationseinheitErrorType.ID_MISSING, + detail: '', + }); + valid = false; + } + + return valid; + } + private getName(): string { return this.getStringFromPotentiallyEmptyField( OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, @@ -65,9 +83,7 @@ export class OrganisationseinheitFormservice { private getOrganisationseinheitIds(): string[] { return this.splitOrganisationseinheitIds( - this.getStringFromPotentiallyEmptyField( - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD, - ), + this.form.get(OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_IDS_FIELD).value ?? '', ); } @@ -84,15 +100,17 @@ export class OrganisationseinheitFormservice { error.errorType === OrganisationseinheitErrorType.NAME_CONFLICT || error.errorType === OrganisationseinheitErrorType.NAME_MISSING ) { - const control: AbstractControl = this.form.get( - OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, - ); - control.setErrors({ - [error.errorType]: getOrganisationseinheitErrorMessage(error), - }); + this.setError(OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD, error); } } + private setError(controlName: string, error: OrganisationseinheitError): void { + const control: AbstractControl = this.form.get(controlName); + control.setErrors({ + [error.errorType]: getOrganisationseinheitErrorMessage(error), + }); + } + splitOrganisationseinheitIds(organisationseinheitIdsString: string): string[] { return organisationseinheitIdsString .split(',') @@ -101,6 +119,7 @@ export class OrganisationseinheitFormservice { } public patch(organisationseinheit: Organisationseinheit): void { + this.reset(); this.source = organisationseinheit; this.form.patchValue({ [OrganisationseinheitFormservice.ORGANISATIONSEINHEIT_NAME_FIELD]: organisationseinheit.name, @@ -110,6 +129,7 @@ export class OrganisationseinheitFormservice { } public reset(): void { + this.source = null; this.form.reset(); this.form.markAsUntouched(); } diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts index d8c740a91f8509dcf6be09155f277fdf13b8d457..a1cea49d6140724fd3f32c367ecd56937d112f3d 100644 --- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts +++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts @@ -176,7 +176,7 @@ describe('PostfachFormComponent', () => { function createProblemDetailForAbsenderName(): ProblemDetail { return { ...createProblemDetail(), - 'invalid-params': [{ ...createInvalidParam(), name: 'settingsBody.absender.name' }], + 'invalid-params': [{ ...createInvalidParam(), name: 'settingBody.absender.name' }], }; } diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts index a7adf151bf710ae9e6b0417efdf2334a244ea862..f615c6ce868a39449363184dd6643f96680e3e38 100644 --- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts +++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts @@ -3,9 +3,10 @@ import { PostfachFormService } from './postfach.formservice'; import { mock, Mock, useFromMock } from '@alfa-client/test-utils'; import { PostfachService } from '../../postfach.service'; import { createPostfach, createPostfachResource } from '../../../../../test/postfach/postfach'; +import { PostfachResource } from '../../postfach.model'; +import { createStateResource, StateResource } from '@alfa-client/tech-shared'; import { Postfach } from '../../postfach.model'; import { Observable, of } from 'rxjs'; -import { toResource } from 'libs/tech-shared/test/resource'; import { cold } from 'jest-marbles'; import { createEmptyStateResource } from '@alfa-client/tech-shared'; @@ -27,7 +28,10 @@ describe('PostfachFormService', () => { const postfach: Postfach = createPostfach(); beforeEach(() => { - postfachService.save.mockReturnValue(of(toResource(createPostfachResource()))); + const stateResource: StateResource<PostfachResource> = + createStateResource(createPostfachResource()); + postfachService.save.mockReturnValue(of(stateResource)); + postfachService.get.mockReturnValue(of(stateResource)); formService.form.setValue({ [PostfachFormService.ASBSENDER_GROUP]: { [PostfachFormService.NAME_FIELD]: postfach.absender.name, diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts index 1a8f122192eac7732110e0ee37b54244ed3234ab..7f0a67b336a0b1adad0affc350741be662664de1 100644 --- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts +++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts @@ -59,7 +59,7 @@ export class PostfachFormService extends AbstractFormService { } protected getPathPrefix(): string { - return 'settingsBody'; + return 'settingBody'; } public get invalidEmpty(): boolean { diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts index 4fa62e36803d3ce3326f0d9b88e5dfe55b15c188..b35600877d2dffe3f97f487ac94b5a295ab04fc0 100644 --- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts +++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts @@ -4,7 +4,7 @@ import { Postfach, PostfachResource, PostfachSettingsItem } from './postfach.mod import { ResourceService } from 'libs/tech-shared/src/lib/resource/resource.service'; import { SettingsService } from '../admin-settings.service'; import { ResourceServiceConfig } from 'libs/tech-shared/src/lib/resource/resource.model'; -import { Observable, of, tap } from 'rxjs'; +import { Observable } from 'rxjs'; import { HttpError, StateResource } from '@alfa-client/tech-shared'; import { SettingName } from '../admin-settings.model'; import { PostfachLinkRel } from './postfach.linkrel'; diff --git a/alfa-client/libs/admin-settings/src/lib/user/user.model.ts b/alfa-client/libs/admin-settings/src/lib/user/user.model.ts index 13a1c2cf616cfae08c6a485a50e3d8f2f47c4a84..308e945aa9b0f900ccfc135eeb98f713efc7e5e7 100644 --- a/alfa-client/libs/admin-settings/src/lib/user/user.model.ts +++ b/alfa-client/libs/admin-settings/src/lib/user/user.model.ts @@ -13,6 +13,7 @@ export interface OrganisationseinheitState { export enum OrganisationseinheitErrorType { NAME_CONFLICT = 'name-conflict', NAME_MISSING = 'name-missing', + ID_MISSING = 'id-missing', } export interface OrganisationseinheitError { diff --git a/alfa-client/libs/admin-settings/src/lib/user/user.util.ts b/alfa-client/libs/admin-settings/src/lib/user/user.util.ts index ac5daa3cb50772102f200277a078d48c081ac123..2a1da4ffbdac3353761518988c9c112cbc450ca1 100644 --- a/alfa-client/libs/admin-settings/src/lib/user/user.util.ts +++ b/alfa-client/libs/admin-settings/src/lib/user/user.util.ts @@ -3,6 +3,8 @@ import { OrganisationseinheitError, OrganisationseinheitErrorType } from './user export const KEYCLOAK_ERROR_MESSAGES: { [type: string]: string } = { [OrganisationseinheitErrorType.NAME_CONFLICT]: 'Der Name exisitert bereits.', [OrganisationseinheitErrorType.NAME_MISSING]: 'Bitte den Namen angeben.', + [OrganisationseinheitErrorType.ID_MISSING]: + 'Bitte mindestens eine Organisationseinheit ID angeben.', }; export const KEYCLOAK_CREATE_GROUPS_ERROR_STATUS: { diff --git a/alfa-client/libs/admin-settings/test/postfach/postfach.ts b/alfa-client/libs/admin-settings/test/postfach/postfach.ts index 5b7fb0003b346167c232422c8969062e8559dc1d..31fbf8b79bc0a23c2cbfae6a19d6f8ecd5d3c481 100644 --- a/alfa-client/libs/admin-settings/test/postfach/postfach.ts +++ b/alfa-client/libs/admin-settings/test/postfach/postfach.ts @@ -34,6 +34,6 @@ export function createPostfachResource(): PostfachResource { export function createSettingItemResource(): SettingItemResource { return toResource({ name: faker.random.word(), - settingsBody: {}, + settingBody: {}, }); } diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts index 3311716c86977541f2d114b2ef74d8b5db0cdd38..08d197454b4224dc712dcaf47f1ed3f881fe6c34 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts @@ -1,15 +1,16 @@ import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; -import { Observable, lastValueFrom, of, throwError } from 'rxjs'; +import { lastValueFrom, Observable, of, throwError } from 'rxjs'; import { ResourceService } from './resource.service'; import { ResourceRepository } from './resource.repository'; import { LinkRelationName, ResourceServiceConfig, SaveResourceData } from './resource.model'; -import { Resource, getUrl } from '@ngxp/rest'; +import { getUrl, Resource } from '@ngxp/rest'; import { createDummyResource } from 'libs/tech-shared/test/resource'; +import * as ResourceUtil from './resource.util'; import { - StateResource, createEmptyStateResource, createErrorStateResource, createStateResource, + StateResource, } from './resource.util'; import { fakeAsync, tick } from '@angular/core/testing'; import { singleCold, singleHot } from './marbles'; @@ -18,8 +19,6 @@ import { createProblemDetail } from 'libs/tech-shared/test/error'; import { HttpError, ProblemDetail } from '../tech.model'; import { cold } from 'jest-marbles'; -import * as ResourceUtil from './resource.util'; - describe('ResourceService', () => { let service: ResourceService<Resource, Resource>; let config: ResourceServiceConfig<Resource>; @@ -443,6 +442,16 @@ describe('ResourceService', () => { expect(service.handleError).toHaveBeenCalledWith(errorResponse); }); + + it('should update state resource subject', fakeAsync(() => { + service.stateResource.next(createStateResource(resourceWithEditLinkRel)); + repository.save.mockReturnValue(of(loadedResource)); + + service.save(dummyToSave).subscribe(); + tick(); + + expect(service.stateResource.value).toEqual(createStateResource(loadedResource)); + })); }); describe('handleError', () => { diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts index c14a661395d83c8b9ff53fd4286ff4a2f7d2211d..a5a705e9d9b0369c2169f00075925c5a67bc4459 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts @@ -1,11 +1,10 @@ import { BehaviorSubject, - Observable, catchError, combineLatest, filter, map, - mergeMap, + Observable, of, startWith, tap, @@ -13,21 +12,20 @@ import { } from 'rxjs'; import { ResourceServiceConfig } from './resource.model'; import { - StateResource, createEmptyStateResource, createErrorStateResource, createStateResource, isLoadingRequired, + StateResource, throwErrorOn, } from './resource.util'; -import { Resource, getUrl, hasLink } from '@ngxp/rest'; +import { getUrl, hasLink, Resource } from '@ngxp/rest'; import { ResourceRepository } from './resource.repository'; import { isEqual, isNull } from 'lodash-es'; import { isNotNull } from '../tech.util'; import { HttpErrorResponse } from '@angular/common/http'; import { isUnprocessableEntity } from '../http.util'; import { HttpError, ProblemDetail } from '../tech.model'; -import { isDevMode } from '@angular/core'; /** * B = Type of baseresource @@ -146,11 +144,10 @@ export class ResourceService<B extends Resource, T extends Resource> { public save(toSave: unknown): Observable<StateResource<T | HttpError>> { this.verifyEditLinkRel(); - return this.stateResource.asObservable().pipe( - mergeMap((selectedResource: StateResource<T>) => - this.doSave(selectedResource.resource, toSave), - ), - map((loadedResource: T) => createStateResource(loadedResource)), + const previousResource: T = this.stateResource.value.resource; + return this.doSave(previousResource, toSave).pipe( + tap((loadedResource: T) => this.stateResource.next(createStateResource(loadedResource))), + map(() => this.stateResource.value), catchError((errorResponse: HttpErrorResponse) => this.handleError(errorResponse)), ); } diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html index 050afc60a55bdcd2ea2d0152e5f00a37caec2bed..e146178cec6128d07139f4a9c0a832ea0ea2550b 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html @@ -1,4 +1,5 @@ <div class="my-2 text-base font-bold text-primary-600">Bescheid</div> + <p *ngIf="this.formService.getBescheidChanges() | async as bescheid" class="flex text-text"> <span class="flex items-center gap-2" *ngIf="bescheid.bewilligt" ><mat-icon svgIcon="stamp" class="text-bewilligt"></mat-icon>Bewilligt am diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html index 375e1c353400a615f43ec33c2ea52da11c44d4c4..61d6e5bedaf223894bcfb47addbdaa0b087400ae 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html @@ -1,5 +1,6 @@ <section class="w-full overflow-auto rounded-xl bg-background-100"> - <div class="px-6 py-6"> + <div class="px-6 py-6" + data-test-id="bescheid-status-text"> <alfa-vorgang-detail-bescheiden-result-status></alfa-vorgang-detail-bescheiden-result-status> </div> </section> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html index 58289fc7c21f861903d5d6cb6288cce7c9d818dc..6d67148c9435fc972d176e3167783d7f15247fd1 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html @@ -14,10 +14,14 @@ : '' " ></div> + <button class="z-10 flex" (click)="clickHandler(step)" [ngClass]="isPrevious() ? 'cursor-pointer' : 'cursor-default'" + + [attr.data-test-id]="step === 1 ? 'step-1-button' : (step === 2 ? 'step-2-button' : (step === 3 ? 'step-3-button' : ''))" + > <span class="flex size-10 items-center justify-center rounded-full" @@ -36,3 +40,5 @@ </span> </button> </div> + + diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html index c7adb2538bbf8bbd74c4ba6bd761de6ec9626e6b..9f4eadc7e9e2720e50b59ea8b31a442623a7ec12 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html @@ -1,3 +1,3 @@ -<div class="my-2 text-base font-bold text-primary-600"> +<div class="my-2 text-base font-bold text-primary-600" data-test-id="step-caption"> {{ label }} </div> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden-step/vorgang-detail-antrag-bescheiden-step.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden-step/vorgang-detail-antrag-bescheiden-step.component.html index 92f369dde579f23bb6c26f3cc966da991ff7d25d..830ccec726af1975c0dc8af339c00d16a21e0384 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden-step/vorgang-detail-antrag-bescheiden-step.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden-step/vorgang-detail-antrag-bescheiden-step.component.html @@ -4,12 +4,14 @@ label="bewilligt" [name]="formServiceClass.FIELD_BEWILLIGT" value="true" + data-test-id="button-bewilligt" ><mat-icon svgIcon="stamp" class="text-bewilligt"></mat-icon ></ozgdesign-radio-button-card> <ozgdesign-radio-button-card label="abgelehnt" [name]="formServiceClass.FIELD_BEWILLIGT" value="false" + data-test-id="button-abgelehnt" ><mat-icon class="text-abgelehnt">close</mat-icon></ozgdesign-radio-button-card > </div> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html index a80afc2e35c0dadf37b714f23377731443c4ed16..5236519cdf62c225b3e208ead69e6993f37a04af 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html @@ -1,6 +1,6 @@ <div *ngIf="shouldShowStep()" class="min-h-28 flex-1"> <alfa-vorgang-detail-bescheiden-step-title - [label]="title" + [label]="title" data-test-id="step-caption" ></alfa-vorgang-detail-bescheiden-step-title> <div *ngIf="shouldShowStepContent()"> <ng-content></ng-content> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html index 89bf93f75125bcf5c2b11e8c7c629e1c115b75f7..636f441f698ad3ea960e4e057619ba7a00915efb 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html @@ -1,3 +1,6 @@ -<button (click)="onClick()" class="mt-6 select-none text-left text-primary hover:underline"> - Bescheiderstellung überspringen<br />und abschließen +<button (click)="onClick()" + data-test-id="bescheid-ueberspringen" + class="mt-6 select-none text-left text-primary hover:underline"> + Bescheiderstellung überspringen<br />und abschließen + </button> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html index 139987fb5a4e780c246223705e18399108b6c264..cdfd6f635a7275bac3165a4c6d8c6c28b9493c37 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html @@ -1,4 +1,4 @@ -<div class="relative m-6 max-w-2xl rounded-lg bg-white p-6 shadow-xl"> +<div class="relative m-6 max-w-2xl rounded-lg bg-white p-6 shadow-xl" data-test-id="bescheid-ueberspringen-dialog"> <button class="absolute right-4 top-4 flex size-12 items-center justify-center rounded-full hover:bg-background-100" (click)="onClose()" @@ -19,7 +19,7 @@ <div class="flex gap-4"> <ozgcloud-stroked-button-with-spinner (click)="onConfirm()" - data-test-id="bescheiderstellung-ueberspringen-und-vorgang-abschliessen-dialog" + data-test-id="ueberspringen-abschliessen-button" text="Überspringen und abschließen" type="submit" icon="check" @@ -28,7 +28,7 @@ </ozgcloud-stroked-button-with-spinner> <ozgcloud-stroked-button-with-spinner (click)="onCancel()" - data-test-id="bescheiderstellung-ueberspringen-und-vorgang-abschliessen-dialog" + data-test-id="ueberspringen-abbrechen-button" text="Abbrechen" color="" icon="clear" diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html index a15fc997aa7ae112b668f05f34f6243cc054986a..c43491f38822333e5f9768050045211f8616d6d5 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html @@ -2,6 +2,7 @@ (click)="onWeiterClick()" type="button" class="mt-8 rounded-md bg-primary-600 px-8 py-2 text-sm text-white shadow-sm hover:bg-ozgblue-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ozgblue-800" + data-test-id="bescheid-weiter-button" > Weiter </button> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html index a6ce3a3f1f70d9aced72ee57eacf285b09ac2324..bdcb6aaf5f4cf3b50148d7ea07483de80896ca3b 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html @@ -3,13 +3,14 @@ aria-labelledby="Bescheid Dialog" role="dialog" aria-modal="true" + data-test-id="bescheid-wizard" > <div class="fixed inset-0 z-10 w-screen overflow-y-auto"> <div class="flex h-full items-end items-center justify-center p-8"> <div class="relative h-full w-full max-w-7xl transform overflow-hidden rounded-lg bg-background-200 px-6 py-10 text-left shadow-xl transition-all" > - <button (click)="onClose()" class="absolute right-3 top-3 text-text"> + <button (click)="onClose()" class="absolute right-3 top-3 text-text" data-test-id="close-bescheid"> <mat-icon>close</mat-icon> </button> <form [formGroup]="formService.form" class="flex h-full flex-row gap-11"> diff --git a/alfa-client/package.json b/alfa-client/package.json index fcc5b9638eb668f162512ac970621496023432aa..6c07b2b9f16c61036f4ebb7fe22b22894ca0d741 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -20,7 +20,6 @@ "ci-prodBuild-admin": "nx container admin && cp -r dist/ apps/admin/", "ci-test": "nx run-many --target=test --parallel 8 -- --runInBand", "ci-sonar": "nx run-many --target=test --parallel 8 -- --runInBand --codeCoverage --coverageReporters=lcov --testResultsProcessor=jest-sonar-reporter && npx sonar-scanner", - "ci-sonar-admin": "nx run admin:test --runInBand --codeCoverage --coverageReporters=lcov --testResultsProcessor=jest-sonar-reporter && npx sonar-scanner -Dsonar.projectBaseDir=./apps/admin", "lint": "nx workspace-lint && nx lint", "affected:apps": "nx affected:apps", "affected:libs": "nx affected:libs", diff --git a/alfa-client/pom.xml b/alfa-client/pom.xml index 3e0736e1eff901f603859f7f6a7b69e40fdd020d..de330edf9942d36d8f3ba01a10539ce907fa8095 100644 --- a/alfa-client/pom.xml +++ b/alfa-client/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.5.0-SNAPSHOT</version> + <version>2.6.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> diff --git a/alfa-server/pom.xml b/alfa-server/pom.xml index dedd615e42812369f504d31c950a724870fa2e59..a5838c737484cb9d93fdab6428fefcb2346a9888 100644 --- a/alfa-server/pom.xml +++ b/alfa-server/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.5.0-SNAPSHOT</version> + <version>2.6.0-SNAPSHOT</version> </parent> <artifactId>alfa-server</artifactId> diff --git a/alfa-service/pom.xml b/alfa-service/pom.xml index a80ce1ad1dc25d5da13094959cae6191fb4ed239..386ddc0ae1f3042ab7c919861e5a4f07f85bbdcc 100644 --- a/alfa-service/pom.xml +++ b/alfa-service/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.5.0-SNAPSHOT</version> + <version>2.6.0-SNAPSHOT</version> </parent> <artifactId>alfa-service</artifactId> diff --git a/alfa-xdomea/pom.xml b/alfa-xdomea/pom.xml index bb9c408a2f677ca439cb3bb90dddc3f89263d603..14f186fac07db886a1f45ad8891eb4bdbc47ad8a 100644 --- a/alfa-xdomea/pom.xml +++ b/alfa-xdomea/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.5.0-SNAPSHOT</version> + <version>2.6.0-SNAPSHOT</version> </parent> <artifactId>alfa-xdomea</artifactId> diff --git a/pom.xml b/pom.xml index 3c6690ecdc086c929bf7c031829dedd2801d9f98..13fc91d97b4dc0980ada34c40db9a5449e02303f 100644 --- a/pom.xml +++ b/pom.xml @@ -30,12 +30,12 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.0.1-SNAPSHOT</version> + <version>4.0.1</version> </parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.5.0-SNAPSHOT</version> + <version>2.6.0-SNAPSHOT</version> <name>Alfa Parent</name> <packaging>pom</packaging> @@ -50,7 +50,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> - <vorgang-manager.version>2.5.0-SNAPSHOT</vorgang-manager.version> + <vorgang-manager.version>2.5.0</vorgang-manager.version> <ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version> <user-manager.version>2.2.0</user-manager.version>