diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts index 5399b2b0e7a3b32a59e241125032d7c3e784419b..c5a5333dfb746e774089d38f7759a8f40e19e5c0 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts @@ -39,12 +39,15 @@ export class VorgangBescheidWizardE2EComponent { private readonly stepButton3: string = 'step-3-button'; private readonly closeButton: string = 'close-bescheid'; private readonly closeDialog: string = 'bescheid-close-dialog'; + private readonly bescheidResultBox: string = 'bescheiden-result'; private readonly bescheidVerwerfenButton: string = 'bescheiderstellung-abbrechen-entwurf-verwerfen'; private readonly bescheidSpeichernButton: string = 'bescheiderstellung-abbrechen-entwurf-speichern'; private readonly uploadBescheidFile: string = '-single-file-upload-button'; private readonly uploadAttachment: string = 'Attachment_hochladen-file-upload-button'; + private readonly saveBescheid: string = 'save-button'; + private readonly confirmAndSaveButton: string = 'confirm-and-save-button'; private readonly fileBescheidValid: string = 'Bescheid_validpdf-file-item'; private readonly fileAnhangValid: string = 'Anhang_validpdf-file-item'; @@ -141,11 +144,11 @@ export class VorgangBescheidWizardE2EComponent { } public getFileBescheidValid() { - return cy.getTestElement(this.fileBescheidValid); + return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileBescheidValid}]`); } public getFileAnhangValid() { - return cy.getTestElement(this.fileAnhangValid); + return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAnhangValid}]`); } public getDeleteButtonOfElement(element: string) { @@ -171,4 +174,16 @@ export class VorgangBescheidWizardE2EComponent { public getAttachmentUploadSpinner() { return cy.get(this.attachmentUploadSpinner); } + + public getSaveButton() { + return cy.getTestElement(this.saveBescheid); + } + + public getResultBox() { + return cy.getTestElement(this.bescheidResultBox); + } + + public getConfirmAndSaveButton() { + return cy.getTestElement(this.confirmAndSaveButton); + } } diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts index 932fc5fd0e692547533094f918843432cf895304..3d11a1a9baa58f0c1bcba190014d42679ac4682c 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts @@ -42,6 +42,7 @@ describe('Bescheid Wizard', () => { const documentError: string = 'Erlaubte Dateiendungen'; const sizeError: string = 'Anhänge größer'; + const missingBescheidError: string = 'Bitte fügen Sie'; before(() => { initVorgaenge([bescheidVorgang]); @@ -136,4 +137,11 @@ describe('Bescheid Wizard', () => { contains(bescheidWizard.getAttachmentDocument(), sizeError); }); }); + + describe('do not continue without attached Bescheid', () => { + it('should show error if no Bescheid is attached and step 3 is clicked', () => { + bescheidWizard.getWeiterButton().click(); + contains(bescheidWizard.getBescheidDocument(), missingBescheidError); + }); + }); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..f2ec81bd978db6546305b15d971815000b7fb811 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts @@ -0,0 +1,94 @@ +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import localeDeExtra from '@angular/common/locales/extra/de'; +import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component'; +import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; +import { + VorgangE2E, + VorgangStatusE2E, + vorgangStatusLabelE2E, +} from 'apps/alfa-e2e/src/model/vorgang'; +import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload'; +import { getAdjustedDateGerman } from 'apps/alfa-e2e/src/support/tech.util'; +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, enterWith, exist, haveText, notExist } from '../../../support/cypress.util'; +import { + TEST_FILE_BESCHEID_ANHANG_VALID, + TEST_FILE_BESCHEID_VALID, +} from '../../../support/data.util'; +import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; +import { buildVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util'; + +registerLocaleData(localeDe, 'de', localeDeExtra); + +describe('Bescheid Wizard', () => { + const mainPage: MainPage = new MainPage(); + const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); + + const abgelehntText: string = 'Abgelehnt am'; + const manuellText: string = 'Bescheid muss manuell'; + + const vorgangPage: VorgangPage = new VorgangPage(); + const bescheidWizard: VorgangBescheidWizardE2EComponent = vorgangPage.getBescheidWizard(); + + const bescheidVorgang: VorgangE2E = { + ...buildVorgang(objectIds[0], 'Wizard Vorgang'), + status: VorgangStatusE2E.IN_BEARBEITUNG, + }; + + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = + vorgangPage.getFormularButtons(); + + before(() => { + initVorgaenge([bescheidVorgang]); + initUsermanagerUsers(); + + loginAsSabine(); + + waitForSpinnerToDisappear(); + exist(vorgangList.getRoot()); + }); + + after(() => { + dropCollections(); + }); + + describe('Only save Bescheid', () => { + it('should update Bescheid info after click on Nur Speichern', () => { + vorgangList.getListItem(bescheidVorgang.name).getRoot().click(); + waitForSpinnerToDisappear(); + + vorgangFormularButtons.getBescheidenButton().click(); + bescheidWizard.getAbgelehntButton().click(); + enterWith(bescheidWizard.getDateInput(), getAdjustedDateGerman(-1)); + bescheidWizard.getWeiterButton().click(); + uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID); + notExist(bescheidWizard.getBescheidUploadSpinner()); + uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID); + notExist(bescheidWizard.getAttachmentUploadSpinner()); + bescheidWizard.getWeiterButton().click(); + bescheidWizard.getSaveButton().click(); + + contains(bescheidWizard.getStatusText(), abgelehntText + ' ' + getAdjustedDateGerman(-1)); + exist(bescheidWizard.getFileAnhangValid()); + exist(bescheidWizard.getFileBescheidValid()); + contains(bescheidWizard.getResultBox(), manuellText); + exist(bescheidWizard.getConfirmAndSaveButton()); + }); + + it('should update Vorgang status after saving', () => { + bescheidWizard.getConfirmAndSaveButton().click(); + notExist(bescheidWizard.getRoot()); + + waitForSpinnerToDisappear(); + haveText( + vorgangPage.getVorgangDetailHeader().getStatus(), + vorgangStatusLabelE2E[VorgangStatusE2E.BESCHIEDEN], + ); + }); + }); +}); 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 index 2176cc6513a43aab869e060775e3f0218ebb57ca..66bbf7006ffa9fadf26b4daf4bbef2a296cd00b3 100644 --- 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 @@ -13,7 +13,7 @@ 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 { dropCollections, wait } from '../../../support/cypress-helper'; import { contains, enterWith, exist, haveText, notExist } from '../../../support/cypress.util'; import { TEST_FILE_BESCHEID_VALID } from '../../../support/data.util'; import { getAdjustedDateEnglish, getAdjustedDateGerman } from '../../../support/tech.util'; @@ -131,7 +131,7 @@ describe('Bescheid Wizard', () => { bescheidWizard.getUeberspringenAbschliessen().click(); notExist(bescheidWizard.getRoot()); - cy.wait(1000); + wait(1000); haveText( vorgangPage.getVorgangDetailHeader().getStatus(), vorgangStatusLabelE2E[VorgangStatusE2E.ABGESCHLOSSEN], diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts index 21df29a9ff630ddbcfbce10277b1b078ac7c2bd2..9e3acf7d570c338c411dabff1d0ac698e56982ad 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-exportieren.cy.ts @@ -36,7 +36,6 @@ import { countDownloadFiles, deleteDownloadFolder, dropCollections, - wait, } from '../../../support/cypress-helper'; import { exist, notExist } from '../../../support/cypress.util'; import { loginAsSabine } from '../../../support/user-util'; @@ -89,16 +88,19 @@ describe('Vorgang exportieren', () => { it('should show "Herunterladen" button', () => { exist(menuItem.getButton()); + + vorgangMoreMenu.getButton().click({ force: true }); }); it('should have 1 file in download folder after download', () => { - deleteDownloadFolder(); - wait(1000); - menuItem.getButton().click(); - - waitForSpinnerToDisappear(); - countDownloadFiles().then((count) => { - expect(count).to.eq(1); + deleteDownloadFolder().then(() => { + vorgangMoreMenu.getButton().click(); + menuItem.getButton().click(); + waitForSpinnerToDisappear(); + + countDownloadFiles().then((count) => { + expect(count).to.eq(1); + }); }); }); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-verwerfen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-verwerfen.cy.ts index 8cd389a16c1377c4e7fa938b20773466f9f568da..08eb091172c0888911b99f3f0d82e77e5bb4c627 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-verwerfen.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-verwerfen.cy.ts @@ -60,15 +60,11 @@ describe('Vorgang Verwerfen', () => { const vorgangVerwerfenRevoke: VorgangE2E = { ...buildVorgang(objectIds[0], 'DoRevokeVerwerfen') }; before(() => { - console.log('initVorgaenge'); initVorgaenge([vorgangVerwerfen, vorgangVerwerfenRevoke]); - console.log('loginAsSabine'); loginAsSabine(); - console.log('waitforspinner'); waitForSpinnerToDisappear(); - console.log('exists vorganglist.root'); exist(vorgangList.getRoot()); }); 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 4525d7046bc7a7fd97852478e4aee4154dcef3f7..a2b56d8fccb2e5069dfcecdd72375aae9c9ba949 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts @@ -131,8 +131,8 @@ export function countDownloadFiles(): Cypress.Chainable<number> { return cy.task(CypressTasks.COUNT_FILES, DOWNLOAD_FOLDER); } -export function deleteDownloadFolder(): void { - cy.task(CypressTasks.DELETE_FOLDER, DOWNLOAD_FOLDER); +export function deleteDownloadFolder() { + return cy.task(CypressTasks.DELETE_FOLDER, DOWNLOAD_FOLDER); } export function scrollToWindowBottom(): 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 553cb733d4b8ef0c47cb64e79b6116011df16888..1e965a342e415f6825afaa78d27a684a8a125bfa 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress-tasks.ts @@ -1,6 +1,5 @@ -import { rmdir } from 'fs'; +import { readdir, remove } from 'fs-extra'; import { Db, Long, MongoClient, ObjectId } from 'mongodb'; -const fs = require('fs'); const Binary = require('mongodb').Binary; @@ -317,26 +316,20 @@ function dropCollections(databaseUrl, databaseName, collections) { }); } -function countFiles(folderName: string): Promise<number> { - return new Promise((resolve, reject) => { - fs.readdir(folderName, (err, files) => { - if (err) { - console.error(err); - return reject(err); - } - resolve(files.length); +function countFiles(folderName) { + return readdir(folderName) + .then((files) => files.length) + .catch((err) => { + throw new Error(`Counting files failed: ${err.message}`); }); - }); } function deleteFolder(folderName: string): void { - new Promise((resolve, reject) => { - rmdir(folderName, { maxRetries: 10, recursive: true }, (err) => { - if (err) { - console.error(err); - return reject(err); - } - resolve(null); + return remove(folderName) + .then(() => { + return null; + }) + .catch((err) => { + throw new Error(`Failed to delete folder: ${err.message}`); }); - }); } 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 dc83681b070c4e0ef4736781c98c313f3af6282e..158859aef477901045106b1b0e6d60fe2cdab6e2 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 @@ -81,7 +81,7 @@ <ods-button-with-spinner class="self-end" *ngIf="canSave$ | async" - data-test-id="save-and-send-button" + data-test-id="confirm-and-save-button" [stateResource]="saveAndSendInProgress$ | async" text="Antrag bescheiden und speichern" (clickEmitter)="saveAndSendManually(bescheidDraftStateResource.resource)" 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-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.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-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.html index 5eb688798894ad5a946c45b846c4bc92e80555a1..7be924cf6783364fe960a699a18ad474646adb36 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-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.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-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.html @@ -21,7 +21,7 @@ [name]="formServiceClass.FIELD_SEND_BY" variant="bescheid_save" [fullWidthText]="true" - data-test-id="save-and-send-button" + data-test-id="save-button" ><ods-save-icon></ods-save-icon ></ods-radio-button-card> </ng-container> diff --git a/src/main/helm/templates/keycloak_client_crd.yaml b/src/main/helm/templates/keycloak_client_crd.yaml index 5b0a6f895418a3ba333a2d6d0e83ec102b1ccd6d..e64622d0f5b3de937af5db02e420d8559c33dead 100644 --- a/src/main/helm/templates/keycloak_client_crd.yaml +++ b/src/main/helm/templates/keycloak_client_crd.yaml @@ -1,20 +1,11 @@ {{- if not (.Values.sso).disableOzgOperator -}} {{ range $client := (.Values.sso).keycloak_clients }} --- -{{- if $client.kopOperator }} -apiVersion: api.kop-stack.de/v1 -kind: KopKeycloakClient -{{- else }} apiVersion: operator.ozgcloud.de/v1 kind: OzgCloudKeycloakClient -{{- end }} metadata: name: {{ include "app.generateKeycloakClientRessourceName" $client.client_name }} namespace: {{ include "app.namespace" $ }} -{{- if $client.kopOperator }} - annotations: - "helm.sh/resource-policy": keep -{{- end }} spec: keep_after_delete: {{ $.Values.sso.keep_after_delete | default false }} client_name: {{ $client.client_name }} diff --git a/src/main/helm/templates/keycloak_user_crd.yaml b/src/main/helm/templates/keycloak_user_crd.yaml index 2901efba99a56a551ce2fa0276e15e14440917b2..0f5470b0bc15c04d09993fcfb6082278b08fca2c 100644 --- a/src/main/helm/templates/keycloak_user_crd.yaml +++ b/src/main/helm/templates/keycloak_user_crd.yaml @@ -1,20 +1,11 @@ {{- if not (.Values.sso).disableOzgOperator -}} {{ range $user := concat ((.Values.sso).api_users | default list) ((.Values.sso).keycloak_users | default list) }} --- -{{- if $user.kopOperator }} -apiVersion: api.kop-stack.de/v1 -kind: KopKeycloakUser -{{- else }} apiVersion: operator.ozgcloud.de/v1 kind: OzgCloudKeycloakUser -{{- end }} metadata: name: {{ include "app.generateKeycloakUserRessourceName" (deepCopy $user.name) }} namespace: {{ include "app.namespace" $ }} -{{- if $user.kopOperator }} - annotations: - "helm.sh/resource-policy": keep -{{- end }} spec: keep_after_delete: {{ $.Values.sso.keep_after_delete | default false }} update_user: {{ $user.update_user | default false }} diff --git a/src/test/helm/keycloak_client_crd_test.yaml b/src/test/helm/keycloak_client_crd_test.yaml index 17f2249b721a1eab8b7d279233ef8a5ed41d5d3a..f84ce1e3dbcf74623c939941d8115d099a7f4cbb 100644 --- a/src/test/helm/keycloak_client_crd_test.yaml +++ b/src/test/helm/keycloak_client_crd_test.yaml @@ -58,29 +58,6 @@ tests: - equal: path: metadata.namespace value: by-helm-test - - it: should contain header data for kopOperator - set: - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_clients: - - client_name: alfa - kopOperator: true - asserts: - - isAPIVersion: - of: api.kop-stack.de/v1 - - isKind: - of: KopKeycloakClient - - it: should have annotations for kopOperator - set: - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_clients: - - client_name: alfa - kopOperator: true - asserts: - - equal: - path: metadata.annotations["helm.sh/resource-policy"] - value: keep - it: should have default Values set: baseUrl: test.by.ozg-cloud.de diff --git a/src/test/helm/keycloak_user_crd_test.yaml b/src/test/helm/keycloak_user_crd_test.yaml index 97d1116c82fd20e8cc871cb6e26eb8042718ce76..2b8857fca6d3374234f1cd962b576eaedb12b1f8 100644 --- a/src/test/helm/keycloak_user_crd_test.yaml +++ b/src/test/helm/keycloak_user_crd_test.yaml @@ -533,28 +533,6 @@ tests: - isNull: path: spec.keycloak_user.client_roles - - it: should use kopOperator - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - sso: - keycloak_users: - - name: kop - kopOperator: true - asserts: - - isAPIVersion: - of: api.kop-stack.de/v1 - - isKind: - of: KopKeycloakUser - - equal: - path: spec.keycloak_user.username - value: kop - - equal: - path: metadata.annotations["helm.sh/resource-policy"] - value: keep - - it: should not create user cr if ozg operator is disabled set: sso: