diff --git a/Jenkinsfile.admin b/alfa-client/apps/admin/Jenkinsfile similarity index 81% rename from Jenkinsfile.admin rename to alfa-client/apps/admin/Jenkinsfile index 2cbdcf32b3715d48330732a6e116ac19626c1407..a181642a72d403e10c7a3d9146c54a487cc023f1 100644 --- a/Jenkinsfile.admin +++ b/alfa-client/apps/admin/Jenkinsfile @@ -50,14 +50,22 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - dir('alfa-client') { - VERSION = getPackagejsonVersion() - } + VERSION = getAdminPackageJsonVersion() + + if(isReleaseBranch()){ + if ( !isReleaseVersion([VERSION]) ) { + error("Keine Release Version für Branch ${env.BRANCH_NAME}.") + } + } else { + if ( !isSnapshotVersion([VERSION]) ) { + error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.") + } + } } } } - stage('build admin client and its docker image') { + stage('Build admin client and its docker image') { steps { script { FAILED_STAGE=env.STAGE_NAME @@ -71,7 +79,7 @@ pipeline { } else { sh 'pnpm run ci-build-admin' } - if (isMasterBranch()) { + if (isMainBranch()) { withSonarQubeEnv('sonarqube-ozg-sh'){ sh 'pnpm run ci-sonar' } @@ -88,11 +96,11 @@ pipeline { steps { script { FAILED_STAGE=env.STAGE_NAME - IMAGE_TAG = generateImageTag() + IMAGE_TAG = buildVersionName() tagAndPushDockerImage(IMAGE_TAG) - if (isMasterBranch()) { + if (isMainBranch()) { tagAndPushDockerImage('snapshot-latest') } else if (isReleaseBranch()) { @@ -106,7 +114,7 @@ pipeline { steps { script { FAILED_STAGE=env.STAGE_NAME - HELM_CHART_VERSION = generateHelmChartVersion() + HELM_CHART_VERSION = buildVersionName() dir('alfa-client/apps/admin') { sh "./run_helm_test.sh" @@ -124,7 +132,7 @@ pipeline { stage('Trigger Dev rollout') { when { - branch 'master' + branch 'main' } steps { script { @@ -158,7 +166,7 @@ pipeline { post { failure { script { - if (isMasterBranch() || isReleaseBranch()) { + if (isMainBranch() || isReleaseBranch()) { sendFailureMessage() } } @@ -171,14 +179,22 @@ Boolean isReleaseBranch() { return env.BRANCH_NAME == 'release-admin' } -String generateImageTag() { - def imageTag = "${env.BRANCH_NAME}-${VERSION}" - - if (isMasterBranch()) { - imageTag += "-${env.GIT_COMMIT.take(7)}" +def validateBranchName(branchName) { + int maxLength = 30 + if (branchName.length() > maxLength) { + String originalBranchName = branchName + branchName = branchName.substring(0, maxLength) + echo "WARNING: Branch name '${originalBranchName}' exceeded ${maxLength} characters. " + + "It has been truncated to '${branchName}' for deployment purposes." } + return branchName +} - return imageTag +String buildVersionName() { + if (isReleaseBranch()) { + return "${VERSION}" + } + return "${VERSION}-${validateBranchName(env.BRANCH_NAME)}-${env.GIT_COMMIT.take(7)}".replaceAll("_", "-") } Void cloneGitopsRepo() { @@ -251,8 +267,8 @@ Void tagAndPushDockerImage(String newTag){ sh "docker push docker.ozg-sh.de/admin-client:${newTag}" } } -String getPackagejsonVersion() { - def packageJSON = readJSON file: 'package.json' +String getAdminPackageJsonVersion() { + def packageJSON = readJSON file: 'alfa-client/apps/admin/package.json' def packageJSONVersion = packageJSON.version echo packageJSONVersion return packageJSONVersion @@ -272,21 +288,9 @@ Void deployHelmChart(String helmChartVersion) { } } } -String generateHelmChartVersion() { - def chartVersion = "${VERSION}" - - if (isMasterBranch()) { - chartVersion += "-${env.GIT_COMMIT.take(7)}" - } - else if (!isReleaseBranch()) { - chartVersion += "-${env.BRANCH_NAME}" - } - - return chartVersion.replaceAll("_", "-") -} -Boolean isMasterBranch() { - return env.BRANCH_NAME == 'master' +Boolean isMainBranch() { + return env.BRANCH_NAME == 'main' } Void sendFailureMessage() { @@ -296,7 +300,7 @@ Void sendFailureMessage() { "format": "org.matrix.custom.html", \ "formatted_body":"Admin-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>"}""" - if (isMasterBranch()) { + if (isMainBranch()) { room = "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de" } else if (isReleaseBranch()) { @@ -310,4 +314,23 @@ String getElementAccessToken() { withCredentials([string(credentialsId: 'element-login-json', variable: 'LOGIN_JSON')]) { return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token } +} + +Boolean isReleaseVersion(List versions) { + return matchRegexVersion(versions, RELEASE_REGEX) +} + +Boolean isSnapshotVersion(List versions) { + return matchRegexVersion(versions, SNAPSHOT_REGEX) +} + +Boolean matchRegexVersion(List versions, String regex) { + for (version in versions) { + println version + if ( !(version ==~ regex) ) { + return false + } + } + + return true } \ No newline at end of file diff --git a/alfa-client/apps/admin/package.json b/alfa-client/apps/admin/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1d97c4e33949de64758f337c111d4fa31721303a --- /dev/null +++ b/alfa-client/apps/admin/package.json @@ -0,0 +1,4 @@ +{ + "name": "admin", + "version": "1.4.0-SNAPSHOT" +} \ No newline at end of file diff --git a/alfa-client/apps/alfa-e2e/docker-compose.yml b/alfa-client/apps/alfa-e2e/docker-compose.yml index 8520757132d41b0af9b0452c8a8a192c230c95e9..f20faa66c523ca9272a2421f7dab7f7d08e9b68e 100644 --- a/alfa-client/apps/alfa-e2e/docker-compose.yml +++ b/alfa-client/apps/alfa-e2e/docker-compose.yml @@ -113,7 +113,7 @@ services: - OZGCLOUD_VORGANG_BESCHEID_0_FORM_ENGINE_NAME=FormSolutions - OZGCLOUD_VORGANG_BESCHEID_0_FORM_ID=KFAS_STAGE_KI_10_Haltverbot_LANDESHACKATHON - OZGCLOUD_FEATURE_COLLABORATION_ENABLED=true - - OZGCLOUD_BARRIEREFREIHEIT_URL=https://static.dev.by.ozg-cloud.de/barrierefreiheit + - OZGCLOUD_BARRIEREFREIHEIT_URL=https://static.dev.sh.ozg-cloud.de/barrierefreiheit ports: - 8080:8080 - 5000:5000 diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-list.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-list.e2e.component.ts index 10efef4c42cc6f09830481855be78f0ac068ab83..2888ff32d20a5f14a0448f1f33401d859dadac57 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-list.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-list.e2e.component.ts @@ -32,6 +32,7 @@ export class VorgangListE2EComponent { private readonly noRoleMessage: string = 'user-no-role-message'; private readonly emptyListText: string = 'empty-list-text'; private readonly emptyList: string = 'empty-list'; + private readonly archivedStatus: string = 'vorgang-list-item-archive-status'; public getRoot() { return cy.getTestElement(this.root); @@ -57,4 +58,8 @@ export class VorgangListE2EComponent { public getEmptySucheMessage() { return cy.getTestElement(this.emptyListText); } + + public getArchivedStatus(): Cypress.Chainable<JQuery<HTMLElement>> { + return cy.getTestElement(this.archivedStatus); + } } diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts index c32077d00937f2981d7f15a8f78ffe7d0cd717d5..fc9d58e57cd22a0057c706bca6f4e71010f3d0df 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components.ts @@ -25,10 +25,9 @@ export class VorgangMoreMenuE2EComponent { private readonly rootLocator: string = 'more-menu'; private readonly buttonLocator: string = 'more-menu-button'; - private readonly exportierenItem: VorgangMoreMenuExportierenItemE2EComponent = - new VorgangMoreMenuExportierenItemE2EComponent(); - private readonly vorpruefenItem: VorgangMoreMenuVorpruefenItemE2EComponent = - new VorgangMoreMenuVorpruefenItemE2EComponent(); + private readonly exportierenItem: VorgangMoreMenuExportierenItemE2EComponent = new VorgangMoreMenuExportierenItemE2EComponent(); + private readonly vorpruefenItem: VorgangMoreMenuVorpruefenItemE2EComponent = new VorgangMoreMenuVorpruefenItemE2EComponent(); + private readonly archivierenItem: VorgangMoreMenuArchivierenItemE2EComponent = new VorgangMoreMenuArchivierenItemE2EComponent(); public getRoot() { return cy.getTestElementWithOid(this.rootLocator); @@ -50,17 +49,21 @@ export class VorgangMoreMenuE2EComponent { public getVorpruefenItem(): VorgangMoreMenuVorpruefenItemE2EComponent { return this.vorpruefenItem; } + + public getArchivierenItem(): VorgangMoreMenuArchivierenItemE2EComponent { + return this.archivierenItem; + } } export class VorgangMoreMenuExportierenItemE2EComponent { private readonly root: string = 'vorgang-exportieren-button'; private readonly button: string = 'export-vorgang'; - public getRoot() { + public getRoot(): Cypress.Chainable<JQuery<HTMLElement>> { return cy.getTestElementWithOid(this.root); } - public getButton() { + public getButton(): Cypress.Chainable<JQuery<HTMLElement>> { return this.getRoot().getTestElementWithOid(this.button); } } @@ -69,11 +72,46 @@ export class VorgangMoreMenuVorpruefenItemE2EComponent { private readonly root: string = 'vorgang-process-vorgang-button'; private readonly button: string = 'process-vorgang'; - public getRoot() { + public getRoot(): Cypress.Chainable<JQuery<HTMLElement>> { return cy.getTestElementWithOid(this.root); } - public getButton() { + public getButton(): Cypress.Chainable<JQuery<HTMLElement>> { + return this.getRoot().getTestElementWithOid(this.button); + } +} + +export class VorgangMoreMenuArchivierenItemE2EComponent { + private readonly root: string = 'vorgang-archive-button'; + private readonly button: string = 'archive-vorgang'; + private readonly archivierenConfirm: string = 'archive-confirmation-button'; + private readonly archivierenCancel: string = 'archive-cancel-button'; + + public getRoot(): Cypress.Chainable<JQuery<HTMLElement>> { + return cy.getTestElementWithOid(this.root); + } + + public getButton(): Cypress.Chainable<JQuery<HTMLElement>> { return this.getRoot().getTestElementWithOid(this.button); } + + public clickArchivieren(): void { + this.getButton().click({ force: true }); + } + + public getArchivierenConfirm(): Cypress.Chainable<JQuery<HTMLElement>> { + return cy.getTestElement(this.archivierenConfirm); + } + + public getArchivierenCancel(): Cypress.Chainable<JQuery<HTMLElement>> { + return cy.getTestElement(this.archivierenCancel); + } + + public confirmArchivieren(): void { + this.getArchivierenConfirm().click(); + } + + public cancelArchivieren(): void { + this.getArchivierenCancel().click(); + } } diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts index 006a109efa1e7e47333e4708c1b9ff219ba2b9c1..785e9ad2b88261364b7cad17ecb402ad0d322910 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/accessibility/vorgang-list.cy.ts @@ -43,7 +43,7 @@ describe('VorgangList Page', () => { const navigation: NavigationE2EComponent = mainPage.getNavigation(); const accTooltip: string = 'Barrierefreiheit'; - const accLink: string = 'https://static.dev.by.ozg-cloud.de/barrierefreiheit'; + const accLink: string = 'https://static.dev.sh.ozg-cloud.de/barrierefreiheit'; before(() => { initUsermanagerUsers(); diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-archivieren.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-archivieren.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..abc019ef91238fa47685a5c00e8920d10581a000 --- /dev/null +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-archivieren.cy.ts @@ -0,0 +1,127 @@ +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import localeDeExtra from '@angular/common/locales/extra/de'; +import { SnackBarE2EComponent } from 'apps/alfa-e2e/src/components/ui/snackbar.e2e.component'; +import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; +import { + VorgangMoreMenuArchivierenItemE2EComponent, + VorgangMoreMenuE2EComponent, +} from 'apps/alfa-e2e/src/components/vorgang/vorgang-more-menu.e2e.components'; +import { VorgangSubnavigationE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-subnavigation'; +import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; +import { VorgangE2E, VorgangStatusE2E } from '../../../model/vorgang'; +import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; +import { VorgangPage } from '../../../page-objects/vorgang.po'; +import { dropCollections, wait } from '../../../support/cypress-helper'; +import { exist, notExist } from '../../../support/cypress.util'; +import { loginAsSabine } from '../../../support/user-util'; +import { createVorgang, initVorgaenge } from '../../../support/vorgang-util'; + +registerLocaleData(localeDe, 'de', localeDeExtra); + +describe('Vorgang archivieren', () => { + const mainPage: MainPage = new MainPage(); + const snackBar: SnackBarE2EComponent = mainPage.getSnackBar(); + + const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); + + const vorgangPage: VorgangPage = new VorgangPage(); + const subnavigation: VorgangSubnavigationE2EComponent = vorgangPage.getSubnavigation(); + const vorgangMoreMenu: VorgangMoreMenuE2EComponent = vorgangPage.getMoreMenu(); + + const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons(); + + const vorgangExportieren: VorgangE2E = { + ...createVorgang(), + status: VorgangStatusE2E.BESCHIEDEN, + name: 'DoArchivieren', + }; + + before(() => { + initVorgaenge([vorgangExportieren]); + + loginAsSabine(); + + waitForSpinnerToDisappear(); + exist(vorgangList.getRoot()); + }); + + after(() => { + dropCollections(); + }); + + describe('archive file', () => { + const archivierenItem: VorgangMoreMenuArchivierenItemE2EComponent = vorgangMoreMenu.getArchivierenItem(); + + it('should not show archived status on list page', () => { + notExist(vorgangList.getArchivedStatus()); + }); + + it('Open Vorgang-Detail-Page', () => { + vorgangList.getListItem(vorgangExportieren.name).getRoot().click(); + waitForSpinnerToDisappear(); + + exist(vorgangPage.getVorgangDetailHeader().getRoot()); + }); + + it('should not show "Archivieren" entry in Beschieden status', () => { + vorgangMoreMenu.getButton().click(); + + notExist(archivierenItem.getRoot()); + }); + + it('should show "Archivieren" button in Abgeschlossen status', () => { + vorgangMoreMenu.getButton().click({ force: true }); + vorgangFormularButtons.getAbschliessenButton().click(); + waitForSpinnerToDisappear(); + + snackBar.getCloseButton().click(); + vorgangMoreMenu.getButton().click(); + + exist(archivierenItem.getButton()); + }); + + it('should open popup with confirm button on clicking "Vorgang archivieren"', () => { + archivierenItem.clickArchivieren(); + + exist(archivierenItem.getArchivierenConfirm()); + }); + + it('should close popup on clicking Cancel, and still show more menu', () => { + archivierenItem.cancelArchivieren(); + + notExist(archivierenItem.getArchivierenConfirm()); + exist(vorgangMoreMenu.getRoot()); + }); + + it('should open popup again and archive Vorgang on confirmation', () => { + archivierenItem.clickArchivieren(); + archivierenItem.confirmArchivieren(); + + //ersetzen, sobald tatsächliche Archivierung geklärt ist; aktuell nur Workaround + wait(2000); + archivierenItem.cancelArchivieren(); + // + }); + + it('should show archived status on list page', () => { + subnavigation.getBackButton().click({ force: true }); + waitForSpinnerToDisappear(); + + exist(vorgangList.getArchivedStatus()); + }); + + it('should still show back button on details page', () => { + vorgangList.getListItem(vorgangExportieren.name).getRoot().click(); + waitForSpinnerToDisappear(); + + exist(subnavigation.getBackButton()); + }); + + it('should not show subnavigation buttons on details page', () => { + notExist(subnavigation.getCreateWiedervorlageIconButton()); + notExist(subnavigation.getAssignUserProfileIconButton()); + notExist(subnavigation.getPostfachMailIconButton()); + }); + }); +}); diff --git a/Jenkinsfile b/alfa-client/apps/alfa/Jenkinsfile similarity index 57% rename from Jenkinsfile rename to alfa-client/apps/alfa/Jenkinsfile index bb9909e096228fb7cbbdfb8564f3365ac6f8474b..6da9d2afddb290c6686c991032ce52c2031aae19 100644 --- a/Jenkinsfile +++ b/alfa-client/apps/alfa/Jenkinsfile @@ -29,7 +29,7 @@ pipeline { } environment { - BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/alfa/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" + BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/codeSH_alfa-client/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" RELEASE_REGEX = /\d+.\d+.\d+/ SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/ FAILED_STAGE = "" @@ -50,23 +50,17 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - VERSION = getRootPomVersion() - def serverVersion = getParentPomVersion('alfa-server/pom.xml') - def clientVersion = getParentPomVersion('alfa-client/pom.xml') + VERSION = getAlfaPackageJsonVersion() if(isReleaseBranch()){ - if ( !isReleaseVersion([VERSION, serverVersion, clientVersion]) ) { + if ( !isReleaseVersion([VERSION]) ) { error("Keine Release Version für Branch ${env.BRANCH_NAME}.") } } else { - if ( !isSnapshotVersion([VERSION, serverVersion, clientVersion]) ) { + if ( !isSnapshotVersion([VERSION]) ) { error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.") } } - - if( !isSameVersion([serverVersion, clientVersion], VERSION) ){ - error("Versionen sind nicht identisch") - } } } } @@ -86,7 +80,7 @@ pipeline { dir('alfa-client') { sh 'pnpm install --frozen-lockfile --network-concurrency=8' - if (isMasterBranch()) { + if (isMainBranch()) { withSonarQubeEnv('sonarqube-ozg-sh'){ sh 'pnpm run ci-sonar' } @@ -115,93 +109,23 @@ pipeline { script { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { dir('alfa-client') { - IMAGE_TAG = generateImageTag() + IMAGE_TAG = buildVersionName() withNPM(npmrcConfig: 'npm-nexus-auth') { sh 'pnpm run ci-build-alfa-client-container' } - withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { - sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' - - sh "docker tag docker.ozg-sh.de/alfa-client:build-latest docker.ozg-sh.de/alfa-client:${IMAGE_TAG}" - sh "docker push docker.ozg-sh.de/alfa-client:${IMAGE_TAG}" - } + tagAndPushDockerImage('build-latest', IMAGE_TAG) } } } } } - stage('Set Version') { - when { - not { - anyOf { - branch 'master' - branch 'release' - } - } - } - steps { - script { - FAILED_STAGE=env.STAGE_NAME - JAR_TAG = getRootPomVersion().replace("SNAPSHOT", "${env.BRANCH_NAME}-SNAPSHOT") - } - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh "mvn -s $MAVEN_SETTINGS versions:set -DnewVersion=${JAR_TAG} -DprocessAllModules=true" - - } - } - } - - stage('Build Server artefacts, build and push docker image') { - steps { - script { - FAILED_STAGE=env.STAGE_NAME - IMAGE_TAG = generateImageTag() - - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh 'mvn --version' - sh "mvn -s $MAVEN_SETTINGS -pl -alfa-client clean install" - sh "mvn --no-transfer-progress -s $MAVEN_SETTINGS -pl -alfa-client spring-boot:build-image -Dspring-boot.build-image.imageName=docker.ozg-sh.de/alfa:${IMAGE_TAG} -Dspring-boot.build-image.publish -Dmaven.wagon.http.retryHandler.count=3" - - if (isMasterBranch()) { - try { - dir('alfa-service'){ - withSonarQubeEnv('sonarqube-ozg-sh'){ - sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS sonar:sonar' - } - } - } - catch (Exception e) { - unstable("SonarQube failed") - } - } - } - } - } - post { - always{ - junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true - } - } - } - stage('Deploy Maven Artifacts to Nexus') { - steps { - script { - FAILED_STAGE = env.STAGE_NAME - } - - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -pl -alfa-client -DskipTests deploy' - sh "mvn -s $MAVEN_SETTINGS versions:revert" - } - } - } stage('Tag and Push Docker Image') { when { anyOf { - branch 'master' + branch 'main' branch 'release' } } @@ -210,29 +134,11 @@ pipeline { script { FAILED_STAGE = env.STAGE_NAME - if (isMasterBranch()) { - tagAndPushDockerImage('snapshot-latest') + if (isMainBranch()) { + tagAndPushDockerImage(IMAGE_TAG, 'snapshot-latest') } else if (isReleaseBranch()) { - tagAndPushDockerImage('latest') - } - } - } - } - - stage('Test, build and deploy Alfa Helm Chart') { - steps { - script { - FAILED_STAGE=env.STAGE_NAME - HELM_CHART_VERSION = generateHelmChartVersion() - - sh "./run_helm_test.sh" - - dir('src/main/helm') { - - sh "helm package --version=${HELM_CHART_VERSION} ." - - deployHelmChart(HELM_CHART_VERSION, "alfa") + tagAndPushDockerImage(IMAGE_TAG, 'latest') } } } @@ -241,9 +147,9 @@ pipeline { stage('Test, build and deploy Alfa-Client Helm Chart') { steps { script { + FAILED_STAGE=env.STAGE_NAME + HELM_CHART_VERSION = buildVersionName() dir('alfa-client') { - FAILED_STAGE=env.STAGE_NAME - HELM_CHART_VERSION = generateHelmChartVersion() sh "./run_helm_test.sh" @@ -260,7 +166,7 @@ pipeline { stage('Trigger Dev rollout') { when { - branch 'master' + branch 'main' } steps { script { @@ -274,7 +180,6 @@ pipeline { } } - stage('Trigger Test rollout') { when { branch 'release' @@ -291,25 +196,6 @@ pipeline { } } - stage ('Deploy SBOM to DependencyTrack') { - steps { - script { - IMAGE_TAG = generateImageTag() - - configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { - withCredentials([string(credentialsId: 'dependency-track-api-key', variable: 'API_KEY')]) { - - dir('alfa-server') { - catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { - sh "mvn --no-transfer-progress -s $MAVEN_SETTINGS io.github.pmckeown:dependency-track-maven-plugin:upload-bom -Ddependency-track.apiKey=$API_KEY -Ddependency-track.projectVersion=${IMAGE_TAG} -Ddependency-track.dependencyTrackBaseUrl=https://dependency-track.ozg-sh.de" - } - } - } - } - } - } - } - stage ('Trigger Barrierefreiheit Rollout') { when { branch 'barrierefreiheit-dev' @@ -332,7 +218,7 @@ pipeline { post { failure { script { - if (isMasterBranch() || isReleaseBranch()) { + if (isMainBranch() || isReleaseBranch()) { sendFailureMessage() } } @@ -355,41 +241,38 @@ Void deployHelmChart(String helmChartVersion, String app ) { } } -String generateHelmChartVersion() { - def chartVersion = "${VERSION}" - - if (isMasterBranch()) { - chartVersion += getCommitHash() +String validateBranchName(branchName) { + int maxLength = 30 + if (branchName.length() > maxLength) { + String originalBranchName = branchName + branchName = branchName.substring(0, maxLength) + echo "WARNING: Branch name '${originalBranchName}' exceeded ${maxLength} characters. " + + "It has been truncated to '${branchName}' for deployment purposes." } - else if (isBarrierefreiheitBranch()) { - chartVersion += "-barrierefreiheit${getCommitHash()}" + return branchName +} + +String buildVersionName() { + + if (isReleaseBranch()) { + return VERSION } - else if (!isReleaseBranch()) { - chartVersion += "-${env.BRANCH_NAME}" + if (isBarrierefreiheitBranch()) { + return "${VERSION}-barrierefreiheit${validateBranchName(env.BRANCH_NAME)}${getCommitHash()}".replaceAll("_", "-") } - return chartVersion.replaceAll("_", "-") + return "${VERSION}-${validateBranchName(env.BRANCH_NAME)}${getCommitHash()}".replaceAll("_", "-") } -Void tagAndPushDockerImage(String newTag){ +Void tagAndPushDockerImage(String currentTag, String newTag){ withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) { sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' - sh "docker tag docker.ozg-sh.de/alfa:${IMAGE_TAG} docker.ozg-sh.de/alfa:${newTag}" - sh "docker push docker.ozg-sh.de/alfa:${newTag}" + sh "docker tag docker.ozg-sh.de/alfa-client:${currentTag} docker.ozg-sh.de/alfa-client:${newTag}" + sh "docker push docker.ozg-sh.de/alfa-client:${newTag}" } } -String generateImageTag() { - def imageTag = "${env.BRANCH_NAME}-${VERSION}" - - if (isMasterBranch() || isBarrierefreiheitBranch()) { - imageTag += getCommitHash() - } - - return imageTag -} - Void cloneGitopsRepo() { withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git' @@ -424,11 +307,11 @@ Void configureGit() { Void sendFailureMessage() { def room = '' def data = """{"msgtype":"m.text", \ - "body":"Alfa: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}", \ + "body":"Alfa-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}", \ "format": "org.matrix.custom.html", \ - "formatted_body":"Alfa: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>"}""" + "formatted_body":"Alfa-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>"}""" - if (isMasterBranch()) { + if (isMainBranch()) { room = "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de" } else if (isReleaseBranch()) { @@ -454,10 +337,6 @@ Void setNewTestVersion() { } Void setNewGitopsVersion(String environment) { - def envFile = "${environment}/application/values/alfa-values.yaml" - def commitMessage = "jenkins rollout ${environment} alfa version ${IMAGE_TAG}"; - setNewAlfaGitopsVersion(envFile, commitMessage); - envFile = "${environment}/application/values/alfa-client-values.yaml" commitMessage = "jenkins rollout ${environment} alfa-client version ${IMAGE_TAG}"; setNewAlfaClientGitopsVersion(envFile, commitMessage); @@ -466,23 +345,7 @@ Void setNewGitopsVersion(String environment) { Void setNewBarrierefreiheitVersion() { def envFile = "dev/namespace/namespaces/by-barrierefreiheit-dev.yaml" def commitMessage = "jenkins rollout ${IMAGE_TAG} for Barrierefreiheit Dev" - setNewAlfaGitopsVersion(envFile, commitMessage); -} - -Void setNewAlfaGitopsVersion(String envFile, String commitMessage) { - dir("gitops") { - def envVersions = readYaml file: envFile - - envVersions.alfa.image.tag = IMAGE_TAG - envVersions.alfa.helm.version = HELM_CHART_VERSION - - writeYaml file: envFile, data: envVersions, overwrite: true - - if (hasValuesFileChanged(envFile)) { - sh "git add ${envFile}" - sh "git commit -m '${commitMessage}'" - } - } + setNewAlfaClientGitopsVersion(envFile, commitMessage); } Void setNewAlfaClientGitopsVersion(String envFile, String commitMessage) { @@ -513,8 +376,8 @@ Boolean isReleaseBranch() { return env.BRANCH_NAME == 'release' } -Boolean isMasterBranch() { - return env.BRANCH_NAME == 'master' +Boolean isMainBranch() { + return env.BRANCH_NAME == 'main' } Boolean isBarrierefreiheitBranch() { @@ -540,22 +403,9 @@ Boolean matchRegexVersion(List versions, String regex) { return true } -Boolean isSameVersion(List versions, String expectedVersion) { - for (version in versions) { - if ( version != expectedVersion ) { - return false - } - } - - return true -} - -String getRootPomVersion() { - def rootPom = readMavenPom file: 'pom.xml' - return rootPom.version -} - -String getParentPomVersion(String filePath) { - def pom = readMavenPom file: filePath - return pom.parent.version -} +String getAlfaPackageJsonVersion() { + def packageJSON = readJSON file: 'alfa-client/apps/alfa/package.json' + def packageJSONVersion = packageJSON.version + echo packageJSONVersion + return packageJSONVersion +} \ No newline at end of file diff --git a/alfa-client/apps/alfa/package.json b/alfa-client/apps/alfa/package.json new file mode 100644 index 0000000000000000000000000000000000000000..da96f20ebd26cc723f78fbd9ad975686bcaa999c --- /dev/null +++ b/alfa-client/apps/alfa/package.json @@ -0,0 +1,4 @@ +{ + "name": "alfa", + "version": "2.18.0-SNAPSHOT" +} \ No newline at end of file diff --git a/alfa-client/apps/info/Jenkinsfile b/alfa-client/apps/info/Jenkinsfile index 6bd520b84bd9b7d6d1a4526a45c42c5b05735593..497a200303b9cb7ebed748f59c2ccca3ca5645e1 100644 --- a/alfa-client/apps/info/Jenkinsfile +++ b/alfa-client/apps/info/Jenkinsfile @@ -5,7 +5,7 @@ pipeline { } } environment { - BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/info/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" + BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/codeSH_info-client/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" RELEASE_REGEX = /\d+.\d+.\d+/ SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/ FAILED_STAGE = "" @@ -25,7 +25,17 @@ pipeline { script { FAILED_STAGE = env.STAGE_NAME dir('alfa-client') { - VERSION = getPackagejsonVersion() + VERSION = getInfoPackageJsonVersion() + + if(isReleaseBranch()){ + if ( !isReleaseVersion([VERSION]) ) { + error("Keine Release Version für Branch ${env.BRANCH_NAME}.") + } + } else { + if ( !isSnapshotVersion([VERSION]) ) { + error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.") + } + } } } } @@ -234,11 +244,11 @@ Void loginToDockerRegistry(){ sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}' } } -String getPackagejsonVersion() { - def packageJSON = readJSON file: 'package.json' - def packageJSONVersion = packageJSON.version - echo packageJSONVersion - return packageJSONVersion +String getInfoPackageJsonVersion() { + def packageJSON = readJSON file: 'alfa-client/apps/info/package.json' + def packageJSONVersion = packageJSON.version + echo packageJSONVersion + return packageJSONVersion } Void deployHelmChart(String helmChartVersion) { @@ -293,4 +303,23 @@ String getElementAccessToken() { withCredentials([string(credentialsId: 'element-login-json', variable: 'LOGIN_JSON')]) { return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token } +} + +Boolean isReleaseVersion(List versions) { + return matchRegexVersion(versions, RELEASE_REGEX) +} + +Boolean isSnapshotVersion(List versions) { + return matchRegexVersion(versions, SNAPSHOT_REGEX) +} + +Boolean matchRegexVersion(List versions, String regex) { + for (version in versions) { + println version + if ( !(version ==~ regex) ) { + return false + } + } + + return true } \ No newline at end of file diff --git a/alfa-client/apps/info/package.json b/alfa-client/apps/info/package.json new file mode 100644 index 0000000000000000000000000000000000000000..65bd1b66465cc2d568814c69fb413466f5ce8c15 --- /dev/null +++ b/alfa-client/apps/info/package.json @@ -0,0 +1,4 @@ +{ + "name": "info", + "version": "1.4.0-SNAPSHOT" +} \ No newline at end of file diff --git a/alfa-client/apps/info/src/main/helm/templates/_helpers.tpl b/alfa-client/apps/info/src/main/helm/templates/_helpers.tpl index c18ade6ab9a8a331e10f4fdd1ea422bba776a564..003e0891e401969f4e35aa0e2a801ac6cc87c63b 100644 --- a/alfa-client/apps/info/src/main/helm/templates/_helpers.tpl +++ b/alfa-client/apps/info/src/main/helm/templates/_helpers.tpl @@ -72,4 +72,28 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- define "app.getImageName" -}} {{- required "image.name muss angegeben sein" .Values.image.name }} +{{- end -}} + +{{- define "app.getBarrierefreiheitUrl" -}} +{{- if .Values.keycloakTheme.barrierefreiheitUrl -}} +{{ .Values.keycloakTheme.barrierefreiheitUrl }} +{{- else -}} +{{ printf "https://%s/barrierefreiheit" .Values.baseDomain }} +{{- end -}} +{{- end -}} + +{{- define "app.getDatenschutzUrl" -}} +{{- if .Values.keycloakTheme.datenschutzUrl -}} +{{ .Values.keycloakTheme.datenschutzUrl }} +{{- else -}} +{{ printf "https://%s/datenschutz" .Values.baseDomain }} +{{- end -}} +{{- end -}} + +{{- define "app.getImpressumUrl" -}} +{{- if .Values.keycloakTheme.impressumUrl -}} +{{ .Values.keycloakTheme.impressumUrl }} +{{- else -}} +{{ printf "https://%s/impressum" .Values.baseDomain }} +{{- end -}} {{- end -}} \ No newline at end of file diff --git a/alfa-client/apps/info/src/main/helm/templates/configmap_keycloak_theme_url.yaml b/alfa-client/apps/info/src/main/helm/templates/configmap_keycloak_theme_url.yaml new file mode 100644 index 0000000000000000000000000000000000000000..df1952cbd765b876f81658c41c6679bff244d538 --- /dev/null +++ b/alfa-client/apps/info/src/main/helm/templates/configmap_keycloak_theme_url.yaml @@ -0,0 +1,11 @@ +{{- if not .Values.keycloakTheme.disableUrlConfigMap -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ required "keycloakTheme.urlConfigMapName muss angegeben sein" .Values.keycloakTheme.urlConfigMapName }} + namespace: {{ required "keycloakTheme.urlConfigMapNamespace muss angegeben sein" .Values.keycloakTheme.urlConfigMapNamespace }} +data: + staticUrlBarrierefreiheit: {{ include "app.getBarrierefreiheitUrl" . }} + staticUrlDatenschutz: {{ include "app.getDatenschutzUrl" . }} + staticUrlImpressum: {{ include "app.getImpressumUrl" . }} +{{- end -}} \ No newline at end of file diff --git a/alfa-client/apps/info/src/main/helm/values.yaml b/alfa-client/apps/info/src/main/helm/values.yaml index f62c7b061da7a5739e214890f76636992f8225c6..c98cb41cceafa3f48b7a28c26a57dd833da67ce8 100644 --- a/alfa-client/apps/info/src/main/helm/values.yaml +++ b/alfa-client/apps/info/src/main/helm/values.yaml @@ -19,4 +19,15 @@ disableMonitoring: serviceAccount: create: - name: info-client-service-account \ No newline at end of file + name: info-client-service-account + +keycloakTheme: + disableUrlConfigMap: false + urlConfigMapName: + urlConfigMapNamespace: + # default: https://<baseDomain>/barrierefreiheit + # barrierefreiheitUrl: + # default: https://<baseDomain>/datenschutz + # datenschutzUrl: + # default: https://<baseDomain>/impressum + # impressumUrl: \ No newline at end of file diff --git a/alfa-client/apps/info/src/test/helm-linter-values.yaml b/alfa-client/apps/info/src/test/helm-linter-values.yaml index a4b081509be5d987f15d48438fe1e0e101c627af..f10e9c6c0c9907799ce8cce72e40535a87b9fef3 100644 --- a/alfa-client/apps/info/src/test/helm-linter-values.yaml +++ b/alfa-client/apps/info/src/test/helm-linter-values.yaml @@ -1,4 +1,8 @@ image: name: info-client-test -baseDomain: static.dev.by.ozg-cloud.de \ No newline at end of file +baseDomain: static.dev.by.ozg-cloud.de + +keycloakTheme: + urlConfigMapName: keycloak-theme-test + urlConfigMapNamespace: keycloak-namespace \ No newline at end of file diff --git a/alfa-client/apps/info/src/test/helm/configmap_keycloak_theme_url_test.yaml b/alfa-client/apps/info/src/test/helm/configmap_keycloak_theme_url_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e3364a1e238ea77fe046c7aff2053f294a338dcd --- /dev/null +++ b/alfa-client/apps/info/src/test/helm/configmap_keycloak_theme_url_test.yaml @@ -0,0 +1,91 @@ +suite: test ConfigMap Keycloak Theme Url +release: + name: info-client + namespace: by-helm-test +templates: + - templates/configmap_keycloak_theme_url.yaml +set: + baseDomain: test.ozgcloud.de +tests: + - it: validate configMap values + set: + keycloakTheme: + urlConfigMapName: keycloak-theme-test + urlConfigMapNamespace: keycloak-namespace + asserts: + - isKind: + of: ConfigMap + - isAPIVersion: + of: v1 + - equal: + path: metadata.name + value: keycloak-theme-test + - equal: + path: metadata.namespace + value: keycloak-namespace + - it: disable configMap + set: + keycloakTheme: + disableUrlConfigMap: true + asserts: + - hasDocuments: + count: 0 + - it: should fail if keycloakTheme.urlConfigMapName is not set + set: + keycloakTheme: + urlConfigMapNamespace: keycloak-namespace + asserts: + - failedTemplate: + errorMessage: "keycloakTheme.urlConfigMapName muss angegeben sein" + - it: should fail if keycloakTheme.urlConfigMapNamespace is not set + set: + keycloakTheme: + urlConfigMapName: keycloak-theme-test + asserts: + - failedTemplate: + errorMessage: "keycloakTheme.urlConfigMapNamespace muss angegeben sein" + - it: validate default URLs + set: + keycloakTheme: + urlConfigMapName: keycloak-theme-test + urlConfigMapNamespace: keycloak-namespace + asserts: + - equal: + path: data.staticUrlBarrierefreiheit + value: https://test.ozgcloud.de/barrierefreiheit + - equal: + path: data.staticUrlDatenschutz + value: https://test.ozgcloud.de/datenschutz + - equal: + path: data.staticUrlImpressum + value: https://test.ozgcloud.de/impressum + - it: set barrierefreiheit url + set: + keycloakTheme: + urlConfigMapName: keycloak-theme-test + urlConfigMapNamespace: keycloak-namespace + barrierefreiheitUrl: "https://ozgcloud.de/barrierefreiheit" + asserts: + - equal: + path: data.staticUrlBarrierefreiheit + value: "https://ozgcloud.de/barrierefreiheit" + - it: set datenschutz url + set: + keycloakTheme: + urlConfigMapName: keycloak-theme-test + urlConfigMapNamespace: keycloak-namespace + datenschutzUrl: https://ozgcloud.de/datenschutz + asserts: + - equal: + path: data.staticUrlDatenschutz + value: https://ozgcloud.de/datenschutz + - it: set impressum url + set: + keycloakTheme: + urlConfigMapName: keycloak-theme-test + urlConfigMapNamespace: keycloak-namespace + impressumUrl: https://ozgcloud.de/impressum + asserts: + - equal: + path: data.staticUrlImpressum + value: https://ozgcloud.de/impressum \ No newline at end of file diff --git a/alfa-client/nx.json b/alfa-client/nx.json index d4a997871fa8e52b66b2003fbd860e6249437ecb..76ac8f7e72cddb4c6fe2f0e5e2a0df08073818c4 100644 --- a/alfa-client/nx.json +++ b/alfa-client/nx.json @@ -103,5 +103,13 @@ } }, "useInferencePlugins": false, - "defaultBase": "master" -} + "defaultBase": "master", + "release": { + "projects": [ + "admin", + "alfa", + "info" + ], + "projectsRelationship": "independent" + } +} \ No newline at end of file diff --git a/alfa-client/package.json b/alfa-client/package.json index 2b6783cb2f01950762bc76e0c5fa2851155596a1..56791618d048e514e34de89a49233389e0a988c4 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -1,6 +1,6 @@ { "name": "alfa", - "version": "1.4.0-SNAPSHOT", + "version": "0.0.0", "license": "MIT", "scripts": { "start": "nx run alfa:serve --port 4300 --disable-host-check", diff --git a/alfa-server/Dockerfile b/alfa-server/Dockerfile deleted file mode 100644 index 2109e8a7a05c40cbde08aca33d01409b8fc333a7..0000000000000000000000000000000000000000 --- a/alfa-server/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -FROM openjdk:16-alpine - -COPY /target/alfa-server.jar /opt/alfa.jar - -WORKDIR /opt -CMD ["java", "-jar", "alfa.jar"] \ No newline at end of file diff --git a/alfa-server/pom.xml b/alfa-server/pom.xml deleted file mode 100644 index 0bbc29ac4075e6f1ded3d89f9f4b3ff36d71bc13..0000000000000000000000000000000000000000 --- a/alfa-server/pom.xml +++ /dev/null @@ -1,155 +0,0 @@ -<?xml version="1.0"?> -<!-- - - Copyright (C) 2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa</artifactId> - <version>2.18.0-SNAPSHOT</version> - </parent> - - <artifactId>alfa-server</artifactId> - <name>Alfa Server</name> - <inceptionYear>2020</inceptionYear> - - <properties> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - - <spring-boot.build-image.imageName>docker.ozg-sh.de/alfa:build-latest</spring-boot.build-image.imageName> - </properties> - - <dependencies> - <dependency> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-config</artifactId> - </dependency> - <!-- aspectJ --> - <dependency> - <groupId>org.aspectj</groupId> - <artifactId>aspectjweaver</artifactId> - </dependency> - <dependency> - <groupId>org.aspectj</groupId> - <artifactId>aspectjrt</artifactId> - </dependency> - </dependencies> - - <build> - <finalName>${project.artifactId}</finalName> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <profiles> - <profile>local</profile> - <profile>remotekc</profile> - </profiles> - <docker> - <publishRegistry> - <username>${docker-username}</username> - <password>${docker-password}</password> - <url>${docker-url}</url> - </publishRegistry> - </docker> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>io.github.git-commit-id</groupId> - <artifactId>git-commit-id-maven-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-resources-plugin</artifactId> - <executions> - <execution> - <id>copy-client</id> - <phase>compile</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory> - ${project.build.directory}/classes/META-INF/resources - </outputDirectory> - <resources> - <resource> - <directory> - ../${project.parent.artifactId}-client/dist/apps/alfa/ - </directory> - </resource> - </resources> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <id>Jar Tests Package</id> - <phase>package</phase> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/alfa-server/run_local.sh b/alfa-server/run_local.sh deleted file mode 100755 index 6e875266272d77cc080c2887d19965a55d97aa64..0000000000000000000000000000000000000000 --- a/alfa-server/run_local.sh +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -mvn spring-boot:run -Dspring-boot.run.profiles=local,remotekc diff --git a/alfa-server/set-JAVA_HOME-template.sh b/alfa-server/set-JAVA_HOME-template.sh deleted file mode 100755 index 1928dadc88bc0220c7a4bded75b76f088c47ef0a..0000000000000000000000000000000000000000 --- a/alfa-server/set-JAVA_HOME-template.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2023 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. -# - - -# execute with: source set_JAVA_HOME.sh - -export JAVA_HOME=/opt/openjdk-11.0.2 diff --git a/alfa-server/set-JAVA_HOME-template.sh.example b/alfa-server/set-JAVA_HOME-template.sh.example deleted file mode 100755 index fc9ed2e724f8302eecaf5de3a81841a6bf60f5f4..0000000000000000000000000000000000000000 --- a/alfa-server/set-JAVA_HOME-template.sh.example +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -# execute with: source set_JAVA_HOME.sh - -export JAVA_HOME=/opt/openjdk-11.0.2 diff --git a/alfa-server/src/main/java/de/ozgcloud/alfa/AlfaServerApplication.java b/alfa-server/src/main/java/de/ozgcloud/alfa/AlfaServerApplication.java deleted file mode 100644 index a47711f6ba8039fdf0315c26d519056b883df55e..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/java/de/ozgcloud/alfa/AlfaServerApplication.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.TimeZone; - -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.security.concurrent.DelegatingSecurityContextRunnable; -import org.springframework.web.filter.ForwardedHeaderFilter; - -@SpringBootApplication -@EnableAsync -@EnableAspectJAutoProxy(proxyTargetClass = true) -@ComponentScan({ "de.ozgcloud.*" }) -public class AlfaServerApplication { - - public static void main(String[] args) { - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - SpringApplication.run(AlfaServerApplication.class, args); - } - - @Bean - FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() { - FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>(); - bean.setFilter(new ForwardedHeaderFilter()); - return bean; - } - - @Bean - ThreadPoolTaskExecutor threadPoolTaskExecutor() { - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - - executor.setThreadNamePrefix("async-"); - executor.setTaskDecorator(DelegatingSecurityContextRunnable::new); - return executor; - } - - @Bean - CallScope callScope() { - return new CallScope(); - } - - @Bean - BeanFactoryPostProcessor beanFactoryPostProcessor(CallScope callScope) { - return new CallBeanFactoryPostProcessor(callScope); - } -} \ No newline at end of file diff --git a/alfa-server/src/main/resources/application-dev.yml b/alfa-server/src/main/resources/application-dev.yml deleted file mode 100644 index ec9f40e322dac00e4bc6dd3f274cfb6d481610da..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-dev.yml +++ /dev/null @@ -1,16 +0,0 @@ -keycloak: - auth-server-url: https://sso.dev.by.ozg-cloud.de - realm: by-kiel-dev - resource: alfa - -server: - error: - include-stacktrace: always - -ozgcloud: - feature: - reply-always-allowed: true - collaboration-enabled: true - production: false - stage: - production: false diff --git a/alfa-server/src/main/resources/application-e2e.yml b/alfa-server/src/main/resources/application-e2e.yml deleted file mode 100644 index d56ddccb468a1ec933afa67796cc933a031851a8..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-e2e.yml +++ /dev/null @@ -1,17 +0,0 @@ -keycloak: - realm: by-e2e-local-dev - -ozgcloud: - feature: - reply-always-allowed: true - collaboration-enabled: true - forwarding: - lninfo: - url: classpath:files/LandesnetzInfo.html - user-assistance: - documentation: - url: /assets/benutzerleitfaden/benutzerleitfaden.pdf - user-manager: - url: http://localhost:9092 - dms: - enabled: true diff --git a/alfa-server/src/main/resources/application-ea.yml b/alfa-server/src/main/resources/application-ea.yml deleted file mode 100644 index eb8d789be456ec1c1a29b1cd0ecc263f5040a833..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-ea.yml +++ /dev/null @@ -1,28 +0,0 @@ -ozgcloud: - forwarding: - lninfo: - url: http://lninfo.ozg-tools.svc.cluster.local/ - ---- -spring: - config: - activate: - on-profile: - - dev - -ozgcloud: - forwarding: - lninfo: - url: classpath:files/mailertable.txt - ---- -spring: - config: - activate: - on-profile: - - test - -ozgcloud: - forwarding: - lninfo: - url: classpath:files/mailertable.txt \ No newline at end of file diff --git a/alfa-server/src/main/resources/application-local.yml b/alfa-server/src/main/resources/application-local.yml deleted file mode 100644 index 76f4ccb48052de1ee266058c1f7377dafdac11b0..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-local.yml +++ /dev/null @@ -1,41 +0,0 @@ -logging: - level: - '[de.ozgcloud]': INFO - config: classpath:log4j2-local.xml - -server: - error: - include-stacktrace: always - -grpc: - client: - user-manager: - negotiationType: PLAINTEXT - vorgang-manager: - negotiationType: PLAINTEXT - zufi-manager: - negotiationType: PLAINTEXT - collaboration-manager: - negotiationType: PLAINTEXT - archive-manager: - negotiationType: PLAINTEXT - -ozgcloud: - feature: - reply-always-allowed: true - collaboration-enabled: true - production: false - user-assistance: - documentation: - url: /assets/benutzerleitfaden/benutzerleitfaden.pdf - user-manager: - url: http://localhost:9092 - profile-template: /api/userProfiles/%s - search-template: /api/userProfiles/?searchBy={searchBy} - dms: - enabled: true - -keycloak: - auth-server-url: http://localhost:8088 - realm: by-kiel-dev - resource: by-kiel-dev-alfa \ No newline at end of file diff --git a/alfa-server/src/main/resources/application-nf.yaml b/alfa-server/src/main/resources/application-nf.yaml deleted file mode 100644 index 821736e4635590a7844b15993bf38772f1b1ff3e..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-nf.yaml +++ /dev/null @@ -1,8 +0,0 @@ -ozgcloud: - vorgang: - processorNames: - - ticketCheck - processor: - - formId: mob_dtickerst/mob_dtickerst - formEngineName: AFM - \ No newline at end of file diff --git a/alfa-server/src/main/resources/application-oc.yml b/alfa-server/src/main/resources/application-oc.yml deleted file mode 100644 index ed155e15aaf8a583d74cb6a4fde849536f34caa2..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-oc.yml +++ /dev/null @@ -1,36 +0,0 @@ -spring: - boot: - admin: - client: - instance: - prefer-ip: true - -grpc: - client: - vorgang-manager: - address: static://172.30.125.177:9090 - -logging: - config: classpath:log4j2.xml - ---- -spring: - config: - activate: - on-profile: - - test - -ozgcloud: - stage: - production: false - ---- -spring: - config: - activate: - on-profile: - - stage - -ozgcloud: - stage: - production: false \ No newline at end of file diff --git a/alfa-server/src/main/resources/application-remotekc.yml b/alfa-server/src/main/resources/application-remotekc.yml deleted file mode 100644 index 60e21682a25f6e8445fcc8d21dea502e5de6f890..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application-remotekc.yml +++ /dev/null @@ -1,4 +0,0 @@ -keycloak: - auth-server-url: https://sso.dev.by.ozg-cloud.de - realm: by-kiel-dev - resource: alfa \ No newline at end of file diff --git a/alfa-server/src/main/resources/application.yml b/alfa-server/src/main/resources/application.yml deleted file mode 100644 index 521222a6f86965335ce7a54b6387c1d76902649a..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/application.yml +++ /dev/null @@ -1,107 +0,0 @@ -logging: - level: - ROOT: WARN - '[de.ozgcloud]': INFO, - '[org.springframework.security]': WARN - -spring: - mvc: - pathmatch: - matching-strategy: ant-path-matcher - application: - name: Alfa - jackson: - deserialization: - 'ADJUST_DATES_TO_CONTEXT_TIME_ZONE': false - servlet: - multipart: - max-file-size: 2GB - max-request-size: 2GB - security: - oauth2: - resourceserver: - jwt: - issuer-uri: ${ozgcloud.oauth2.issuer-uri} - jwk-set-uri: ${spring.security.oauth2.resourceserver.jwt.issuer-uri}/protocol/openid-connect/certs - config: - import: optional:configserver:${ozgcloud_administration_address:http://localhost:8888}/configserver/ - -server: - http2: - enabled: true - error: - include-stacktrace: never - -management: - server: - port: 8081 - health: - livenessState: - enabled: true - readinessState: - enabled: true - endpoint: - health: - group: - exploratory: - include: livenessState,readinessState,ping - show-details: always - probes: - enabled: true - prometheus: - enabled: true - endpoints: - web: - exposure: - include: health,prometheus,refresh - -grpc: - client: - vorgang-manager: - address: static://127.0.0.1:9090 - negotiationType: TLS - user-manager: - address: static://127.0.0.1:9000 - negotiationType: TLS - zufi-manager: - address: static://127.0.0.1:9190 - negotiationType: TLS - collaboration-manager: - address: static://127.0.0.1:9090 - negotiationType: TLS - archive-manager: - address: static://127.0.0.1:9090 - negotiationType: TLS - -ozgcloud: - auth: - token: - secret: XPPWagXn3rDwKG6YwoirXPPWagXn3rDwKG6YwoirXPPWagXn3rDwKG6YwoirXPPWagXn3rDwKG6Ywoir - validity: 60000 - oauth2: - auth-server-url: ${keycloak.auth-server-url} - realm: ${keycloak.realm} - resource: ${keycloak.resource} - principle-attribute: preferred_username - issuer-uri: ${ozgcloud.oauth2.auth-server-url}/realms/${ozgcloud.oauth2.realm} - production: true - upload: - maxFileSize: - postfachNachrichtAttachment: 3MB - wiedervorlageAttachment: 40MB - bescheidFile: 3MB - bescheidAttachment: 3MB - content-types: - bescheidFile: - - application/pdf - - image/png - - image/jpeg - bescheidAttachment: - - application/pdf - - image/png - - image/jpeg - user-manager: - profile-template: /api/userProfiles/%s - search-template: /api/userProfiles/?searchBy={searchBy} - dms: - enabled: false diff --git a/alfa-server/src/main/resources/banner.txt b/alfa-server/src/main/resources/banner.txt deleted file mode 100644 index e95c531227e0ec959fd83f59e7031a9bb2b1b8d3..0000000000000000000000000000000000000000 --- a/alfa-server/src/main/resources/banner.txt +++ /dev/null @@ -1,7 +0,0 @@ - ______ __ ______ ______ -/\ __ \ /\ \ /\ ___\ /\ __ \ -\ \ __ \ \ \ \____ \ \ __\ \ \ __ \ - \ \_\ \_\ \ \_____\ \ \_\ \ \_\ \_\ - \/_/\/_/ \/_____/ \/_/ \/_/\/_/ -================================================= -${spring-boot.version} ${application.version} diff --git a/alfa-service/pom.xml b/alfa-service/pom.xml deleted file mode 100644 index 22eab80d592ab5d23b5911b71264931dfc103880..0000000000000000000000000000000000000000 --- a/alfa-service/pom.xml +++ /dev/null @@ -1,254 +0,0 @@ -<?xml version="1.0"?> -<!-- - - Copyright (C) 2023 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. - ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>de.ozgcloud.alfa</groupId> - <artifactId>alfa</artifactId> - <version>2.18.0-SNAPSHOT</version> - </parent> - - <artifactId>alfa-service</artifactId> - <name>Alfa Service</name> - <description>Alfa Service implementation</description> - <packaging>jar</packaging> - <inceptionYear>2020</inceptionYear> - - <properties> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - </properties> - - <dependencies> - <!-- Spring --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-log4j2</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-hateoas</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - <dependency> - <groupId>net.devh</groupId> - <artifactId>grpc-client-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-inprocess</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-security</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-config</artifactId> - </dependency> - <dependency> - <groupId>com.jayway.jsonpath</groupId> - <artifactId>json-path</artifactId> - </dependency> - - <!-- jwt --> - <dependency> - <groupId>com.auth0</groupId> - <artifactId>java-jwt</artifactId> - </dependency> - <dependency> - <groupId>io.jsonwebtoken</groupId> - <artifactId>jjwt-api</artifactId> - </dependency> - <dependency> - <groupId>io.jsonwebtoken</groupId> - <artifactId>jjwt-impl</artifactId> - </dependency> - <dependency> - <groupId>io.jsonwebtoken</groupId> - <artifactId>jjwt-jackson</artifactId> - <scope>runtime</scope> - </dependency> - - <!-- own projects --> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-interface</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.nachrichten</groupId> - <artifactId>nachrichten-manager-interface</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-utils</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.common</groupId> - <artifactId>ozgcloud-common-pdf</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.user</groupId> - <artifactId>user-manager-interface</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.zufi</groupId> - <artifactId>zufi-manager-interface</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.collaboration</groupId> - <artifactId>collaboration-manager-interface</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.archive</groupId> - <artifactId>archive-manager-interface</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.document</groupId> - <artifactId>document-manager-interface</artifactId> - </dependency> - - <!-- tools --> - <dependency> - <groupId>org.mapstruct</groupId> - <artifactId>mapstruct</artifactId> - </dependency> - - <!-- Dev --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - </dependency> - - <!-- commons --> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - </dependency> - - <!-- Test --> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-utils</artifactId> - <type>test-jar</type> - <scope>test</scope> - <version>${vorgang-manager.version}</version> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-configuration-processor</artifactId> - <optional>true</optional> - </dependency> - - <dependency> - <groupId>com.thedeanda</groupId> - <artifactId>lorem</artifactId> - </dependency> - - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>io.github.git-commit-id</groupId> - <artifactId>git-commit-id-maven-plugin</artifactId> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>3.3.0</version> - <executions> - <execution> - <id>Jar Tests Package</id> - <phase>package</phase> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/alfa-service/sonar-project.properties b/alfa-service/sonar-project.properties deleted file mode 100644 index be85f65c5343d76c0b0c05aea17aa40ffb5ff510..0000000000000000000000000000000000000000 --- a/alfa-service/sonar-project.properties +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -sonar.java.coveragePlugin=jacoco -sonar.jacoco.reportPath=target/jacoco.exec \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/AlfaProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/AlfaProperties.java deleted file mode 100644 index bd4ebfc6d34bd417027d842247d7c14b7ad7d248..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/AlfaProperties.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; - -@Configuration -public class AlfaProperties { - - @Getter - @Value("${spring.application.name}") - private String applicationName; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/CallBeanFactoryPostProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/CallBeanFactoryPostProcessor.java deleted file mode 100644 index ffb705dd1d4136a7d8e0696bccbfcddfe7ad6184..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/CallBeanFactoryPostProcessor.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public class CallBeanFactoryPostProcessor implements BeanFactoryPostProcessor { - - private final CallScope callScope; - - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - beanFactory.registerScope(CallScope.SCOPE_NAME, callScope); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/CallScope.java b/alfa-service/src/main/java/de/ozgcloud/alfa/CallScope.java deleted file mode 100644 index f182f4cc942040dd6d96d650cb80464b5357558d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/CallScope.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; - -import org.springframework.beans.factory.ObjectFactory; -import org.springframework.beans.factory.config.Scope; -import org.springframework.core.NamedInheritableThreadLocal; - -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class CallScope implements Scope { - - public static final String SCOPE_NAME = "call"; - - private static final ThreadLocal<Map<String, Object>> scopedObjectsHolder = new NamedInheritableThreadLocal<>("Call Context"); - private static final ThreadLocal<Map<String, Runnable>> destructionCallbacksHolder = new NamedInheritableThreadLocal<>( - "Call Context Desctruction Callbacks"); - - public void startScope() { - LOG.info("START Call-Scope"); - scopedObjectsHolder.set(new ConcurrentHashMap<>()); - destructionCallbacksHolder.set(new ConcurrentHashMap<>()); - } - - public void endScope() { - scopedObjectsHolder.remove(); - callAllDestructionCallbacks(); - destructionCallbacksHolder.remove(); - } - - private void callAllDestructionCallbacks() { - destructionCallbacksHolder.get().values().forEach(Runnable::run); - } - - @Override - public Object get(String name, ObjectFactory<?> objectFactory) { - // This is a workaround for a problematic CallScope implementation. This should only happen during e2e tests execution. - if (Objects.isNull(scopedObjectsHolder.get())) { - LOG.warn("ThreadLocal value for {} not found.", name); - return objectFactory.getObject(); - } - - if (!scopedObjectsHolder.get().containsKey(name)) { - scopedObjectsHolder.get().put(name, objectFactory.getObject()); - } - - return scopedObjectsHolder.get().get(name); - } - - @Override - public Object remove(String name) { - destructionCallbacksHolder.get().remove(name); - return scopedObjectsHolder.get().remove(name); - } - - @Override - public void registerDestructionCallback(String name, Runnable callback) { - destructionCallbacksHolder.get().put(name, callback); - - } - - @Override - public Object resolveContextualObject(String key) { - return scopedObjectsHolder.get().get(key); - } - - @Override - public String getConversationId() { - return Thread.currentThread().getName(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/Environment.java b/alfa-service/src/main/java/de/ozgcloud/alfa/Environment.java deleted file mode 100644 index e7186f9284fdb365d37dfbed78bb95b1588288f7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/Environment.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa; - -import java.util.List; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class Environment { - - private boolean production; - private String remoteHost; - private String authServer; - private String realm; - private String clientId; - private List<String> processorNames; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java deleted file mode 100644 index c640ef7b16b119848780e3c0db31e652a421551e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.vorgang.VorgangProcessorProperties; - -@RestController -@RequestMapping(EnvironmentController.BASE_PATH) -public class EnvironmentController { - - static final String BASE_PATH = "/api/environment"; // NOSONAR - - @Autowired - private OAuth2Properties oAuth2Properties; - - @Autowired - private ProductionProperties productionProperties; - - @Autowired - private VorgangProcessorProperties vorgangProcessorProperties; - - @GetMapping - public Environment getEnvironment() { - return Environment.builder() - .production(productionProperties.isProduction()) - .remoteHost(linkTo(RootController.class).toUri().toString()) - .authServer(oAuth2Properties.getAuthServerUrl()) - .clientId(oAuth2Properties.getResource()) - .realm(oAuth2Properties.getRealm()) - .processorNames(vorgangProcessorProperties.getProcessorNames()) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/GrpcConfiguration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/GrpcConfiguration.java deleted file mode 100644 index b7af79d02ee972884a9f89bbb3f8711b9df4635d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/GrpcConfiguration.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.context.annotation.Configuration; - -/** - * A workaround for @GrpcClient to work i.e. inject dependency until full Spring 3 support is available. - * https://github.com/yidongnan/grpc-spring-boot-starter/pull/775 - */ -@Configuration -@ImportAutoConfiguration({ - net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration.class, - net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration.class, - net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration.class, - net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration.class, - net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration.class, - - net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration.class, -}) -public class GrpcConfiguration { -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/JwtAuthConverter.java b/alfa-service/src/main/java/de/ozgcloud/alfa/JwtAuthConverter.java deleted file mode 100644 index d29f8073982a26245ee88539778e14021881859b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/JwtAuthConverter.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apache.commons.collections.MapUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.convert.converter.Converter; -import org.springframework.lang.NonNull; -import org.springframework.security.authentication.AbstractAuthenticationToken; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtClaimNames; -import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; -import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter; -import org.springframework.stereotype.Component; - -@Component -public class JwtAuthConverter implements Converter<Jwt, AbstractAuthenticationToken> { - - private final JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter(); - - private static final String SIMPLE_GRANT_AUTHORITY_PREFIX = "ROLE_"; - static final String RESOURCE_ACCESS_KEY = "resource_access"; - static final String ROLES_KEY = "roles"; - - @Autowired - private OAuth2Properties oAuth2Properties; - - @Override - public AbstractAuthenticationToken convert(@NonNull Jwt jwt) { - return new JwtAuthenticationToken(jwt, getAuthorities(jwt), getPrincipleClaimName(jwt)); - } - - String getPrincipleClaimName(Jwt jwt) { - return MapUtils.getString(jwt.getClaims(), getClaimName()); - } - - private String getClaimName() { - return Optional.ofNullable(oAuth2Properties.getPrincipleAttribute()).orElse(JwtClaimNames.SUB); - } - - Set<GrantedAuthority> getAuthorities(Jwt jwt) { - return Stream.concat(jwtGrantedAuthoritiesConverter.convert(jwt).stream(), extractResourceRoles(jwt).stream()).collect(Collectors.toSet()); - } - - Collection<SimpleGrantedAuthority> extractResourceRoles(Jwt jwt) { - var resourceAccess = getResourceAccess(jwt); - if (resourceAccess.isEmpty()) { - return Collections.emptySet(); - } - if (Objects.isNull(resourceAccess.get(oAuth2Properties.getResource()))) { - return Collections.emptySet(); - } - return extractRoles(getClaimMapFromMap(resourceAccess, oAuth2Properties.getResource())); - } - - private Map<String, Object> getResourceAccess(Jwt jwt) { - return jwt.getClaimAsMap(RESOURCE_ACCESS_KEY); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getClaimMapFromMap(Map<String, Object> claimMap, String claimName) { - return MapUtils.getMap(claimMap, claimName); - } - - Set<SimpleGrantedAuthority> extractRoles(Map<String, Object> resource) { - if (!resource.containsKey(ROLES_KEY)) { - return Collections.emptySet(); - } - return getRoles(resource).stream().map(role -> new SimpleGrantedAuthority(SIMPLE_GRANT_AUTHORITY_PREFIX + role)).collect(Collectors.toSet()); - } - - @SuppressWarnings("unchecked") - private Collection<String> getRoles(Map<String, Object> resource) { - return (Collection<String>) resource.get(ROLES_KEY); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/JwtTokenUtil.java b/alfa-service/src/main/java/de/ozgcloud/alfa/JwtTokenUtil.java deleted file mode 100644 index 2371bae407239f9377d1d1474c72598218d60b8d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/JwtTokenUtil.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.stereotype.Component; - -import com.auth0.jwt.JWT; -import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.exceptions.JWTVerificationException; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenProperties; -import de.ozgcloud.alfa.common.user.UserProfile; -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; - -@Component -public class JwtTokenUtil { - - public static final String TOKEN_TYP_KEY = "typ"; - public static final String TOKEN_TYPE = "JWT"; - public static final String TOKEN_ISSUER = "secure-api"; - public static final String TOKEN_AUDIENCE = "secure-app"; - public static final String ROLE_CLAIM = "roles"; - public static final String USERID_CLAIM = "userId"; - public static final String FIRSTNAME_CLAIM = "firstName"; - public static final String LASTNAME_CLAIM = "lastName"; - public static final String FILEID_CLAIM = "fileId"; - public static final String ORGANSIATIONSEINHEIT_IDS_CLAIM = "organisationseinheitIds"; - - @Autowired - private DownloadTokenProperties downloadTokenProperties; - - @SuppressWarnings("unchecked") - private List<Map<String, String>> getRoleClaims(String token) { - List<Map<String, String>> roleClaims = new ArrayList<>(); - - getAllClaimsFromToken(token).ifPresent(claims -> roleClaims.addAll((List<Map<String, String>>) claims.get(ROLE_CLAIM))); - - return roleClaims; - } - - public Optional<Claims> getAllClaimsFromToken(String token) { - return Optional.of(Jwts.parser().setSigningKey(downloadTokenProperties.getSecret().getBytes()).build().parseSignedClaims(token).getPayload()); - } - - public List<SimpleGrantedAuthority> getRolesFromToken(String token) { - List<Map<String, String>> claimsList = getRoleClaims(token); - return claimsList.stream() - .flatMap(rolesMap -> rolesMap.entrySet().stream()) - .map(roleEntry -> new SimpleGrantedAuthority(roleEntry.getValue())) - .toList(); - } - - @SuppressWarnings({ "unchecked" }) - public Collection<String> getOrganisationseinheitIdsFromToken(String token) { - List<String> organisationseinheitIds = new ArrayList<>(); - getAllClaimsFromToken(token) - .ifPresent(claims -> { - if (claims.get(ORGANSIATIONSEINHEIT_IDS_CLAIM) != null) { - organisationseinheitIds.addAll((Collection<String>) claims.get(ORGANSIATIONSEINHEIT_IDS_CLAIM)); - } - }); - return organisationseinheitIds; - } - - public String generateToken(FileId fileId, UserProfile user) { - var claims = new HashMap<String, Object>(); - claims.put(USERID_CLAIM, user.getId().toString()); - claims.put(FIRSTNAME_CLAIM, user.getFirstName()); - claims.put(LASTNAME_CLAIM, user.getLastName()); - claims.put(ROLE_CLAIM, user.getAuthorities()); - claims.put(FILEID_CLAIM, fileId.toString()); - claims.put(ORGANSIATIONSEINHEIT_IDS_CLAIM, user.getOrganisationseinheitIds()); - - return doGenerateToken(claims, user.getId().toString()); - } - - private String doGenerateToken(Map<String, Object> claims, String subject) { - return Jwts.builder() - .setClaims(claims) - .setSubject(subject) - .setHeaderParam(TOKEN_TYP_KEY, TOKEN_TYPE) - .setIssuer(TOKEN_ISSUER).setIssuedAt(new Date(System.currentTimeMillis())) - .setExpiration(new Date(System.currentTimeMillis() + downloadTokenProperties.getValidity())) - .setAudience(TOKEN_AUDIENCE) - .signWith(SignatureAlgorithm.HS512, downloadTokenProperties.getSecret().getBytes()) - .compact(); - } - - public void verifyToken(String token) throws JWTVerificationException { - var algorithm = Algorithm.HMAC512(downloadTokenProperties.getSecret()); - var verifier = JWT.require(algorithm).build(); - - verifier.verify(token); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/OAuth2Properties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/OAuth2Properties.java deleted file mode 100644 index 7d5b8131581ae3d1b331a95d5f05ffe28f05a463..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/OAuth2Properties.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Setter -@Getter -@Configuration -@ConfigurationProperties(prefix = OAuth2Properties.PREFIX) -public class OAuth2Properties { - - static final String PREFIX = "ozgcloud.oauth2"; - - /** - * OAuth2 auth server url - */ - private String authServerUrl; - - /** - * OAuth2 realm - */ - private String realm; - - /** - * OAuth2 resource - */ - private String resource; - - /** - * OAuth2 principle attribute - */ - private String principleAttribute; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/ProductionProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/ProductionProperties.java deleted file mode 100644 index 9cb77910d005b407263dab108b29b132282f04bf..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/ProductionProperties.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties("ozgcloud") -class ProductionProperties { - - /** - * Production mode. - */ - private boolean production = true; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RequestAttributes.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RequestAttributes.java deleted file mode 100644 index f39976971e44c8508e889e22263f35e0b8bad14e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RequestAttributes.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.UUID; - -import org.springframework.context.annotation.Scope; -import org.springframework.context.annotation.ScopedProxyMode; -import org.springframework.stereotype.Component; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Component -@Scope(scopeName = "call", proxyMode = ScopedProxyMode.TARGET_CLASS) -@Getter -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@NoArgsConstructor -public class RequestAttributes { - - @Builder.Default - private String requestId = UUID.randomUUID().toString(); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RequestIdFilter.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RequestIdFilter.java deleted file mode 100644 index 9e299ce0dfd991d45829fa35361ff2db6676ed5f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RequestIdFilter.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.io.IOException; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.logging.log4j.CloseableThreadContext; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import lombok.extern.log4j.Log4j2; - -@Component -@Log4j2 -class RequestIdFilter extends OncePerRequestFilter { - - private static final String REQUEST_ID_KEY = "requestId"; - - @Autowired - private RequestAttributes reqAttributes; - @Autowired - private CallScope callScope; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - - callScope.startScope(); - try (CloseableThreadContext.Instance ctc = CloseableThreadContext.put(REQUEST_ID_KEY, reqAttributes.getRequestId())) { - LOG.info("START of Request with ID '{}'.", reqAttributes.getRequestId()); - filterChain.doFilter(request, response); - } finally { - LOG.info("END of Request with ID '{}'", reqAttributes.getRequestId()); - callScope.endScope(); - } - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/Root.java b/alfa-service/src/main/java/de/ozgcloud/alfa/Root.java deleted file mode 100644 index 297a9b071ea87d278e7d1070d0d3485351d11180..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/Root.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.time.Instant; -import java.util.Objects; - -import org.springframework.boot.info.BuildProperties; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Builder -@AllArgsConstructor -public class Root { - - private BuildProperties buildProperties; - private boolean production; - @Getter - private String barrierefreiheitUrl; - - public String getVersion() { - return Objects.isNull(buildProperties) ? "--" : buildProperties.getVersion(); - } - - public Instant getBuildTime() { - return Objects.isNull(buildProperties) ? null : buildProperties.getTime(); - } - - public String getJavaVersion() { - return System.getProperty("java.version"); - } - - public boolean getProduction() { - return production; - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootController.java deleted file mode 100644 index a748d74394fca5db9c12005a0736d1df44ca0113..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootController.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.info.BuildProperties; -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping(RootController.PATH) -public class RootController { - - static final String PATH = "/api"; // NOSONAR - - @Autowired - private RootModelAssembler modelAssembler; - - @Autowired(required = false) - private BuildProperties buildProperties; - @Value("${ozgcloud.stage.production:#{true}}") - private boolean production = true; - @Autowired - private RootProperties rootProperties; - - @GetMapping - public EntityModel<Root> getRoot() { - return modelAssembler.toModel(buildRoot()); - } - - private Root buildRoot() { - return Root.builder() - .buildProperties(buildProperties) - .production(production) - .barrierefreiheitUrl(rootProperties.getBarrierefreiheitUrl()) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java deleted file mode 100644 index e62dd86b34e92a1292fe3ace76e4d9b2f3bcef20..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserRole; - -@Component -public class RootModelAssembler implements RepresentationModelAssembler<Root, EntityModel<Root>> { - - static final String REL_DOWNLOAD_TOKEN = "downloadToken"; - static final String REL_CURRENT_USER = "currentUser"; - static final String REL_DOCUMENTATIONS = "documentations"; - - @Autowired - private RootViewLinkHandler viewLinkHandler; - @Autowired - private CurrentUserService currentUserService; - @Autowired - private UserManagerUrlProvider userManagerUrlProvider; - - @Value("${ozgcloud.user-assistance.documentation.url:#{null}}") - private String documentationUrl; - - @Override - public EntityModel<Root> toModel(Root root) { - var modelBuilder = ModelBuilder.fromEntity(root) - .ifMatch(this::hasAnyRole).addLinks( - linkTo(RootController.class).withSelfRel(), - linkTo(DownloadTokenController.class).withRel(REL_DOWNLOAD_TOKEN)) - .ifMatch(userManagerUrlProvider::isConfiguredForUserProfile) - .addLinkIfPresent(this::buildCurrentUserLink) - .addLink(buildUserAssistanceDocumentationUrl()); - - if (hasAnyRole()) { - viewLinkHandler.addViewLinks(modelBuilder, currentUserService.findUserId()); - } - - return modelBuilder.buildModel(); - } - - boolean hasAnyRole() { - return hasVerwaltungRole() || currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); - } - - boolean hasVerwaltungRole() { - return currentUserService.hasRole(UserRole.VERWALTUNG_USER) || currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE); - } - - private Optional<Link> buildCurrentUserLink() { - return currentUserService.findUserId().map(userId -> Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), userId)) - .withRel(REL_CURRENT_USER)); - } - - private Optional<Link> buildUserAssistanceDocumentationUrl() { - return Optional.ofNullable(documentationUrl).filter(StringUtils::isNotBlank).map(href -> Link.of(href, REL_DOCUMENTATIONS)); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootProperties.java deleted file mode 100644 index f7ee39c56bf930751ee50c5dbce7244f6c00da03..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootProperties.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.ozgcloud.alfa; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Setter -@Getter -@Configuration -@ConfigurationProperties(prefix = "ozgcloud") -class RootProperties { - - /** - * URL pointing to the site with information about accessibility (Barrierefreiheit). - */ - private String barrierefreiheitUrl; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java deleted file mode 100644 index 80f77f5181edd904055c5b2c704d5d44bed5ffa2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.List; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.LinkBuilder; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.system.SystemStatusService; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.NonNull; - -@Component -class RootViewLinkHandler { - - static final String VORGAENGE_ALL_REL_TEMPLATE = "vorgaenge_%s_all"; - static final String VORGAENGE_MY_REL_TEMPLATE = "vorgaenge_%s_my"; - static final String VORGAENGE_UNASSIGNED_REL_TEMPLATE = "vorgaenge_%s_unassigned"; - - static final String ALL_VORGAENGE_REL = "vorgaenge_all"; - static final String MY_VORGEANGE_REL = "vorgaenge_my"; - static final String UNASSIGNED_VORGEANGE_REL = "vorgaenge_unassigned"; - - static final String ALL_WIEDERVORLAGEN_REL = "vorgaenge_wiedervorlagen_all"; - static final String MY_WIEDERVORLAGEN_REL = "vorgaenge_wiedervorlagen_my"; - static final String UNASSIGNED_WIEDERVORLAGEN_REL = "vorgaenge_wiedervorlagen_unassigned"; - - static final String SEARCH_ALL_REL = "search_all"; - static final String SEARCH_MY_VORGEANGE_REL = "search_my"; - static final String SEARCH_UNASSIGNED_VORGEANGE_REL = "search_unassigned"; - - static final String ALL_UNGELESENE_NACHRICHTEN_REL = "vorgaenge_ungelesene_nachrichten_all"; - static final String MY_UNGELESENE_NACHRICHTEN_REL = "vorgaenge_ungelesene_nachrichten_my"; - static final String UNASSIGNED_UNGELESENE_NACHRICHTEN_REL = "vorgaenge_ungelesene_nachrichten_unassigned"; - - static final int PAGE_SIZE = 100; - - @Autowired - private CurrentUserService currentUserService; - @Autowired - private SystemStatusService systemStatusService; - - private final List<VorgangStatus> statusList = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG, - VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN); - - public void addViewLinks(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) { - modelBuilder.addLink(buildGetAllVorgaengeLink()); - addSearchAllVorgaengeLink(modelBuilder); - - if (currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) { - addViewLinksForVerwaltungPoststelle(modelBuilder, userId); - } - if (currentUserService.hasRole(UserRole.VERWALTUNG_USER)) { - addViewLinksForVerwaltungUser(modelBuilder, userId); - } - } - - private Link buildGetAllVorgaengeLink() { - return linkTo(methodOn(VorgangController.class).getAll(0, PAGE_SIZE)).withRel(ALL_VORGAENGE_REL); - } - - void addSearchAllVorgaengeLink(ModelBuilder<Root> modelBuilder) { - if (systemStatusService.isSearchServerAvailable()) { - modelBuilder.addLink(buildGetAllVorgaengeBySearchByLink()); - } - } - - Link buildGetAllVorgaengeBySearchByLink() { - return linkTo(methodOn(VorgangController.class).getAllBySearchBy(0, PAGE_SIZE, null)).withRel(SEARCH_ALL_REL); - } - - void addViewLinksForVerwaltungPoststelle(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) { - userId.map(this::buildMyVorgaengeLink).ifPresent(modelBuilder::addLink); - - if (systemStatusService.isSearchServerAvailable()) { - userId.map(this::buildSearchMyVorgaengeLink).ifPresent(modelBuilder::addLink); - } - } - - void addViewLinksForVerwaltungUser(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) { - addAllVorgangStatusLinks(modelBuilder); - - modelBuilder.addLink(buildGetAllUnassignedVorgaengeLink()); - modelBuilder.addLinks(buildUnassignedVorgaengeStatusLinks()); - - userId.map(this::buildMyVorgaengeLink).ifPresent(modelBuilder::addLink); - userId.map(this::buildMyVorgaengeStatusLinks).ifPresent(modelBuilder::addLinks); - - if (systemStatusService.isSearchServerAvailable()) { - userId.map(this::buildSearchMyVorgaengeLink).ifPresent(modelBuilder::addLink); - modelBuilder.addLink(buildSearchUnassignedVorgaengeLink()); - } - - modelBuilder.addLink(buildGetAllByHasNextWiedervorlageFristLink().withRel(ALL_WIEDERVORLAGEN_REL)); - modelBuilder - .addLink(buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(UserId.empty(), UNASSIGNED_WIEDERVORLAGEN_REL)); - userId.map(id -> buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(id, MY_WIEDERVORLAGEN_REL)).ifPresent(modelBuilder::addLink); - - addGetByUngeleseneNachrichtenLinks(modelBuilder, userId); - } - - Link buildGetAllUnassignedVorgaengeLink() { - return buildGetAllVorgaengeByAssignedToLink(UserId.empty()).withRel(UNASSIGNED_VORGEANGE_REL); - } - - Link buildMyVorgaengeLink(@NonNull UserId userId) { - return buildGetAllVorgaengeByAssignedToLink(userId).withRel(MY_VORGEANGE_REL); - } - - LinkBuilder buildGetAllVorgaengeByAssignedToLink(UserId userId) { - return linkTo(methodOn(VorgangController.class).getAllByAssignedTo(0, PAGE_SIZE, userId)); - } - - Link buildSearchMyVorgaengeLink(@NonNull UserId userId) { - return buildGetAllVorgaengeByAssignedToAndSearchByLink(userId).withRel(SEARCH_MY_VORGEANGE_REL); - } - - Link buildSearchUnassignedVorgaengeLink() { - return buildGetAllVorgaengeByAssignedToAndSearchByLink(UserId.empty()).withRel(SEARCH_UNASSIGNED_VORGEANGE_REL); - } - - LinkBuilder buildGetAllVorgaengeByAssignedToAndSearchByLink(UserId userId) { - return linkTo(methodOn(VorgangController.class).getAllByAssignedToAndSearchBy(0, PAGE_SIZE, userId, null)); - } - - void addAllVorgangStatusLinks(ModelBuilder<Root> modelBuilder) { - addVorgangStatusLinks(modelBuilder, VORGAENGE_ALL_REL_TEMPLATE); - } - - void addVorgangStatusLinks(ModelBuilder<Root> modelBuilder, String linkRelTemplate) { - statusList.forEach(status -> modelBuilder.addLink(buildGetAllVorgaengeByStatus(status, linkRelTemplate))); - } - - Link buildGetAllVorgaengeByStatus(VorgangStatus status, String linkRelTemplate) { - var linkRel = formatLinkRelTemplate(linkRelTemplate, status); - return linkTo(methodOn(VorgangController.class).getAllByStatus(0, PAGE_SIZE, status)).withRel(linkRel); - } - - List<Link> buildMyVorgaengeStatusLinks(@NonNull UserId userId) { - return buildVorgangStatusLinks(VORGAENGE_MY_REL_TEMPLATE, userId); - } - - List<Link> buildUnassignedVorgaengeStatusLinks() { - return buildVorgangStatusLinks(VORGAENGE_UNASSIGNED_REL_TEMPLATE, UserId.empty()); - } - - List<Link> buildVorgangStatusLinks(String linkRelTemplate, UserId userId) { - return statusList.stream().map(status -> buildGetAllVorgaengeByAssignedToAndStatus(status, linkRelTemplate, userId)).toList(); - } - - Link buildGetAllVorgaengeByAssignedToAndStatus(VorgangStatus status, String linkRelTemplate, UserId userId) { - var linkRel = formatLinkRelTemplate(linkRelTemplate, status); - return linkTo(methodOn(VorgangController.class).getAllByAssignedToAndStatus(0, PAGE_SIZE, userId, status)).withRel(linkRel); - } - - String formatLinkRelTemplate(String linkRelTempalte, VorgangStatus status) { - return String.format(linkRelTempalte, status.toString().toLowerCase()); - } - - Link buildGetAllByHasNextWiedervorlageFristLink() { - return linkTo(methodOn(VorgangController.class).getAllByHasNextWiedervorlageFrist(0, PAGE_SIZE, - VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS)).withRel(ALL_WIEDERVORLAGEN_REL); - } - - Link buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(@NonNull UserId userId, String linkRel) { - return linkTo(methodOn(VorgangController.class).getAllByAssignedToAndHasNextWiedervorlageFrist(0, PAGE_SIZE, userId, - VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS)).withRel(linkRel); - } - - void addGetByUngeleseneNachrichtenLinks(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) { - modelBuilder.addLink(buildGelAllByUngeleseneNachrichtenLink()); - modelBuilder.addLink(buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), UNASSIGNED_UNGELESENE_NACHRICHTEN_REL)); - userId.map(id -> buildGetAllByAssignedToAndUngeleseneNachrichten(id, MY_UNGELESENE_NACHRICHTEN_REL)).ifPresent(modelBuilder::addLink); - } - - Link buildGelAllByUngeleseneNachrichtenLink() { - return linkTo(methodOn(VorgangController.class) - .getAllByUngeleseneNachrichten(0, PAGE_SIZE, VorgangController.PARAM_NACHRICHTEN_UNGELESENE)) - .withRel(ALL_UNGELESENE_NACHRICHTEN_REL); - } - - Link buildGetAllByAssignedToAndUngeleseneNachrichten(@NonNull UserId userId, String linkRel) { - return linkTo(methodOn(VorgangController.class) - .getAllByAssignedToAndUngeleseneNachrichten(0, PAGE_SIZE, userId, VorgangController.PARAM_NACHRICHTEN_UNGELESENE)) - .withRel(linkRel); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/SecurityConfiguration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/SecurityConfiguration.java deleted file mode 100644 index 6b087870a02467be4075bd09bfcb38dae0689c3e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/SecurityConfiguration.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpMethod; -import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configurers.oauth2.server.resource.OAuth2ResourceServerConfigurer; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.csrf.CookieCsrfTokenRepository; -import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter; -import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter.XFrameOptionsMode; - -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenAuthenticationFilter; - -@Configuration -@EnableWebSecurity -@EnableMethodSecurity(securedEnabled = true) -public class SecurityConfiguration { - - @Autowired - private JwtAuthConverter jwtAuthConverter; - - @Autowired - private SpringJwtProperties springJwtProperties; - - @Bean - SecurityFilterChain securityFilterChain(HttpSecurity http, DownloadTokenAuthenticationFilter downloadTokenFilter) throws Exception { - http.csrf(csrf -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())); - - http.sessionManagement(management -> management.sessionCreationPolicy(SessionCreationPolicy.STATELESS)); - - http.authorizeHttpRequests(authorize -> authorize - .requestMatchers(HttpMethod.GET, "/api/environment").permitAll() - .requestMatchers(HttpMethod.GET, "/assets/**").permitAll() - .requestMatchers(HttpMethod.GET, "/vorgang/**").permitAll() - .requestMatchers(HttpMethod.GET, "/meine/**").permitAll() - .requestMatchers(HttpMethod.GET, "/alle/**").permitAll() - .requestMatchers(HttpMethod.GET, "/unassigned/**").permitAll() - .requestMatchers("/api").authenticated() - .requestMatchers("/api/**").authenticated() - .requestMatchers("/actuator").permitAll() - .requestMatchers("/actuator/**").permitAll() - .requestMatchers("/").permitAll() - .requestMatchers("/*").permitAll() - .anyRequest().denyAll()); - - http.oauth2ResourceServer(this::setOAuth2ResourceServer); - http.headers(headers -> headers.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN))); - http.addFilterBefore(downloadTokenFilter, UsernamePasswordAuthenticationFilter.class); - - return http.build(); - } - - private void setOAuth2ResourceServer(OAuth2ResourceServerConfigurer<HttpSecurity> configurer) { - configurer.jwt().jwtAuthenticationConverter(jwtAuthConverter); - Optional.ofNullable(springJwtProperties.getJwkSetUri()).ifPresent(jwkSetUri -> configurer.jwt().jwkSetUri(jwkSetUri)); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/SpringJwtProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/SpringJwtProperties.java deleted file mode 100644 index 7a6ce226cce37666ed2718761f76e24259bb475f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/SpringJwtProperties.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Setter -@Getter -@Configuration -@ConfigurationProperties(prefix = SpringJwtProperties.PREFIX) -public class SpringJwtProperties { - - static final String PREFIX = "spring.security.oauth2.resourceserver.jwt"; - - /** - * Jwt jwk set uri - */ - private String jwkSetUri = null; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/WebConfig.java b/alfa-service/src/main/java/de/ozgcloud/alfa/WebConfig.java deleted file mode 100644 index 5fa7f8ea001aadaebe957770e4c35e11855509eb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/WebConfig.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.core.task.AsyncTaskExecutor; -import org.springframework.http.CacheControl; -import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.resource.PathResourceResolver; - -import lombok.NoArgsConstructor; - -@Configuration -public class WebConfig implements WebMvcConfigurer { - - private static final String RESOURCE_LOCATION = "classpath:/META-INF/resources/"; - - @Autowired - private AsyncTaskExecutor threadPoolTaskExecutor; - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/*.js", "/*.css", "/*.ttf", "/*.woff", "/*.woff2", "/*.eot", - "/**/*.svg", "/*.svf", "/*.otf", "/*.ico", "/**/*.png") - .addResourceLocations(RESOURCE_LOCATION) - .setCacheControl(CacheControl.maxAge(30, TimeUnit.DAYS).cachePublic()) - .resourceChain(true) - .addResolver(new PathResourceResolver()); - - registry.addResourceHandler("/**/*") - .addResourceLocations(RESOURCE_LOCATION) - .setCacheControl(CacheControl.noStore()) - .setUseLastModified(false) - .resourceChain(true) - .addResolver(new OzgCloudPathResourceResolver()); - } - - @Override - public void configureAsyncSupport(AsyncSupportConfigurer configurer) { - configurer.setTaskExecutor(threadPoolTaskExecutor); - } - - @NoArgsConstructor - static class OzgCloudPathResourceResolver extends PathResourceResolver { - - @Override - protected Resource getResource(String resourcePath, Resource location) throws IOException { - var requestedResource = location.createRelative(resourcePath); - - if (requestedResource.exists() && requestedResource.isReadable()) { - return requestedResource; - } - return super.getResource("index.html", location); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenCommandBody.java deleted file mode 100644 index a04bd1b384b9f49150f3aa4dd44df8eaa7b8dc68..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenCommandBody.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.aktenzeichen; - -import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; - -import de.ozgcloud.alfa.common.command.CommandBody; -import jakarta.validation.constraints.Size; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Getter -@Builder(toBuilder = true) -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@ToString -public class AktenzeichenCommandBody implements CommandBody { - - @Size(max = 256, message = FIELD_MAX_SIZE) - String aktenzeichen; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenModelProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenModelProcessor.java deleted file mode 100644 index aa7ce0231ef73c01e37dc2886be868cd38962b56..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenModelProcessor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.aktenzeichen; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.List; -import java.util.function.Predicate; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; - -@Component -public class AktenzeichenModelProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - - static final LinkRelation REL_SET_AKTENZEICHEN = LinkRelation.of("set_aktenzeichen"); - - static final List<Vorgang.VorgangStatus> SET_AKTENZEICHEN_STATUSES = List.of(Vorgang.VorgangStatus.ANGENOMMEN, Vorgang.VorgangStatus.IN_BEARBEITUNG); - - private static final Predicate<VorgangWithEingang> IS_SET_AKTENZEICHEN_ALLOWED = vorgang -> SET_AKTENZEICHEN_STATUSES.contains(vorgang.getStatus()); - - @Override - public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { - var vorgang = model.getContent(); - - if (vorgang == null) { - return model; - } - - return ModelBuilder.fromModel(model) - .ifMatch(IS_SET_AKTENZEICHEN_ALLOWED) - .addLink(linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), - null)).withRel(REL_SET_AKTENZEICHEN)) - .buildModel(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangController.java deleted file mode 100644 index 1967cc22962e7b5756116eff85dd19dd93649229..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangController.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.attachment; - -import java.io.OutputStream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.common.zipdownload.ZipDownloadService; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(AttachmentByVorgangController.PATH) -@RequiredArgsConstructor -public class AttachmentByVorgangController { - static final String PATH = "/api/vorgang/{vorgangId}/attachments"; // NOSONAR - static final String APPLICATION_ZIP_VALUE = "application/zip"; - - private final OzgFileService fileService; - private final ZipDownloadService zipDownloadService; - private final VorgangController vorgangController; - private final BinaryFileModelAssembler modelAssembler; - - @GetMapping - public CollectionModel<EntityModel<OzgFile>> getAllByVorgang(@PathVariable String vorgangId) { - return modelAssembler.toCollectionModel(fileService.getAttachments(vorgangId)); - } - - @GetMapping(produces = APPLICATION_ZIP_VALUE) - public ResponseEntity<StreamingResponseBody> download(@PathVariable String vorgangId) { - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", buildZipName(vorgangId))) - .contentType(MediaType.valueOf(APPLICATION_ZIP_VALUE)) - .body(out -> createZipFile(out, vorgangId)); - } - - String buildZipName(String vorgangId) { - return vorgangController.getVorgang(vorgangId).getNummer() + "_Anhaenge.zip"; - } - - void createZipFile(OutputStream out, String vorgangId) { - var ozgFiles = fileService.getAttachments(vorgangId); - zipDownloadService.write(ozgFiles.toList(), out); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentMapper.java deleted file mode 100644 index 404591b8dac7704dda92ff6910db5d5ba06f2003..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/attachment/AttachmentMapper.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.attachment; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -import de.ozgcloud.alfa.common.binaryfile.FileId; - -public class AttachmentMapper { - - public static List<FileId> mapAttachments(Object attachments) { - if (Objects.isNull(attachments)) { - return Collections.emptyList(); - } - - if (attachments instanceof Collection<?> attachmentList) { - return attachmentList.stream().map(String::valueOf).map(FileId::from).toList(); - } - return Collections.singletonList(FileId.from((String) attachments)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java deleted file mode 100644 index 715020a4ddd13ad8fd51cde090130912aabdd5b4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; - -import java.util.List; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Builder(toBuilder = true) -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@ToString -public class Bescheid implements CommandBody { - - static final String ID_FIELD = "id"; - static final String VERSION_FIELD = "version"; - static final String VORGANG_ID_FIELD = "vorgangId"; - static final String BESCHIEDEN_AM_FIELD = "beschiedenAm"; - static final String BEWILLIGT_FIELD = "bewilligt"; - static final String BESCHEID_DOCUMENT_FIELD = "bescheidDocument"; - static final String ATTACHMENTS_FIELD = "attachments"; - static final String NACHRICHT_TEXT_FIELD = "nachrichtText"; - static final String NARCHRICHT_SUBJECT_FIELD = "nachrichtSubject"; - static final String SEND_BY_FIELD = "sendBy"; - static final String STATUS_FIELD = "status"; - - @JsonIgnore - private String id; - @JsonIgnore - private long version; - @JsonIgnore - private String vorgangId; - - @NotNull(message = ValidationMessageCodes.FIELD_DATE_FORMAT_INVALID) - private String beschiedenAm; - private Boolean bewilligt; - - @LinkedResource(controllerClass = DocumentController.class) - private String bescheidDocument; - - @LinkedResource(controllerClass = BinaryFileController.class) - private List<FileId> attachments; - @NotEmpty(message = FIELD_IS_EMPTY, groups = BescheidNachrichtValidation.class) - private String nachrichtText; - @NotEmpty(message = FIELD_IS_EMPTY, groups = BescheidNachrichtValidation.class) - private String nachrichtSubject; - private SendBy sendBy; - private BescheidStatus status; - - private SentInfo sentInfo; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidByBeschiedenAmComparator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidByBeschiedenAmComparator.java deleted file mode 100644 index ed0f37621b133eccbcadc4b790dfce942ab6f7c7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidByBeschiedenAmComparator.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.Comparator; - -import org.springframework.stereotype.Component; - -@Component -class BescheidByBeschiedenAmComparator implements Comparator<Bescheid> { - - private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - - @Override - public int compare(Bescheid bescheid1, Bescheid bescheid2) { - var statusCompareResult = compareByStatus(bescheid1, bescheid2); - if (statusCompareResult != 0) { - return statusCompareResult; - } - - var dateCompareResult = compareByBeschiedenAm(bescheid1, bescheid2); - if (dateCompareResult != 0) { - return dateCompareResult; - } - - return compareBySentAt(bescheid1, bescheid2); - } - - int compareByStatus(Bescheid bescheid1, Bescheid bescheid2) { - if (BescheidStatus.DRAFT == bescheid1.getStatus()) { - return 1; - } - if (BescheidStatus.DRAFT == bescheid2.getStatus()) { - return -1; - } - return 0; - } - - int compareByBeschiedenAm(Bescheid bescheid1, Bescheid bescheid2) { - var date1 = LocalDate.parse(bescheid1.getBeschiedenAm(), dateTimeFormatter); - var date2 = LocalDate.parse(bescheid2.getBeschiedenAm(), dateTimeFormatter); - - return date1.compareTo(date2); - } - - int compareBySentAt(Bescheid bescheid1, Bescheid bescheid2) { - return bescheid1.getSentInfo().getSentAt() - .compareTo(bescheid2.getSentInfo().getSentAt()); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidCommandController.java deleted file mode 100644 index e617e270095035db40fe1e026366edafdf1f64db..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidCommandController.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.hateoas.EntityModel; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(BescheidCommandController.PATH) -@RequiredArgsConstructor -class BescheidCommandController { - - static final String PATH = "/api/vorgangs/{vorgangId}/bescheids/{bescheidId}/{bescheidVersion}/commands"; // NOSONAR - - private final BescheidService bescheidService; - private final CommandService commandService; - private final BescheidSendenCommandValidator bescheidSendenCommandValidator; - - @PostMapping - public ResponseEntity<EntityModel<Command>> createCommand(@PathVariable String vorgangId, @PathVariable String bescheidId, - @PathVariable long bescheidVersion, @RequestBody CreateCommand command) { - command = command.toBuilder().vorgangId(vorgangId).relationId(bescheidId).build(); - - validate(vorgangId, command); - - var created = commandService.createCommand(command, bescheidVersion); - return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build(); - } - - void validate(String vorgangId, CreateCommand command) { - var bescheid = bescheidService.getBescheidDraft(vorgangId) - .orElseThrow(() -> new TechnicalException("BescheidDraft not found")); - bescheidSendenCommandValidator.validate(command.toBuilder().body(bescheid).build()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java deleted file mode 100644 index b1a5f192ba800117d29f3c76047b127e499915d0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(BescheidController.PATH) -@RequiredArgsConstructor -public class BescheidController { - - static final String PATH = "/api/bescheids"; // NOSONAR - - private final BescheidModelAssembler assembler; - private final BescheidService bescheidService; - private final BinaryFileController binaryFileController; - - @GetMapping - public ResponseEntity<EntityModel<Bescheid>> getDraft(@RequestParam String vorgangId) { - return ResponseEntity.of(bescheidService.getBescheidDraft(vorgangId).map(assembler::toModel)); - } - - // TODO Sobald Grpc Schnittstelle zum Laden eines einzelnen Bescheids existiert, - // den Endpoint auf bescheidId beschraenken und ueber den Service -> - // den Bescheid laden - @GetMapping("/{bescheidId}/attachments") - public CollectionModel<EntityModel<OzgFile>> getAttachments(@PathVariable String bescheidId, @RequestParam String vorgangId) { - var bescheid = getBescheid(bescheidId, vorgangId); - return binaryFileController.getFiles(bescheid.getAttachments()); - } - - Bescheid getBescheid(String bescheidId, String vorgangId) { - var bescheid = bescheidService.findByVorgangId(vorgangId) - .filter(oneBescheid -> StringUtils.equals(oneBescheid.getId(), bescheidId)) - .findFirst(); - return bescheid.orElseThrow(() -> new TechnicalException(String.format("No Bescheid exists for id %s.", bescheidId))); - } - // - - @RestController - @RequestMapping(BescheidByVorgangController.BESCHEID_BY_VORGANG_PATH) - @RequiredArgsConstructor - public static class BescheidByVorgangController { - - static final String BESCHEID_BY_VORGANG_PATH = "/api/vorgangs"; // NOSONAR - - private final BescheidService service; - private final BescheidModelAssembler modelAssembler; - - @GetMapping("/{vorgangId}/bescheids") - public CollectionModel<EntityModel<Bescheid>> getAll(@PathVariable String vorgangId) { - var bescheids = service.findByVorgangIdSorted(vorgangId); - return modelAssembler.toCollectionModel(bescheids.toList()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidDocumentFromFileBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidDocumentFromFileBody.java deleted file mode 100644 index 840abcfe7ed5625bbc6ac7bbd681cf02e68fc793..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidDocumentFromFileBody.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.Getter; - -@Getter -public class BescheidDocumentFromFileBody implements CommandBody { - - @LinkedResource(controllerClass = DocumentController.class) - private String documentFile; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidHistorieProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidHistorieProcessor.java deleted file mode 100644 index 06f71be59ea10d9874401bf59c538229ca3d18f7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidHistorieProcessor.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.historie.HistorieProcessor; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class BescheidHistorieProcessor implements HistorieProcessor { - - static final String BESCHEID_ITEM_NAME = "Bescheid"; - - private final VorgangAttachedItemService vorgangAttachedItemService; - - private static final Predicate<Command> IS_NOT_CREATE_BESCHEID_COMMAND = Predicate - .not(command -> command.getCommandOrder() == CommandOrder.CREATE_BESCHEID); - private static final Predicate<Command> IS_NOT_DELETE_BESCHEID_COMMAND = Predicate - .not(command -> command.getCommandOrder() == CommandOrder.DELETE_BESCHEID); - private static final Predicate<Command> IS_UPDATE_BESCHEID_COMMAND = command -> command.getCommandOrder() == CommandOrder.UPDATE_BESCHEID; - - private static final Predicate<Command> IS_BESCHEID_ATTACHED_ITEM = command -> BESCHEID_ITEM_NAME - .equals(MapUtils.getString(command.getBody(), VorgangAttachedItem.FIELD_ITEM_NAME, StringUtils.EMPTY)); - private static final Predicate<Command> IS_NOT_CREATE_ATTACHED_ITEM = Predicate - .not(command -> command.getCommandOrder() == CommandOrder.CREATE_ATTACHED_ITEM - && IS_BESCHEID_ATTACHED_ITEM.test(command)); - private static final Predicate<Command> IS_NOT_UPDATE_ATTACHED_ITEM = Predicate - .not(command -> command.getCommandOrder() == CommandOrder.UPDATE_ATTACHED_ITEM - && IS_BESCHEID_ATTACHED_ITEM.test(command)); - private static final Predicate<Command> IS_NOT_PATCH_ATTACHED_ITEM = Predicate - .not(command -> command.getCommandOrder() == CommandOrder.PATCH_ATTACHED_ITEM - && IS_BESCHEID_ATTACHED_ITEM.test(command)); - - @Override - public List<Command> process(List<Command> commands) { - var relevantCommands = filterByOrder(commands); - return filterBescheidRelatedCommands(relevantCommands); - } - - List<Command> filterByOrder(List<Command> commands) { - return commands.stream() - .filter(IS_NOT_CREATE_BESCHEID_COMMAND) - .filter(IS_NOT_DELETE_BESCHEID_COMMAND) - .filter(IS_NOT_CREATE_ATTACHED_ITEM) - .filter(IS_NOT_UPDATE_ATTACHED_ITEM) - .filter(IS_NOT_PATCH_ATTACHED_ITEM) - .toList(); - } - - List<Command> filterBescheidRelatedCommands(List<Command> commands) { - var excludeCommandIds = getExcludedBescheidRelatedCommandIds(commands); - return commands.stream().filter(command -> !excludeCommandIds.contains(command.getId())).toList(); - } - - List<String> getExcludedBescheidRelatedCommandIds(List<Command> commands) { - var sendBescheidCommands = commands.stream().filter(this::isSendBescheidCommand).toList(); - var sendBescheidCommandsRelationIds = sendBescheidCommands.stream().map(Command::getRelationId).toList(); - var orphanedUpdateBescheidCommands = commands.stream().filter(IS_UPDATE_BESCHEID_COMMAND) - .filter(command -> !sendBescheidCommandsRelationIds.contains(command.getRelationId())).map(Command::getId); - return Stream.concat(sendBescheidCommands.stream() - .map(sendBescheidCommand -> getCommandIdsToFilter(sendBescheidCommand, commands)) - .flatMap(List::stream), orphanedUpdateBescheidCommands).toList(); - - } - - private boolean isSendBescheidCommand(Command command) { - return command.getCommandOrder() == CommandOrder.SEND_BESCHEID; - } - - List<String> getCommandIdsToFilter(Command sendBescheidCommand, List<Command> commands) { - var relatedUpdateBescheidCommands = getRelatedUpdateBescheidCommands(sendBescheidCommand, commands); - if (isManualSent(getVorgangAttachedItem(sendBescheidCommand.getRelationId()).getItem())) { - return Stream.concat(Stream.of(sendBescheidCommand.getId()), filterLatestByCreatedAt(relatedUpdateBescheidCommands)).toList(); - } else { - return filterLatestByCreatedAt(relatedUpdateBescheidCommands).toList(); - } - } - - List<Command> getRelatedUpdateBescheidCommands(Command command, List<Command> commands) { - return commands.stream() - .filter(filteredCommand -> StringUtils.equals(filteredCommand.getRelationId(), command.getRelationId())) - .filter(IS_UPDATE_BESCHEID_COMMAND) - .toList(); - } - - VorgangAttachedItem getVorgangAttachedItem(String id) { - return vorgangAttachedItemService.getById(id); - } - - boolean isManualSent(Map<String, ?> bescheid) { - return getSendBy(bescheid) == SendBy.MANUAL; - } - - private SendBy getSendBy(Map<String, ?> bescheid) { - return SendBy.valueOf(MapUtils.getString(bescheid, Bescheid.SEND_BY_FIELD)); - } - - Stream<String> filterLatestByCreatedAt(List<Command> relatedUpdateBescheidCommands) { - return relatedUpdateBescheidCommands.stream() - .sorted(Comparator.comparing(Command::getCreatedAt, Comparator.naturalOrder()).reversed()) - .skip(1) - .map(Command::getId); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java deleted file mode 100644 index a28cc6972ff033c9c265e041c716b01ed300f28d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.List; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; - -import com.google.protobuf.ProtocolStringList; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcSentInfo; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = { FileIdMapper.class, - UserIdMapper.class }) -interface BescheidMapper { - - @Mapping(target = "attachments", source = "grpcBescheid.attachmentsList") - Bescheid fromGrpc(GrpcBescheid grpcBescheid, String vorgangId); - - List<FileId> fromProtocolStringList(ProtocolStringList value); - - SentInfo fromGrpcSentInfo(GrpcSentInfo grpcSentInfo); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java deleted file mode 100644 index f320773cd9955240468b3273446d15b44f1e502b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static java.util.Optional.*; -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.vorgang.Eingang; -import de.ozgcloud.alfa.vorgang.EingangHeader; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHead; -import de.ozgcloud.alfa.vorgang.VorgangProperties; -import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -public class BescheidModelAssembler implements RepresentationModelAssembler<Bescheid, EntityModel<Bescheid>> { - - static final String REL_DELETE = "delete"; - static final String REL_UPLOAD_BESCHEID_FILE = "uploadBescheidFile"; - static final String REL_UPLOAD_ATTACHMENT = "uploadAttachment"; - static final String REL_ATTACHMENTS = "attachments"; - static final String REL_UPDATE = "update"; - static final String REL_CREATE_DOCUMENT = "createDocument"; - static final String REL_CREATE_DOCUMENT_FROM_FILE = "createDocumentFromFile"; - static final String REL_BESCHEID_DOCUMENT = "bescheidDocument"; - static final String REL_BESCHEIDEN_UND_SENDEN = "bescheidenUndSenden"; - static final String REL_BESCHEIDEN = "bescheiden"; - - private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> CollectionUtils.isNotEmpty(bescheid.getAttachments()); - - private final VorgangController vorgangController; - private final PostfachMailController postfachMailController; - - private final BescheidService bescheidService; - private final VorgangProperties vorgangProperties; - - @Override - public EntityModel<Bescheid> toModel(Bescheid bescheid) { - var selfLink = linkTo(methodOn(BescheidController.class).getDraft(bescheid.getVorgangId())); - var deleteLink = linkTo( - methodOn(CommandByRelationController.class).createCommand(bescheid.getVorgangId(), bescheid.getId(), bescheid.getVersion(), null)); - var uploadBescheidFileLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidFile", null)); - var uploadAttachmentLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidAttachment", null)); - var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getId(), bescheid.getVorgangId())); - var createCommandLink = buildCreateCommandLink(bescheid); - var vorgangWithEingang = vorgangController.getVorgang(bescheid.getVorgangId()); - var bescheidenUndSendenLink = linkTo( - methodOn(BescheidCommandController.class).createCommand(vorgangWithEingang.getId(), bescheid.getId(), bescheid.getVersion(), - null)); - - return ModelBuilder.fromEntity(bescheid) - .addLink(selfLink.withSelfRel()) - .addLink(deleteLink.withRel(REL_DELETE)) - .addLink(selfLink.withSelfRel()) - .addLink(uploadBescheidFileLink.withRel(REL_UPLOAD_BESCHEID_FILE)) - .addLink(uploadAttachmentLink.withRel(REL_UPLOAD_ATTACHMENT)) - .ifMatch(HAS_ATTACHMENTS) - .addLink(attachmentsLink.withRel(REL_ATTACHMENTS)) - .addLink(createCommandLink.withRel(REL_UPDATE)) - .ifMatch(() -> canCreateBescheidDocumentAutomatically(vorgangWithEingang)) - .addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT)) - .addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT_FROM_FILE)) - .ifMatch(() -> canSendMessageToAntragsteller(vorgangWithEingang)) - .addLink(bescheidenUndSendenLink.withRel(REL_BESCHEIDEN_UND_SENDEN)) - .addLink(createCommandLink.withRel(REL_BESCHEIDEN)) - .buildModel(); - } - - @Override - public CollectionModel<EntityModel<Bescheid>> toCollectionModel(Iterable<? extends Bescheid> entities) { - return RepresentationModelAssembler.super.toCollectionModel(entities) - .add(linkTo(BescheidByVorgangController.class).withSelfRel()); - } - - private WebMvcLinkBuilder buildCreateCommandLink(Bescheid bescheid) { - return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(bescheid.getVorgangId(), bescheid.getId(), - bescheid.getVersion(), null)); - } - - boolean canCreateBescheidDocumentAutomatically(VorgangWithEingang vorgang) { - return bescheidService.canCreateBescheidDocumentAutomatically() && hasVorgangCreateBescheidDocumentEnabled(vorgang); - } - - boolean hasVorgangCreateBescheidDocumentEnabled(VorgangWithEingang vorgang) { - return ofNullable(vorgang.getEingang()) - .map(Eingang::getHeader) - .map(this::isCreateBescheidDocumentEnabled) - .orElse(false); - } - - private boolean isCreateBescheidDocumentEnabled(EingangHeader eingangHeader) { - return vorgangProperties.getBescheid().stream().anyMatch(prop -> isFormIdAndFormEngineNameMatching(eingangHeader, prop)); - } - - private boolean isFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, VorgangProperty property) { - return property.getFormId().equals(eingangHeader.getFormId()) && property.getFormEngineName().equals(eingangHeader.getFormEngineName()); - } - - private boolean canSendMessageToAntragsteller(VorgangWithEingang vorgangWithEingang) { - return postfachMailController.isPostfachConfigured() && hasServiceKonto(vorgangWithEingang); - } - - private boolean hasServiceKonto(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getHeader()).map(VorgangHead::getServiceKonto).isPresent(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidNachrichtValidation.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidNachrichtValidation.java deleted file mode 100644 index 3f6f24c705e8af75d979ead08cec82ac964447a9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidNachrichtValidation.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -interface BescheidNachrichtValidation { -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java deleted file mode 100644 index f3c5443186be698d154bb7ed2f1097a2153b308a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.Optional; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest; -import de.ozgcloud.bescheid.GrpcGetAllBescheidRequest; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class BescheidRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private BescheidServiceBlockingStub bescheidServiceStub; - @Autowired - private BescheidMapper bescheidMapper; - - public Optional<Bescheid> getBescheidDraft(String vorgangId) { - var request = buildGetBescheidDraftRequest(vorgangId); - var response = bescheidServiceStub.getBescheidDraft(request); - return getBescheidFromResponse(response).map(bescheid -> bescheidMapper.fromGrpc(bescheid, vorgangId)); - } - - GrpcGetBescheidDraftRequest buildGetBescheidDraftRequest(String vorgangId) { - return GrpcGetBescheidDraftRequest.newBuilder() - .setVorgangId(vorgangId) - .build(); - } - - Optional<GrpcBescheid> getBescheidFromResponse(GrpcGetBescheidDraftResponse response) { - return response.hasBescheid() ? Optional.of(response.getBescheid()) : Optional.empty(); - } - - public Stream<Bescheid> findByVorgangId(String vorgangId) { - var request = buildGetAllBescheidRequest(vorgangId); - - var response = bescheidServiceStub.getAll(request); - - return response.getBescheidList().stream().map(grpcBescheid -> bescheidMapper.fromGrpc(grpcBescheid, vorgangId)); - } - - GrpcGetAllBescheidRequest buildGetAllBescheidRequest(String vorgangId) { - return GrpcGetAllBescheidRequest.newBuilder().setVorgangId(vorgangId).build(); - } - - // TODO Logik in den Service verschieben - public boolean canCreateBescheidDocument() { - var response = bescheidServiceStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); - return response.hasFeatures() && response.getFeatures().getCanCreateBescheidDocument(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidSendenCommandValidator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidSendenCommandValidator.java deleted file mode 100644 index 93ce35fcea2eec38bf031f209e38a5172f8fa3ce..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidSendenCommandValidator.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import jakarta.validation.Valid; - -import org.springframework.stereotype.Component; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.alfa.common.command.CreateCommand; - -@Validated(BescheidNachrichtValidation.class) -@Component -class BescheidSendenCommandValidator { - - public void validate(@Valid CreateCommand command) { - // noop - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java deleted file mode 100644 index d08895f986fe673b8de45be743078b4b4b99e19d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class BescheidService { - - private final BescheidRemoteService remoteService; - private final BescheidByBeschiedenAmComparator comparator; - - public Optional<Bescheid> getBescheidDraft(String vorgangId) { - return remoteService.getBescheidDraft(vorgangId); - } - - public Stream<Bescheid> findByVorgangId(String vorgangId) { - return remoteService.findByVorgangId(vorgangId); - } - - public Stream<Bescheid> findByVorgangIdSorted(String vorgangId) { - return sortBescheids(remoteService.findByVorgangId(vorgangId)); - } - - Stream<Bescheid> sortBescheids(Stream<Bescheid> bescheids) { - return bescheids.sorted(comparator.reversed()); - } - - public boolean canCreateBescheidDocumentAutomatically() { - return remoteService.canCreateBescheidDocument(); - } - - public boolean existsBescheid(String vorgangId) { - var bescheide = remoteService.findByVorgangId(vorgangId).toList(); - - return CollectionUtils.isNotEmpty(bescheide); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidStatus.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidStatus.java deleted file mode 100644 index 8babe9f0ec7e880a44145fc4a0c8e289b866bfea..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidStatus.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -enum BescheidStatus { - DRAFT, SENT -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java deleted file mode 100644 index d9cab224faea3d45e4bf2d63a2e25a6dc33853af..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; -import java.util.function.BooleanSupplier; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - - static final LinkRelation REL_DRAFT = LinkRelation.of("bescheidDraft"); - static final LinkRelation REL_CREATE_DRAFT = LinkRelation.of("createBescheidDraft"); - static final LinkRelation REL_BESCHEIDE = LinkRelation.of("bescheide"); - - private final BescheidService bescheidService; - private final CurrentUserService currentUserService; - - @Override - public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { - var vorgang = model.getContent(); - if (Objects.isNull(vorgang) || currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) { - return model; - } - return ModelBuilder.fromModel(model) - .ifMatch(isRetrievingDraftAllowed(vorgang)) - .addLink(getDraftLink(vorgang.getId()).withRel(REL_DRAFT)) - .ifMatch(isCreatingDraftAllowed(vorgang)) - .addLink(getCreateBescheidDraftLink(vorgang.getId(), vorgang.getVersion()).withRel(REL_CREATE_DRAFT)) - .ifMatch(() -> existsBescheid(vorgang.getId())) - .addLink(getBescheideLink(vorgang.getId()).withRel(REL_BESCHEIDE)) - .buildModel(); - } - - private WebMvcLinkBuilder getDraftLink(String vorgangId) { - return linkTo(methodOn(BescheidController.class).getDraft(vorgangId)); - } - - private WebMvcLinkBuilder getCreateBescheidDraftLink(String vorgangId, long vorgangVersion) { - return linkTo(methodOn(CommandByRelationController.class).createCommand(vorgangId, vorgangId, vorgangVersion, null)); - } - - boolean existsBescheid(String vorgangId) { - return bescheidService.existsBescheid(vorgangId); - } - - private WebMvcLinkBuilder getBescheideLink(String vorgangId) { - return linkTo(methodOn(BescheidByVorgangController.class).getAll(vorgangId)); - } - - BooleanSupplier isRetrievingDraftAllowed(Vorgang vorgang) { - return () -> isVorgangInBearbeitung(vorgang) && draftExists(vorgang); - } - - BooleanSupplier isCreatingDraftAllowed(Vorgang vorgang) { - return () -> isVorgangInBearbeitung(vorgang) && !draftExists(vorgang); - } - - boolean isVorgangInBearbeitung(Vorgang vorgang) { - return Vorgang.VorgangStatus.IN_BEARBEITUNG.equals(vorgang.getStatus()); - } - - boolean draftExists(Vorgang vorgang) { - return bescheidService.getBescheidDraft(vorgang.getId()).isPresent(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Document.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Document.java deleted file mode 100644 index c1154a21cfdeb2b583125a7c21a870972f0ef972..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Document.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Builder(toBuilder = true) -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@ToString -class Document { - - @JsonIgnore - private String id; - - private String type; - - @LinkedResource(controllerClass = BinaryFileController.class) - private FileId fileId; - - private String nachrichtSubject; - private String nachrichtText; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentController.java deleted file mode 100644 index fbe8ca3b8d1fef1622177cd84fc9c709d8686c95..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentController.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(DocumentController.PATH) -@RequiredArgsConstructor -public class DocumentController { - - static final String PATH = BescheidController.PATH + "/documents"; - - private final DocumentService documentService; - private final DocumentModelAssembler assembler; - - @GetMapping("/{documentId}") - public EntityModel<Document> getDocument(@PathVariable String documentId) { - return assembler.toModel(documentService.getDocument(documentId)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentHistorieProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentHistorieProcessor.java deleted file mode 100644 index 028aa66f2141bf2084692ef4ca20904a5edc709d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentHistorieProcessor.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.List; -import java.util.function.Predicate; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.historie.HistorieProcessor; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class DocumentHistorieProcessor implements HistorieProcessor { - - static final String DOCUMENT_ITEM_NAME = "Document"; - - private static final Predicate<Command> IS_NOT_DOCUMENT_COMMAND = command -> command.getCommandOrder() != CommandOrder.CREATE_BESCHEID_DOCUMENT - && command.getCommandOrder() != CommandOrder.CREATE_BESCHEID_DOCUMENT_FROM_FILE; - - private static final Predicate<Command> IS_DOCUMENT_ATTACHED_ITEM = command -> DOCUMENT_ITEM_NAME - .equals(MapUtils.getString(command.getBody(), VorgangAttachedItem.FIELD_ITEM_NAME, StringUtils.EMPTY)); - private static final Predicate<Command> IS_NOT_CREATE_ATTACHED_ITEM = command -> !(command.getCommandOrder() == CommandOrder.CREATE_ATTACHED_ITEM - && IS_DOCUMENT_ATTACHED_ITEM.test(command)); - - @Override - public List<Command> process(List<Command> commands) { - return filterIrrelevantCommands(commands); - } - - List<Command> filterIrrelevantCommands(List<Command> commands) { - return commands.stream().filter(IS_NOT_DOCUMENT_COMMAND).filter(IS_NOT_CREATE_ATTACHED_ITEM).toList(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentMapper.java deleted file mode 100644 index 98ab92b44bb87300a2752377b9c0550dd9d25ad2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import org.mapstruct.Mapper; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; -import de.ozgcloud.document.GrpcDocument; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = FileIdMapper.class) -interface DocumentMapper { - - Document fromGrpc(GrpcDocument grpcDocument); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentModelAssembler.java deleted file mode 100644 index cef3f165bce2d94123fdaef19b81ae670e38f30e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentModelAssembler.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class DocumentModelAssembler implements RepresentationModelAssembler<Document, EntityModel<Document>> { - - static final String REL_FILE = "file"; - - @Override - public EntityModel<Document> toModel(Document document) { - var selfLink = linkTo(methodOn(DocumentController.class).getDocument(document.getId())); - - return ModelBuilder.fromEntity(document) - .addLink(selfLink.withSelfRel()) - .buildModel(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentRemoteService.java deleted file mode 100644 index d75cfeec49121c6e4f4031d2c224af19aab522be..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentRemoteService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceBlockingStub; -import de.ozgcloud.document.GrpcGetDocumentRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class DocumentRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private DocumentServiceBlockingStub documentServiceStub; - @Autowired - private DocumentMapper documentMapper; - - public Document getDocument(String documentId) { - var response = documentServiceStub.getDocument(GrpcGetDocumentRequest.newBuilder().setId(documentId).build()); - return documentMapper.fromGrpc(response.getDocument()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentService.java deleted file mode 100644 index f08eb10b05cd0f8e1cecfb6b54cca3b074b1908d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/DocumentService.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -class DocumentService { - - private final DocumentRemoteService remoteService; - - public Document getDocument(String documentId) { - return remoteService.getDocument(documentId); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SendBy.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SendBy.java deleted file mode 100644 index 85ebab23e324409b33f8ade602ead3c3f79dad56..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SendBy.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -enum SendBy { - MANUAL, - NACHRICHT -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SentInfo.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SentInfo.java deleted file mode 100644 index 3de7762a30f13f955d8751e65c3bd6277607222b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SentInfo.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.user.UserId; -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class SentInfo { - - private ZonedDateTime sentAt; - private UserId sentBy; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java deleted file mode 100644 index 231090b96c06be539ba68fe68213163869d49202..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class Anschrift { - - private String strasse; - private String hausnummer; - private String plz; - private String ort; - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java deleted file mode 100644 index 417cff2b24573f78c9904739b4f9c8d1fe0a9049..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Collaboration.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -public interface Collaboration { - - String getId(); - - String getVorgangId(); - - String getCollaborationVorgangId(); - - String getTitel(); - - String getBeschreibung(); - - long getCollaborationLevel(); - - String getZustaendigeStelle(); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationCommandBody.java deleted file mode 100644 index 9f6eefeda3a136662c1d70ea65a37e91324b9732..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationCommandBody.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -import de.ozgcloud.alfa.common.LinkedResourceDeserializer; -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class CollaborationCommandBody implements CommandBody { - - private String titel; - private String beschreibung; - private long collaborationLevel; - - @JsonDeserialize(using = LinkedResourceDeserializer.class) - private String zustaendigeStelle; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationController.java deleted file mode 100644 index b4150cb36a6b7bbbe3432d7c0e168823c75f5cfa..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationController.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.Optional; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(CollaborationController.PATH) -@RequiredArgsConstructor -public class CollaborationController { - - private final CollaborationModelAssembler assembler; - private final CollaborationService service; - - static final String PATH = "/api/collaborations"; // NOSONAR - - @GetMapping("/{collaborationId}") - public ResponseEntity<EntityModel<Collaboration>> getById(@PathVariable String collaborationId) { - return ResponseEntity.of(Optional.of(service.getById(collaborationId)).map(assembler::toModel)); - } - - @RestController - @RequestMapping(CollaborationByVorgangController.PATH) - @RequiredArgsConstructor - public static class CollaborationByVorgangController { - - static final String PATH = "/api/vorgangs"; - - private final CollaborationModelAssembler assembler; - private final CollaborationService service; - - @GetMapping("/{vorgangId}/collaborations") - public CollectionModel<EntityModel<Collaboration>> getAllByVorgangId(@PathVariable String vorgangId) { - return assembler.toCollectionModel(service.getCollaborations(vorgangId), vorgangId); - } - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationMapper.java deleted file mode 100644 index 655d81551119e0b61f947001bf1e5593e7d6e4de..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationMapper.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -interface CollaborationMapper { - - default Collaboration fromCollaborationRequest(GrpcCollaborationRequest request) { - return isFachstelle(request) ? fromFachstelleRequest(request) : fromOrganisationsEinheitRequest(request); - } - - default boolean isFachstelle(GrpcCollaborationRequest request) { - return Long.valueOf(4).equals(request.getCollaborationLevel()); - } - - @Mapping(target = "vorgangId", ignore = true) - OrganisationsEinheitCollaboration fromOrganisationsEinheitRequest(GrpcCollaborationRequest request); - - @Mapping(target = "vorgangId", ignore = true) - FachstelleCollaboration fromFachstelleRequest(GrpcCollaborationRequest request); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java deleted file mode 100644 index cdcc60be022212764463013dd956efa906508806..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.common.CollectionModelBuilder; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class CollaborationModelAssembler implements RepresentationModelAssembler<Collaboration, EntityModel<Collaboration>> { - - static final LinkRelation REL_CREATE_COLLABORATION_REQUEST = LinkRelation.of("createCollaborationRequest"); - - private final VorgangController vorgangController; - - @Override - public EntityModel<Collaboration> toModel(Collaboration collaboration) { - var selfLink = linkTo(methodOn(CollaborationController.class).getById(collaboration.getId())).withSelfRel(); - - return ModelBuilder.fromEntity(collaboration) - .addLink(selfLink) - .buildModel(); - } - - public CollectionModel<EntityModel<Collaboration>> toCollectionModel(Stream<? extends Collaboration> entities, String vorgangId) { - var vorgang = vorgangController.getVorgang(vorgangId); - var entityModels = entities.map(this::toModel).toList(); - - var selfLink = linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgangId)).withSelfRel(); - - return CollectionModelBuilder.fromEntities(entityModels) - .addLink(selfLink) - .ifMatch(() -> entityModels.isEmpty() && vorgangController.isEditable(vorgang)) - .addLink(() -> buildCreateCollaborationRequestLink(vorgang)) - .buildModel(); - } - - Link buildCreateCollaborationRequestLink(VorgangWithEingang vorgang) { - return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), - vorgang.getVersion(), null)).withRel(REL_CREATE_COLLABORATION_REQUEST); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java deleted file mode 100644 index df0b35e64199dd6105e76b919668deaeeff9f8e4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteService.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.collaboration.request.CollaborationRequestServiceGrpc.CollaborationRequestServiceBlockingStub; -import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; -import de.ozgcloud.collaboration.request.GrpcGetRequestRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class CollaborationRemoteService { - - @GrpcClient(GrpcUtil.COLLABORATION_MANAGER_GRPC_CLIENT) - private CollaborationRequestServiceBlockingStub serviceStub; - - @Autowired - private CollaborationMapper mapper; - - public Collaboration getById(String collaborationId) { - return mapper.fromCollaborationRequest(serviceStub.getRequest(buildGetRequest(collaborationId)).getRequest()); - } - - public Stream<Collaboration> getCollaborations(String vorgangId) { - return serviceStub.findRequests(buildSearchRequest(vorgangId)) - .getRequestsList().stream() - .map(mapper::fromCollaborationRequest); - } - - GrpcGetRequestRequest buildGetRequest(String collaborationId) { - return GrpcGetRequestRequest.newBuilder().setId(collaborationId).build(); - } - - GrpcFindRequestsRequest buildSearchRequest(String vorgangId) { - return GrpcFindRequestsRequest.newBuilder().setVorgangId(vorgangId).build(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationService.java deleted file mode 100644 index 45301ae9ab855929ef42aed95daf28c2db9d978b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationService.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -class CollaborationService { - - private final CollaborationRemoteService remoteService; - - public Collaboration getById(String collaborationId) { - return remoteService.getById(collaborationId); - } - - public Stream<Collaboration> getCollaborations(String vorgangId) { - return remoteService.getCollaborations(vorgangId); - } - - public boolean hasCollaboration(String vorgangId) { - return remoteService.getCollaborations(vorgangId).findAny().isPresent(); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java deleted file mode 100644 index b1c4dd3da3b2f4846590bd6afb9f94ae0d9e3220..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -@ConditionalOnProperty("ozgcloud.feature.collaboration-enabled") -class CollaborationVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - - static final LinkRelation REL_COLLABORATIONS = LinkRelation.of("collaborations"); - static final LinkRelation REL_SEARCH_ORGANISATIONS_EINHEIT = LinkRelation.of("searchOrganisationsEinheit"); - static final LinkRelation REL_SEARCH_FACHSTELLE = LinkRelation.of("searchFachstelle"); - - private final CurrentUserService currentUserService; - private final CollaborationService collaborationService; - - @Override - public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { - var vorgang = model.getContent(); - - if (Objects.isNull(vorgang) || !currentUserService.hasRole(UserRole.VERWALTUNG_USER)) { - return model; - } - - return ModelBuilder.fromModel(model) - .ifMatch(() -> !collaborationService.hasCollaboration(vorgang.getId())) - .addLinks(buildSearchOrganisationsEinheitLink(), buildSearchFachstelleLink()) - .addLink(linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgang.getId())).withRel(REL_COLLABORATIONS)) - .buildModel(); - } - - private Link buildSearchOrganisationsEinheitLink() { - return linkTo(methodOn(OrganisationsEinheitController.class).search(null)).withRel( - REL_SEARCH_ORGANISATIONS_EINHEIT); - } - - private Link buildSearchFachstelleLink() { - return linkTo(methodOn(FachstelleController.class).search(null)).withRel(REL_SEARCH_FACHSTELLE); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Fachstelle.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Fachstelle.java deleted file mode 100644 index 2bee97cf52f26200611587c1bfdc2d1c94cc70d0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Fachstelle.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class Fachstelle { - - @JsonIgnore - private String id; - private String name; - private String anschrift; - private String email; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleCollaboration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleCollaboration.java deleted file mode 100644 index f1c8c6022050df4b0f7ecd4a28f093490cbda780..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleCollaboration.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.springframework.hateoas.server.core.Relation; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedResource; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@Relation(itemRelation = "collaboration", collectionRelation = "collaborationList") -public class FachstelleCollaboration implements Collaboration { - - @JsonIgnore - private String id; - @JsonIgnore - private String vorgangId; - @JsonIgnore - private String collaborationVorgangId; - - private String titel; - private String beschreibung; - private long collaborationLevel; - - @LinkedResource(controllerClass = FachstelleController.class) - private String zustaendigeStelle; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleController.java deleted file mode 100644 index 16f0729ad241477e6f1fda7d33ea54ab61f2cef5..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleController.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.Optional; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(FachstelleController.PATH) -@RequiredArgsConstructor -class FachstelleController { - - static final String PATH = "/api/fachstelles"; // NOSONAR - static final String SEARCH_BY_PARAM = "searchBy"; - - private final FachstelleService service; - private final FachstelleModelAssembler modelAssembler; - - @GetMapping(params = { SEARCH_BY_PARAM }) - public CollectionModel<EntityModel<Fachstelle>> search(@RequestParam String searchBy) { - return modelAssembler.toCollectionModel(service.searchFachstellen(searchBy).toList()); - } - - @GetMapping("/{id}") - public ResponseEntity<EntityModel<Fachstelle>> getById(@PathVariable String id) { - return ResponseEntity.of(Optional.of(service.getById(id)).map(modelAssembler::toModel)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleMapper.java deleted file mode 100644 index 22cb13c95441d45ed5baca3e437312ac22c97f27..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; - -@Mapper -interface FachstelleMapper { - - @Mapping(target = "name", source = "firmenName") - @Mapping(target = "email", source = "emailAdresse") - Fachstelle fromGrpc(GrpcFachstelle fachstelle); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java deleted file mode 100644 index 0b3a22989fd57212f3e4b93c3654d199174ed15f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import jakarta.annotation.Nonnull; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; - -@Component -class FachstelleModelAssembler - implements RepresentationModelAssembler<Fachstelle, EntityModel<Fachstelle>> { - - @Override - public EntityModel<Fachstelle> toModel(@Nonnull Fachstelle entity) { - return ModelBuilder.fromEntity(entity) - .addLink(linkTo(FachstelleController.class).slash(entity.getId()).withSelfRel()) - .buildModel(); - } - - @Override - public CollectionModel<EntityModel<Fachstelle>> toCollectionModel(Iterable<? extends Fachstelle> entities) { - return RepresentationModelAssembler.super.toCollectionModel(entities) - .add(linkTo(FachstelleController.class).withSelfRel()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteService.java deleted file mode 100644 index 788ad97d2a300638f1b54f7d3b64d5dfdb33a10b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteService.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceBlockingStub; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class FachstelleRemoteService { - - @GrpcClient(GrpcUtil.ZUFI_MANAGER_GRPC_CLIENT) - private FachstelleServiceBlockingStub serviceStub; - - @Autowired - private FachstelleMapper fachstelleMapper; - - public Stream<Fachstelle> search(String searchBy) { - var response = serviceStub.search(buildSearchRequest(searchBy)); - return response.getFachstellenList().stream().map(fachstelleMapper::fromGrpc); - } - - private GrpcFachstelleSearchRequest buildSearchRequest(String searchBy) { - return GrpcFachstelleSearchRequest.newBuilder().setSearchBy(searchBy).build(); - } - - public Fachstelle getById(String id) { - var request = buildGetByIdRequest(id); - var response = serviceStub.getById(request); - return getFachstelleFromGetByIdResponse(response); - } - - GrpcFachstelleGetRequest buildGetByIdRequest(String id) { - return GrpcFachstelleGetRequest.newBuilder().setId(id).build(); - } - - Fachstelle getFachstelleFromGetByIdResponse(GrpcFachstelleGetResponse response) { - return fachstelleMapper.fromGrpc(response.getFachstelle()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleService.java deleted file mode 100644 index 83e450427b2d6e48c69cc7dbf61544db1e5db74f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -class FachstelleService { - - private final FachstelleRemoteService remoteService; - - public Fachstelle getById(String id) { - return remoteService.getById(id); - } - - public Stream<Fachstelle> searchFachstellen(String searchBy) { - return remoteService.search(searchBy); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java deleted file mode 100644 index aeccb1786c7795171c5a65a07674a5cb36484512..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import lombok.Builder; -import lombok.Getter; -import lombok.extern.jackson.Jacksonized; - -@Builder -@Getter -@Jacksonized -class OrganisationsEinheit { - - private String id; - private XzufiId xzufiId; - private String name; - private Anschrift anschrift; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitCollaboration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitCollaboration.java deleted file mode 100644 index 4da30da7f4c71aa3ddaec5c1169f6585c29412e2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitCollaboration.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.springframework.hateoas.server.core.Relation; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedResource; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Builder -@AllArgsConstructor -@NoArgsConstructor -@Relation(itemRelation = "collaboration", collectionRelation = "collaborationList") -public class OrganisationsEinheitCollaboration implements Collaboration { - - @JsonIgnore - private String id; - @JsonIgnore - private String vorgangId; - @JsonIgnore - private String collaborationVorgangId; - - private String titel; - private String beschreibung; - private long collaborationLevel; - - @LinkedResource(controllerClass = OrganisationsEinheitController.class) - private String zustaendigeStelle; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java deleted file mode 100644 index 388dbd757bc6091527ad6c54a1c77c1358dfbe2a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.Optional; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(OrganisationsEinheitController.PATH) -@RequiredArgsConstructor -class OrganisationsEinheitController { - - static final String PATH = "/api/organisationseinheits"; // NOSONAR - static final String SEARCH_BY_PARAM = "searchBy"; - - private final OrganisationsEinheitService service; - private final OrganisationsEinheitModelAssembler assembler; - private final OrganisationsEinheitHeaderModelAssembler headerModelAssembler; - - @GetMapping("/{organisationsEinheitId}") - public ResponseEntity<EntityModel<OrganisationsEinheit>> getById(@PathVariable String organisationsEinheitId) { - return ResponseEntity.of(Optional.of(service.getById(organisationsEinheitId)).map(assembler::toModel)); - } - - @GetMapping(params = { SEARCH_BY_PARAM }) - public CollectionModel<EntityModel<OrganisationsEinheitHeader>> search(@RequestParam String searchBy) { - return headerModelAssembler.toCollectionModel(service.searchOrganisationsEinheiten(searchBy).toList()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java deleted file mode 100644 index f29a5d8b3e9ac4e7e27671631c86cfb931e1633f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class OrganisationsEinheitHeader { - - @JsonIgnore - private String id; - private String name; - private Anschrift anschrift; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderMapper.java deleted file mode 100644 index 073b6a098e87bdc89b2d6ba0e8dc0c58838cc39a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.mapstruct.Mapper; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; - -@Mapper -interface OrganisationsEinheitHeaderMapper { - - OrganisationsEinheitHeader fromGrpc(GrpcOrganisationsEinheit organisationsEinheit); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java deleted file mode 100644 index 35bc52e64167f4ce8de05e37bf30502947c4b43d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import jakarta.annotation.Nonnull; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; - -@Component -class OrganisationsEinheitHeaderModelAssembler - implements RepresentationModelAssembler<OrganisationsEinheitHeader, EntityModel<OrganisationsEinheitHeader>> { - - @Override - public EntityModel<OrganisationsEinheitHeader> toModel(@Nonnull OrganisationsEinheitHeader entity) { - return ModelBuilder.fromEntity(entity) - .addLink(linkTo(OrganisationsEinheitController.class).slash(entity.getId()).withSelfRel()) - .buildModel(); - } - - @Override - public CollectionModel<EntityModel<OrganisationsEinheitHeader>> toCollectionModel(Iterable<? extends OrganisationsEinheitHeader> entities) { - return RepresentationModelAssembler.super.toCollectionModel(entities) - .add(linkTo(OrganisationsEinheitController.class).withSelfRel()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitMapper.java deleted file mode 100644 index a9f32bfd0d75fc995c3cfee64df9aa8f35689664..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.mapstruct.Mapper; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; - -@Mapper -interface OrganisationsEinheitMapper { - - OrganisationsEinheit fromGrpc(GrpcOrganisationsEinheit organisationsEinheit); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java deleted file mode 100644 index ad3ee72f30874e2fee0f3ed5475b64c68b083029..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; - -@Component -class OrganisationsEinheitModelAssembler implements RepresentationModelAssembler<OrganisationsEinheit, EntityModel<OrganisationsEinheit>> { - - @Override - public EntityModel<OrganisationsEinheit> toModel(OrganisationsEinheit entity) { - return ModelBuilder.fromEntity(entity) - .addLink(linkTo(OrganisationsEinheitController.class).slash(entity.getId()).withSelfRel()) - .buildModel(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitRemoteService.java deleted file mode 100644 index 98eb98c67d0db5889a179ee757b19e92f7d5ce2c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitRemoteService.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitSearchRequest; -import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class OrganisationsEinheitRemoteService { - - @GrpcClient(GrpcUtil.ZUFI_MANAGER_GRPC_CLIENT) - private OrganisationsEinheitServiceBlockingStub serviceStub; - - @Autowired - private OrganisationsEinheitHeaderMapper organisationsEinheitHeaderMapper; - @Autowired - private OrganisationsEinheitMapper organisationsEinheitMapper; - - public Stream<OrganisationsEinheitHeader> search(String searchBy) { - var response = serviceStub.search(buildSearchRequest(searchBy)); - return response.getOrganisationsEinheitenList().stream().map(organisationsEinheitHeaderMapper::fromGrpc); - } - - private GrpcOrganisationsEinheitSearchRequest buildSearchRequest(String searchBy) { - return GrpcOrganisationsEinheitSearchRequest.newBuilder().setSearchBy(searchBy).build(); - } - - public OrganisationsEinheit getById(String id) { - var request = buildGetByIdRequest(id); - var response = serviceStub.getById(request); - return getOrganisationsEinheitFromGetByIdResponse(response); - } - - GrpcOrganisationsEinheitGetRequest buildGetByIdRequest(String organisationsEinheitId) { - return GrpcOrganisationsEinheitGetRequest.newBuilder().setId(organisationsEinheitId).build(); - } - - OrganisationsEinheit getOrganisationsEinheitFromGetByIdResponse(GrpcOrganisationsEinheitGetResponse response) { - return organisationsEinheitMapper.fromGrpc(response.getOrganisationsEinheit()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitService.java deleted file mode 100644 index 4435f120538056d42e4293347b6bf984f0cba8c7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -class OrganisationsEinheitService { - - private final OrganisationsEinheitRemoteService remoteService; - - public OrganisationsEinheit getById(String id) { - return remoteService.getById(id); - } - - public Stream<OrganisationsEinheitHeader> searchOrganisationsEinheiten(String searchBy) { - return remoteService.search(searchBy); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/XzufiId.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/XzufiId.java deleted file mode 100644 index b923e5bbc4aa896d5d650e5e4e10bb24399a2352..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/XzufiId.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class XzufiId { - private String id; - private String schemeAgencyId; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/AbstractLinkedResourceDeserializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/AbstractLinkedResourceDeserializer.java deleted file mode 100644 index 9e5de8c7c95b93c24280a0ffdb9c47d149efb490..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/AbstractLinkedResourceDeserializer.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import org.apache.commons.lang3.StringUtils; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.deser.ContextualDeserializer; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.Getter; - -abstract class AbstractLinkedResourceDeserializer extends StdDeserializer<Object> implements ContextualDeserializer { - - private static final long serialVersionUID = 1L; - - @Getter - private BeanProperty beanProperty; - - @Getter - private final JavaType targetType; - - protected AbstractLinkedResourceDeserializer() { - super(Object.class); - targetType = null; - } - - protected AbstractLinkedResourceDeserializer(BeanProperty beanProperty) { - super(Object.class); - this.beanProperty = beanProperty; - this.targetType = beanProperty.getType(); - } - - @Override - public Object deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException { - if (jsonParser.isExpectedStartArrayToken()) { - Collection<Object> idList = targetType.getRawClass().isAssignableFrom(Set.class) ? new HashSet<>() : new ArrayList<>(); - - while (!jsonParser.nextToken().isStructEnd()) { - idList.add(extractId(jsonParser.getText())); - } - return idList; - } else { - return extractId(jsonParser.getText()); - } - } - - Object extractId(String url) { - Class<?> type; - if (targetType.isCollectionLikeType()) { - type = targetType.getContentType().getRawClass(); - } else { - type = targetType.getRawClass(); - } - - if (String.class.isAssignableFrom(type)) { - return extractStringId(url); - } - if (Long.class.isAssignableFrom(type) || Long.TYPE.isAssignableFrom(type)) { - return extractLongId(url); - } - if (StringBasedValue.class.isAssignableFrom(type)) { - return extractStringBasedValue(type, url); - } - return buildByBuilder(url); - } - - abstract Object buildByBuilder(String url); - - public static Long extractLongId(String uri) { - var trimedUri = StringUtils.trimToNull(uri); - if (Objects.isNull(trimedUri)) { - return null; - } - return Long.parseLong(URLDecoder.decode(trimedUri.substring(trimedUri.lastIndexOf('/') + 1), StandardCharsets.UTF_8)); - } - - private StringBasedValue extractStringBasedValue(Class<?> type, String url) { - String value = extractStringId(url); - Method fromMethod; - try { - fromMethod = type.getMethod("from", String.class); - } catch (NoSuchMethodException e) { - throw new IllegalStateException( - String.format("Cannot generate Id from type '%s'. Missing 'from' Method.", targetType.getRawClass().getSimpleName())); - } - try { - return (StringBasedValue) fromMethod.invoke(null, value); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - throw new IllegalStateException( - String.format("Cannot generate Id from type '%s'. Error calling 'from' Method.", targetType.getRawClass().getSimpleName()), - e); - } - } - - public static String extractStringId(String url) { - return URLDecoder.decode(url.substring(url.lastIndexOf('/') + 1), StandardCharsets.UTF_8); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/AbstractLinkedResourceSerializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/AbstractLinkedResourceSerializer.java deleted file mode 100644 index b257cda8bc51579022e31c8d2ff37c865166528e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/AbstractLinkedResourceSerializer.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.io.IOException; -import java.util.Collection; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.ContextualSerializer; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -abstract class AbstractLinkedResourceSerializer extends JsonSerializer<Object> implements ContextualSerializer { - @Override - public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - - if (value instanceof Collection) { - gen.writeStartArray(); - ((Collection<?>) value).forEach(val -> writeObject(gen, buildLink(val))); - gen.writeEndArray(); - } else { - writeObject(gen, buildLink(value)); - } - } - - abstract String buildLink(Object id); - - abstract IdExtractor<Object> getExtractor(); - - void writeObject(JsonGenerator gen, Object value) { - try { - gen.writeObject(value); - } catch (IOException e) { - throw new TechnicalException("Error writing String to json", e); - } - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/BaseTypesMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/BaseTypesMapper.java deleted file mode 100644 index 0e5c15deea1b32b4ff94945487f89b98ed2a098a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/BaseTypesMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.time.ZonedDateTime; -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; - -@Mapper -public interface BaseTypesMapper { - - default String fromString(String in) { - return StringUtils.trimToNull(in); - } - - default ZonedDateTime mapDateTime(String inStr) { - return Optional.ofNullable(fromString(inStr)).map(ZonedDateTime::parse).orElse(null); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java deleted file mode 100644 index 01ceb2d404037d97e024e9ff33baa69b6cc88607..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.util.LinkedList; -import java.util.List; -import java.util.function.BooleanSupplier; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.Link; - -import lombok.RequiredArgsConstructor; - -public class CollectionModelBuilder<T> { - - private final Iterable<T> entities; - - private final List<Link> links = new LinkedList<>(); - - private CollectionModelBuilder(Iterable<T> entities) { - this.entities = entities; - } - - public static <T> CollectionModelBuilder<T> fromEntities(Iterable<T> entities) { - return new CollectionModelBuilder<>(entities); - } - - public static <T> CollectionModelBuilder<T> fromEntities(Stream<T> entities) { - return new CollectionModelBuilder<>(entities.toList()); - } - - public CollectionModelBuilder<T> addLink(Link link) { - links.add(link); - return this; - } - - public ConditionalLinkAdder ifMatch(BooleanSupplier guard) { - return new ConditionalLinkAdder(guard.getAsBoolean()); - } - - public ConditionalLinkAdder ifMatch(Predicate<? super Iterable<T>> predicate) { - return new ConditionalLinkAdder(predicate.test(entities)); - } - - public CollectionModel<T> buildModel() { - var builtModel = CollectionModel.of(entities); - builtModel.add(links); - return builtModel; - } - - @RequiredArgsConstructor - public class ConditionalLinkAdder { - - public final boolean conditionFulfilled; - - public CollectionModelBuilder<T> addLink(Link link) { - if (conditionFulfilled) { - links.add(link); - } - return CollectionModelBuilder.this; - } - - public CollectionModelBuilder<T> addLink(Supplier<Link> linkSupplier) { - if (conditionFulfilled) { - links.add(linkSupplier.get()); - } - return CollectionModelBuilder.this; - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java deleted file mode 100644 index 9fe15e7d929b643995dc46717453e60be8f58304..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Setter -@Getter -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.feature") -public class FeatureToggleProperties { - - /** - * Enable mail reply option regardless of other configuration. - */ - private boolean replyAlwaysAllowed = false; - - /** - * Enable collaboration-feature in Vorgang - */ - private boolean collaborationEnabled = false; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/GermanDateTimeFormatter.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/GermanDateTimeFormatter.java deleted file mode 100644 index 13959350e7bcd8c947c180b02f03053f73dc2490..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/GermanDateTimeFormatter.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Locale; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import lombok.NonNull; - -@Component -public class GermanDateTimeFormatter { - - private static final DateTimeFormatter DATE_TIME_ZONE = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss z").withLocale(Locale.GERMANY); - - @Autowired - private SystemProperties systemProperties; - - public String formatZonedDateTime(@NonNull ZonedDateTime zonedDateTime) { - return DATE_TIME_ZONE.format(zonedDateTime.withZoneSameInstant(systemProperties.getTimeZone())); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java deleted file mode 100644 index 51e90eb4504bcdbed9c7087038f5d997c0856813..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/GrpcUtil.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.nio.charset.StandardCharsets; -import java.util.Collection; -import java.util.Optional; -import java.util.stream.StreamSupport; - -import io.grpc.Metadata; -import io.grpc.Metadata.Key; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class GrpcUtil { - - public static final String VORGANG_MANAGER_GRPC_CLIENT = "vorgang-manager"; - public static final String ZUFI_MANAGER_GRPC_CLIENT = "zufi-manager"; - public static final String COLLABORATION_MANAGER_GRPC_CLIENT = "collaboration-manager"; - - public static final String ARCHIVE_MANAGER_GRPC_CLIENT = "archive-manager"; - - public static final String SERVICE_KEY = "GRPC_SERVICE"; - - public static Key<String> keyOfString(String key) { - return Key.of(key, Metadata.ASCII_STRING_MARSHALLER); - } - - public static Key<byte[]> createKeyOf(String key) { - return Key.of(key, Metadata.BINARY_BYTE_MARSHALLER); - } - - public static String getFromHeaders(String key, Metadata headers) { - return Optional.ofNullable(headers.get(createKeyOf(key))) - .map(GrpcUtil::byteToString) - .orElse(null); - } - - public static Collection<String> getCollection(String key, Metadata headers) { - return StreamSupport.stream(headers.getAll(createKeyOf(key)).spliterator(), false) - .map(GrpcUtil::byteToString) - .toList(); - } - - private static String byteToString(byte[] bytes) { - return new String(bytes, StandardCharsets.UTF_8); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/IdBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/IdBuilder.java deleted file mode 100644 index c710121a83d15919f295efeac7a5a0d49b888e97..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/IdBuilder.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import com.fasterxml.jackson.databind.BeanProperty; - -import lombok.NoArgsConstructor; - -@NoArgsConstructor -class IdBuilder implements ObjectBuilder<Object> { - - @Override - public Object build(Object id) { - return id; - } - - @Override - public ObjectBuilder<Object> constructContextAware(BeanProperty property) { - return new IdBuilder(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/IdExtractor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/IdExtractor.java deleted file mode 100644 index 8d4e4a7f5ef625fee5ba97d67bb36b1ff5f38256..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/IdExtractor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -@FunctionalInterface -public interface IdExtractor<T> { - String extractId(T object); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/IgnoreGrpcFields.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/IgnoreGrpcFields.java deleted file mode 100644 index a631f71f8f17e246659fc1198233d549d9f6ce02..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/IgnoreGrpcFields.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import org.mapstruct.Mapping; - -@Mapping(target = "mergeFrom", ignore = true) -@Mapping(target = "clearField", ignore = true) -@Mapping(target = "clearOneof", ignore = true) -@Mapping(target = "mergeUnknownFields", ignore = true) -@Mapping(target = "unknownFields", ignore = true) -@Mapping(target = "allFields", ignore = true) -@Mapping(target = "createdAtBytes", ignore = true) -@Mapping(target = "createdByBytes", ignore = true) -@Mapping(target = "createdByNameBytes", ignore = true) -@Mapping(target = "idBytes", ignore = true) -public @interface IgnoreGrpcFields { -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResource.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResource.java deleted file mode 100644 index d860e535dfc2a09da7b389024e2152ca2b35e6e6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResource.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.core.annotation.AliasFor; - -import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@Inherited - -@JacksonAnnotationsInside -@JsonSerialize(using = LinkedResourceSerializer.class) -@JsonDeserialize(using = LinkedResourceDeserializer.class) -public @interface LinkedResource { - - Class<?> controllerClass(); - - Class<? extends IdExtractor<Object>> extractor() default ToStringExtractor.class; - - @AliasFor(annotation = JsonDeserialize.class, attribute = "builder") - Class<? extends ObjectBuilder<Object>> builder() default IdBuilder.class; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResourceDeserializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResourceDeserializer.java deleted file mode 100644 index 29d5063eda4522a966a88bad6626e82d5b2b7301..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResourceDeserializer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.lang.reflect.InvocationTargetException; - -import org.apache.commons.lang3.reflect.ConstructorUtils; - -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -public class LinkedResourceDeserializer extends AbstractLinkedResourceDeserializer { - - private static final long serialVersionUID = 1L; - - private LinkedResource annotation; - - protected LinkedResourceDeserializer() { - super(); - } - - protected LinkedResourceDeserializer(BeanProperty beanProperty) { - super(beanProperty); - this.annotation = beanProperty.getAnnotation(LinkedResource.class); - } - - @Override - Object buildByBuilder(String url) { - ObjectBuilder<?> builder; - try { - builder = ConstructorUtils.invokeConstructor(annotation.builder()).constructContextAware(getBeanProperty()); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) { - throw new TechnicalException("Error instanciating Builder.", e); - } - return builder.build(extractStringId(url)); - } - - @Override - public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) { - return new LinkedResourceDeserializer(property); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResourceSerializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResourceSerializer.java deleted file mode 100644 index 0dda5f54061f71b9354dfef7e23340b8f13e5a47..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedResourceSerializer.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.lang.reflect.InvocationTargetException; - -import org.apache.commons.lang3.reflect.ConstructorUtils; - -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class LinkedResourceSerializer extends AbstractLinkedResourceSerializer { - - private LinkedResource annotation; - - private LinkedResourceSerializer(LinkedResource annotation) { - this.annotation = annotation; - } - - @Override - public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) { - return new LinkedResourceSerializer(property.getAnnotation(LinkedResource.class)); - } - - @Override - String buildLink(Object id) { - return linkTo(annotation.controllerClass()).slash(getExtractor().extractId(id)).toString(); - } - - @Override - IdExtractor<Object> getExtractor() { - try { - return ConstructorUtils.invokeConstructor(annotation.extractor()); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) { - throw new TechnicalException("Error instanciating IdExtractor", e); - } - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResource.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResource.java deleted file mode 100644 index b5ab0b0398d3aaa6cc2038fe19332161580965c9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResource.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.core.annotation.AliasFor; - -import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@Inherited - -@JacksonAnnotationsInside -@JsonSerialize(using = LinkedUserProfileResourceSerializer.class) -@JsonDeserialize(using = LinkedUserProfileResourceDeserializer.class) -public @interface LinkedUserProfileResource { - - Class<? extends IdExtractor<Object>> extractor() default ToStringExtractor.class; - - @AliasFor(annotation = JsonDeserialize.class, attribute = "builder") - Class<? extends ObjectBuilder<Object>> builder() default IdBuilder.class; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceDeserializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceDeserializer.java deleted file mode 100644 index 6b4cd50fb3b73912cae168ef08c530036bf0c095..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceDeserializer.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.lang.reflect.InvocationTargetException; - -import org.apache.commons.lang3.reflect.ConstructorUtils; - -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -public class LinkedUserProfileResourceDeserializer extends AbstractLinkedResourceDeserializer { - - private static final long serialVersionUID = 1L; - - private LinkedUserProfileResource annotation; - - protected LinkedUserProfileResourceDeserializer() { - super(); - } - - protected LinkedUserProfileResourceDeserializer(BeanProperty beanProperty) { - super(beanProperty); - this.annotation = beanProperty.getAnnotation(LinkedUserProfileResource.class); - } - - @Override - Object buildByBuilder(String url) { - ObjectBuilder<?> builder; - try { - builder = ConstructorUtils.invokeConstructor(annotation.builder()).constructContextAware(getBeanProperty()); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) { - throw new TechnicalException("Error instanciating Builder.", e); - } - return builder.build(extractStringId(url)); - } - - @Override - public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) { - return new LinkedUserProfileResourceDeserializer(property); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java deleted file mode 100644 index ed0f0ee2936cd65ee0e34587616ae67c2af65183..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.Collection; - -import org.apache.commons.lang3.reflect.ConstructorUtils; -import org.springframework.hateoas.Link; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.ContextualSerializer; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class LinkedUserProfileResourceSerializer extends JsonSerializer<Object> implements ContextualSerializer { - - private LinkedUserProfileResource annotation; - - private LinkedUserProfileResourceSerializer(LinkedUserProfileResource annotation) { - this.annotation = annotation; - } - - @Override - public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) { - return new LinkedUserProfileResourceSerializer(property.getAnnotation(LinkedUserProfileResource.class)); - } - - String buildLink(Object id) { - if (UserProfileUrlProvider.isConfigured()) { - return Link.of(UserProfileUrlProvider.getUrl(getExtractor().extractId(id))).getHref(); - } else { - return id.toString(); - } - } - - IdExtractor<Object> getExtractor() { - try { - return ConstructorUtils.invokeConstructor(annotation.extractor()); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) { - throw new TechnicalException("Error instanciating IdExtractor", e); - } - } - - @Override - public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - if (value instanceof Collection) { - gen.writeStartArray(); - ((Collection<?>) value).forEach(val -> writeObject(gen, buildLink(val))); - gen.writeEndArray(); - } else { - writeObject(gen, buildLink(value)); - } - } - - void writeObject(JsonGenerator gen, Object value) { - try { - gen.writeObject(value); - } catch (IOException e) { - throw new TechnicalException("Error writing String to json", e); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ModelBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/ModelBuilder.java deleted file mode 100644 index 79ec76f5f087866bf96bd896d377b25482b0547c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ModelBuilder.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.BooleanSupplier; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.function.UnaryOperator; -import java.util.stream.Collectors; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.reflect.FieldUtils; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; - -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class ModelBuilder<T> { - - private static final Map<Class<?>, Map<Object, List<Field>>> ANNOTATED_FIELDS_BY_ANNOTATION = new ConcurrentHashMap<>(); - - private final T entity; - private final EntityModel<T> model; - - private final List<Link> links = new LinkedList<>(); - private final List<Function<EntityModel<T>, EntityModel<T>>> mapper = new LinkedList<>(); - - private ModelBuilder(T entity) { - this.entity = entity; - this.model = null; - } - - private ModelBuilder(EntityModel<T> model) { - this.entity = null; - this.model = model; - } - - public static <T> ModelBuilder<T> fromEntity(T entity) { - return new ModelBuilder<>(entity); - } - - public static <T> ModelBuilder<T> fromModel(EntityModel<T> model) { - return new ModelBuilder<>(model); - } - - public ModelBuilder<T> addLink(Link link) { - links.add(link); - return this; - } - - public ModelBuilder<T> addLink(Optional<Link> link) { - link.ifPresent(links::add); - return this; - } - - public ModelBuilder<T> addLinks(Link... links) { - this.links.addAll(Arrays.asList(links)); - return this; - } - - public ModelBuilder<T> addLinks(Collection<Link> links) { - this.links.addAll(links); - return this; - } - - public ConditionalLinkAdder ifMatch(Predicate<T> predicate) { - return new ConditionalLinkAdder(predicate.test(Objects.isNull(entity) ? model.getContent() : entity)); - } - - public ConditionalLinkAdder ifMatch(BooleanSupplier guard) { - return new ConditionalLinkAdder(guard.getAsBoolean()); - } - - public ModelBuilder<T> map(UnaryOperator<EntityModel<T>> mapper) { - this.mapper.add(mapper); - return this; - } - - public EntityModel<T> buildModel() { - var filteredLinks = links.stream().filter(Objects::nonNull).collect(Collectors.toSet()); - - EntityModel<T> buildedModel = Objects.isNull(model) ? EntityModel.of(entity) : model; - buildedModel = buildedModel.add(filteredLinks); - - addLinkByLinkedResourceAnnotationIfMissing(buildedModel); - addLinkByLinkedUserProfileResourceAnnotationIfMissing(buildedModel); - - return applyMapper(buildedModel); - } - - private EntityModel<T> applyMapper(EntityModel<T> resource) { - Iterator<Function<EntityModel<T>, EntityModel<T>>> i = mapper.iterator(); - EntityModel<T> result = resource; - while (i.hasNext()) { - result = i.next().apply(result); - } - return result; - } - - private void addLinkByLinkedResourceAnnotationIfMissing(EntityModel<T> resource) { - getFields(LinkedResource.class).stream() - .filter(field -> shouldAddLink(resource, field)) - .forEach(field -> handleLinkedResourceField(resource, field)); - } - - private void handleLinkedResourceField(EntityModel<T> resource, Field field) { - getEntityFieldValue(field).map(Object::toString).filter(StringUtils::isNotBlank).ifPresent(val -> resource - .add(WebMvcLinkBuilder.linkTo(field.getAnnotation(LinkedResource.class).controllerClass()).slash(val) - .withRel(sanitizeName(field.getName())))); - } - - private void addLinkByLinkedUserProfileResourceAnnotationIfMissing(EntityModel<T> resource) { - getFields(LinkedUserProfileResource.class).stream() - .filter(field -> shouldAddLink(resource, field)) - .forEach(field -> handleLinkedUserProfileResourceField(resource, field)); - } - - private void handleLinkedUserProfileResourceField(EntityModel<T> resource, Field field) { - getEntityFieldValue(field).ifPresent(val -> { - if (UserProfileUrlProvider.isConfigured()) { - resource.add(Link.of(UserProfileUrlProvider.getUrl(val)).withRel(sanitizeName(field.getName()))); - } - }); - } - - private boolean shouldAddLink(EntityModel<T> resource, Field field) { - return !(field.getType().isArray() || Collection.class.isAssignableFrom(field.getType()) || resource.hasLink(sanitizeName(field.getName()))); - } - - private List<Field> getFields(Class<? extends Annotation> annotationClass) { - var fields = Optional.ofNullable(ANNOTATED_FIELDS_BY_ANNOTATION.get(getEntity().getClass())) - .map(fieldsByAnnotation -> fieldsByAnnotation.get(annotationClass)) - .orElseGet(Collections::emptyList); - - if (CollectionUtils.isEmpty(fields)) { - fields = FieldUtils.getFieldsListWithAnnotation(getEntity().getClass(), annotationClass); - - updateFields(annotationClass, fields); - } - return fields; - } - - private void updateFields(Class<? extends Annotation> annotationClass, List<Field> fields) { - var annotationMap = Optional.ofNullable(ANNOTATED_FIELDS_BY_ANNOTATION.get(getEntity().getClass())).orElseGet(HashMap::new); - annotationMap.put(annotationClass, fields); - - ANNOTATED_FIELDS_BY_ANNOTATION.put(annotationClass, annotationMap); - } - - private String sanitizeName(String fieldName) { - if (fieldName.endsWith("Id")) { - return fieldName.substring(0, fieldName.indexOf("Id")); - } - return fieldName; - } - - private Optional<Object> getEntityFieldValue(Field field) { - try { - field.setAccessible(true); - Optional<Object> value = Optional.ofNullable(field.get(getEntity())); - field.setAccessible(false); - return value; - } catch (IllegalArgumentException | IllegalAccessException e) { - LOG.warn("Cannot access field value of LinkedResource field.", e); - } - return Optional.empty(); - } - - private T getEntity() { - return Optional.ofNullable(entity == null ? model.getContent() : entity) - .orElseThrow(() -> new IllegalStateException("Entity must not null for ModelBuilding")); - } - - @RequiredArgsConstructor - public class ConditionalLinkAdder { - - public final boolean conditionFulfilled; - - public ModelBuilder<T> addLink(Supplier<Link> linkSupplier) { - if (conditionFulfilled) { - addLink(linkSupplier.get()); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLinkIfPresent(Supplier<Optional<Link>> linkSupplier) { - if (conditionFulfilled) { - addLink(linkSupplier.get()); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLink(Function<T, Link> linkBuilder) { - if (conditionFulfilled) { - addLink(linkBuilder.apply(getEntity())); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLink(Link link) { - if (conditionFulfilled) { - links.add(link); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLink(Optional<Link> link) { - if (conditionFulfilled) { - link.ifPresent(links::add); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLinks(Link... links) { - if (conditionFulfilled) { - ModelBuilder.this.links.addAll(Arrays.asList(links)); - } - return ModelBuilder.this; - } - - @SafeVarargs - public final ModelBuilder<T> addLinks(Supplier<Link>... linkSuppliers) { - if (conditionFulfilled) { - for (int i = 0; i < linkSuppliers.length; i++) { - ModelBuilder.this.links.add(linkSuppliers[i].get()); - } - } - return ModelBuilder.this; - } - - public final ModelBuilder<T> addLinks(Supplier<Collection<Link>> linksSupplier) { - if (conditionFulfilled) { - linksSupplier.get().forEach(ModelBuilder.this.links::add); - } - - return ModelBuilder.this; - } - - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ObjectBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/ObjectBuilder.java deleted file mode 100644 index ba1628bddebdcde2781d349a1df2f8a43b92d99f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ObjectBuilder.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import com.fasterxml.jackson.databind.BeanProperty; - -public interface ObjectBuilder<T> { - - T build(Object id); - - ObjectBuilder<T> constructContextAware(BeanProperty property); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/RegexUtil.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/RegexUtil.java deleted file mode 100644 index 5e26bd363a87db566994441622c18a65c2d2fa03..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/RegexUtil.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class RegexUtil { - - public static final String VALIDATION_EMAIL = "[a-zA-Z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?"; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/StringToNullMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/StringToNullMapper.java deleted file mode 100644 index d46a4dab5b56ea35dd62d2a9bbb03149020dcaeb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/StringToNullMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; - -@Mapper -public interface StringToNullMapper { - - default String fromString(String value) { - return StringUtils.trimToNull(value); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/SystemProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/SystemProperties.java deleted file mode 100644 index b64eb0b7fd865763fcfa942e500ff955a5f2219d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/SystemProperties.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.time.ZoneId; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Setter -@Getter -@Configuration -@ConfigurationProperties(prefix = SystemProperties.PREFIX) -public class SystemProperties { - - static final String PREFIX = "ozgcloud.system"; - - /** - * Timezone to be used in application. - */ - private ZoneId timeZone = ZoneId.of("Europe/Berlin"); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/TimeMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/TimeMapper.java deleted file mode 100644 index c9806fdcae9d1333bd579af8d44491f1a1785985..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/TimeMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.time.ZonedDateTime; - -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; - -@Mapper -public interface TimeMapper { - - default ZonedDateTime parseString(String dateTimeStr) { - return StringUtils.isBlank(dateTimeStr) ? null : ZonedDateTime.parse(dateTimeStr); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ToStringExtractor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/ToStringExtractor.java deleted file mode 100644 index 1452b843685c6515dd10f899059d09b6fa035fae..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ToStringExtractor.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import lombok.NoArgsConstructor; - -@NoArgsConstructor -class ToStringExtractor implements IdExtractor<Object> { - - @Override - public String extractId(Object object) { - return object.toString(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/UserProfileUrlProvider.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/UserProfileUrlProvider.java deleted file mode 100644 index 100dd420eb21777a28dae8e70688493017a73756..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/UserProfileUrlProvider.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import java.util.Objects; - -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.stereotype.Component; - -import com.google.common.base.Preconditions; - -@Component -public class UserProfileUrlProvider implements ApplicationContextAware { - // TODO auf javax.validation umstellen - private static final String ERROR_MESSAGE = "Key %s missing, please add it to the application.yml"; - // TODO applicationContext darf nicht static abgelegt werden - es sollte möglich - // sein, dass eine andere Konfiguration in der jvm läuft. - private static ApplicationContext applicationContext; - static final String URL_ROOT_KEY = "ozgcloud.user-manager.url"; - static final String USER_PROFILES_TEMPLATE_KEY = "ozgcloud.user-manager.profile-template"; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - UserProfileUrlProvider.setSpringContext(applicationContext); - } - - private static void setSpringContext(ApplicationContext context) { - applicationContext = context; - } - - public static boolean isConfigured() { - return Objects.nonNull(applicationContext.getEnvironment().getProperty(URL_ROOT_KEY)) - && Objects.nonNull(applicationContext.getEnvironment().getProperty(USER_PROFILES_TEMPLATE_KEY)); - } - - public static String getUrl(Object val) { - // TODO Abhängingkeit zu com.google.common ausbauen - Preconditions.checkNotNull(applicationContext, "ApplicationContext not initialized"); - - // TODO parameter lieber injezieren und validation verwenden - var rootUrl = applicationContext.getEnvironment().getProperty(URL_ROOT_KEY); - Preconditions.checkNotNull(rootUrl, ERROR_MESSAGE, URL_ROOT_KEY); - - var template = applicationContext.getEnvironment().getProperty(USER_PROFILES_TEMPLATE_KEY); - Preconditions.checkNotNull(template, ERROR_MESSAGE, USER_PROFILES_TEMPLATE_KEY); - - // TODO UriComponent Builder verwenden - var profilesUrl = rootUrl + template; - return String.format(profilesUrl, val); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ValidationMessageCodes.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/ValidationMessageCodes.java deleted file mode 100644 index cfb9bac7054ee8406c85b1b64f5c81130b8c25c2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ValidationMessageCodes.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class ValidationMessageCodes { - - private static final String FIELD_PREFIX = "validation_field_"; - public static final String FIELD_IS_EMPTY = FIELD_PREFIX + "empty"; - public static final String FIELD_MIN_SIZE = FIELD_PREFIX + "min_size"; - public static final String FIELD_MAX_SIZE = FIELD_PREFIX + "max_size"; - public static final String FIELD_SIZE = FIELD_PREFIX + "size"; - public static final String FIELD_DATE_PAST = FIELD_PREFIX + "date_past"; - public static final String FIELD_INVALID = FIELD_PREFIX + "invalid"; - public static final String FIELD_FILE_SIZE_EXCEEDED = FIELD_PREFIX + "file_size_exceeded"; - public static final String FIELD_DATE_FORMAT_INVALID = FIELD_PREFIX + "date_format_invalid"; - public static final String FIELD_FILE_CONTENT_TYPE_INVALID = FIELD_PREFIX + "file_content_type_invalid"; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItem.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItem.java deleted file mode 100644 index deae9c796b92b43b3245f749782def611c83c812..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItem.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import java.util.Map; - -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class VorgangAttachedItem implements CommandBody { - - public static final String FIELD_ITEM_NAME = "itemName"; - public static final String ITEM_FIELD = "item"; - - private String id; - private long version; - - @Builder.Default - private String client = "Alfa"; - private String vorgangId; - private String itemName; - - private Map<String, ?> item; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemMapper.java deleted file mode 100644 index e0cda998be3f389b3693dbbc68837d77bdc56df9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import org.mapstruct.Mapper; - -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; - -@Mapper(uses = GrpcObjectMapper.class) -interface VorgangAttachedItemMapper { - - VorgangAttachedItem fromGrpc(GrpcVorgangAttachedItem grpcVorgangAttachedItem); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemRemoteService.java deleted file mode 100644 index 8d4265a306ad0dc0c9ba16567ffa5e8941ec50e5..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemRemoteService.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; -import io.grpc.Status.Code; -import io.grpc.StatusRuntimeException; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class VorgangAttachedItemRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; - - @Autowired - private VorgangAttachedItemMapper mapper; - - public Stream<VorgangAttachedItem> findVorgangAttachedItem(String vorgangId, String itemName) { - var response = vorgangAttachedItemServiceStub.find(buildFindRequest(vorgangId, itemName)); - - return response.getVorgangAttachedItemsList().stream().map(mapper::fromGrpc); - } - - GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId, String itemName) { - return GrpcFindVorgangAttachedItemRequest.newBuilder() - .setVorgangId(vorgangId) - .setItemName(itemName) - .build(); - } - - public VorgangAttachedItem getById(String id) { - var response = doGetById(id); - - return mapper.fromGrpc(response.getVorgangAttachedItem()); - } - - GrpcVorgangAttachedItemResponse doGetById(String id) { - try { - return vorgangAttachedItemServiceStub.getById(buildGetByIdRequest(id)); - } catch (StatusRuntimeException e) { - if (e.getStatus().getCode() == Code.NOT_FOUND) { - throw new ResourceNotFoundException(VorgangAttachedItem.class, id); - } - throw e; - } - } - - GrpcVorgangAttachedItemRequest buildGetByIdRequest(String id) { - return GrpcVorgangAttachedItemRequest.newBuilder().setId(id).build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemService.java deleted file mode 100644 index d705a00b9f1deb5588e6975c7e664e13d31de0fb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemService.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import java.util.Map; -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandBody; -import de.ozgcloud.alfa.common.command.CommandBodyMapper; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.kommentar.Kommentar; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderung; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class VorgangAttachedItemService { - - private final CommandBodyMapper commandBodyMapper; - private final CommandService commandService; - private final ContextService contextService; - - private final VorgangAttachedItemRemoteService vorgangAttachedItemRemoteService; - - static final String WIEDERVORLAGE_ITEM_NAME = "Wiedervorlage"; - static final String KOMMENTAR_ITEM_NAME = "Kommentar"; - static final String LOESCH_ANFORDERUNG_ITEM_NAME = "LoeschAnforderung"; - - public Command createNewWiedervorlage(Wiedervorlage wiedervorlage, String vorgangId) { - return createNewVorgangAttachedItem(wiedervorlage, WIEDERVORLAGE_ITEM_NAME, vorgangId); - } - - public Command createNewKommentar(Kommentar kommentar, String vorgangId) { - return createNewVorgangAttachedItem(kommentar, KOMMENTAR_ITEM_NAME, vorgangId); - } - - public Command createNewLoeschAnforderung(LoeschAnforderung loeschAnforderung, String vorgangId) { - return createNewVorgangAttachedItem(loeschAnforderung, LOESCH_ANFORDERUNG_ITEM_NAME, vorgangId); - } - - private Command createNewVorgangAttachedItem(CommandBody item, String itemName, String vorgangId) { - var vorgangAttachedItem = buildVorgangAttachedItem(item, vorgangId, itemName); - - return commandService.createCommandDeprecated(buildCreateCommand(vorgangId, vorgangAttachedItem)); - } - - public boolean isLoeschAnforderung(String itemName) { - return itemName.equals(LOESCH_ANFORDERUNG_ITEM_NAME); - } - - CreateCommand buildCreateCommand(String vorgangId, CommandBody body) { - return CreateCommand.builder() - .vorgangId(vorgangId) - .relationId(vorgangId) - .order(CommandOrder.CREATE_ATTACHED_ITEM.name()) - .body(body) - .build(); - } - - public Command editKommentar(Kommentar kommentar, String kommentarId, long kommentarVersion) { - var vorgangAttachedItem = buildVorgangAttachedItem(kommentar, kommentar.getVorgangId(), KOMMENTAR_ITEM_NAME); - - return commandService.createCommand( - buildUpdateCommand(kommentar.getVorgangId(), kommentarId, vorgangAttachedItem), kommentarVersion); - } - - public Command editWiedervorlage(Wiedervorlage wiedervorlage, String wiedervorlageId, long version) { - var vorgangAttachedItem = buildVorgangAttachedItem(wiedervorlage, wiedervorlage.getVorgangId(), WIEDERVORLAGE_ITEM_NAME); - - return commandService.createCommand( - buildUpdateCommand(wiedervorlage.getVorgangId(), wiedervorlageId, vorgangAttachedItem), version); - } - - VorgangAttachedItem buildVorgangAttachedItem(CommandBody body, String vorgangId, String itemName) { - return VorgangAttachedItem.builder() - .client(contextService.getClientName()) - .vorgangId(vorgangId) - .itemName(itemName) - .item(commandBodyMapper.fromObjectToMap(body)) - .build(); - } - - CreateCommand buildUpdateCommand(String vorgangId, String relationId, CommandBody body) { - return CreateCommand.builder() - .vorgangId(vorgangId) - .relationId(relationId) - .order(CommandOrder.UPDATE_ATTACHED_ITEM.name()) - .body(body) - .build(); - } - - public Command setWiedervorlageDone(Wiedervorlage wiedervorlage, boolean done) { - return commandService.createCommand(createPatchCommand(wiedervorlage, done), wiedervorlage.getVersion()); - } - - CreateCommand createPatchCommand(Wiedervorlage wiedervorlage, boolean done) { - return getPatchCommandBuilder(wiedervorlage).body(createSetDoneBody(done)).relationVersion(wiedervorlage.getVersion()).build(); - } - - CreateCommand.CreateCommandBuilder getPatchCommandBuilder(Wiedervorlage wiedervorlage) { - return CreateCommand.builder() - .relationId(wiedervorlage.getId()) - .vorgangId(wiedervorlage.getVorgangId()) - .order(CommandOrder.PATCH_ATTACHED_ITEM.name()); - } - - private VorgangAttachedItem createSetDoneBody(boolean value) { - return VorgangAttachedItem.builder().itemName(Wiedervorlage.class.getSimpleName()).item(Map.of(Wiedervorlage.DONE_FIELD, value)).build(); - } - - public Stream<VorgangAttachedItem> findLoeschAnforderung(String vorgangId) { - return vorgangAttachedItemRemoteService.findVorgangAttachedItem(vorgangId, LOESCH_ANFORDERUNG_ITEM_NAME); - } - - public VorgangAttachedItem getById(String id) { - return vorgangAttachedItemRemoteService.getById(id); - } - - public Command deleteAttachedItem(VorgangAttachedItem vorgangAttachedItem) { - var createCommand = buildDeleteCommand(vorgangAttachedItem); - - return commandService.createCommand(createCommand, vorgangAttachedItem.getVersion()); - } - - CreateCommand buildDeleteCommand(VorgangAttachedItem vorgangAttachedItem) { - return CreateCommand.builder() - .vorgangId(vorgangAttachedItem.getVorgangId()) - .relationId(vorgangAttachedItem.getId()) - .relationVersion(vorgangAttachedItem.getVersion()) - .order(CommandOrder.DELETE_ATTACHED_ITEM.name()) - .body(vorgangAttachedItem) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/AlfaUserWithFileId.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/AlfaUserWithFileId.java deleted file mode 100644 index 018c7e0151a4994f97cc89c5206a201d14409ef2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/AlfaUserWithFileId.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.Collection; -import java.util.List; -import java.util.Objects; - -import org.springframework.security.core.GrantedAuthority; - -import de.ozgcloud.alfa.common.user.UserProfile; -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class AlfaUserWithFileId { - private UserProfile user; - - private FileId fileId; - - public Collection<GrantedAuthority> getAuthorities() { - return Objects.nonNull(user) ? user.getAuthorities() : List.of(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileContentTypeConstraint.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileContentTypeConstraint.java deleted file mode 100644 index e71623d5568b0322ff4d4b9d50a0e074fb300079..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileContentTypeConstraint.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.*; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import jakarta.validation.Constraint; -import jakarta.validation.Payload; - -@Constraint(validatedBy = { UploadBinaryFileContentTypeValidator.class }) -@Target({ TYPE }) -@Retention(RUNTIME) -@Documented -public @interface BinaryFileContentTypeConstraint { - - String message() default ValidationMessageCodes.FIELD_FILE_CONTENT_TYPE_INVALID; - - Class<?>[] groups() default {}; - - Class<? extends Payload>[] payload() default {}; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileController.java deleted file mode 100644 index 6c5328cf8edd25cfdf367b0c77dac539af9ab31f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileController.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.concurrent.Future; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.common.errorhandling.TechnicalException; - -@RestController -@RequestMapping(BinaryFileController.PATH) -public class BinaryFileController { - - static final String PATH = "/api/binaryFiles"; // NOSONAR - - @Autowired - private BinaryFileService service; - @Autowired - private BinaryFileModelAssembler modelAssembler; - @Autowired - private FileIdMapper fileIdMapper; - - @GetMapping("/{fileId}") - public EntityModel<OzgFile> getFile(@PathVariable FileId fileId) { - return modelAssembler.toModel(service.getFile(fileId)); - } - - @PostMapping("/{vorgangId}/{field}/file") - public Future<ResponseEntity<Void>> uploadFile(@PathVariable String vorgangId, @PathVariable String field, @RequestPart MultipartFile file) { - var fileIdFuture = service.uploadFile(buildBinaryFileUploadRequest(vorgangId, field, file)); - - return fileIdFuture.thenApply(fileId -> ResponseEntity.created(linkTo(BinaryFileController.class).slash(fileId).toUri()).build()); - } - - UploadBinaryFileRequest buildBinaryFileUploadRequest(String vorgangId, String field, MultipartFile file) { - return UploadBinaryFileRequest.builder() - .vorgangId(vorgangId) - .field(field) - .uploadStream(getInputStream(file)) - .name(file.getOriginalFilename()) - .contentType(file.getContentType()) - .size(file.getSize()) - .build(); - } - - InputStream getInputStream(MultipartFile file) { - try { - return file.getInputStream(); - } catch (IOException e) { - throw new TechnicalException("Error reading File data as stream.", e); - } - } - - public CollectionModel<EntityModel<OzgFile>> getFiles(List<FileId> fileIds) { - var files = service.getFiles(mapToFileId(fileIds)).toList(); - - return modelAssembler.toCollectionModel(files); - } - - private List<FileId> mapToFileId(List<FileId> fileIds) { - return fileIds.stream() - .map(fileIdMapper::toString) - .map(FileId::from) - .toList(); - } - - @PreAuthorize("@downloadAuthenticationHandler.canDownloadFile(#fileId)") - @GetMapping(value = "/{fileId}", produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE, - "images/*" }, consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE) - public ResponseEntity<StreamingResponseBody> getFileData(@PathVariable FileId fileId) { - var ozgFile = service.getFile(fileId); - - return buildResponseEntity(ozgFile, createDownloadStreamingBody(fileId)); - } - - StreamingResponseBody createDownloadStreamingBody(FileId fileId) { - return out -> service.writeFileContent(fileId, out); - } - - ResponseEntity<StreamingResponseBody> buildResponseEntity(OzgFile ozgFile, StreamingResponseBody responseBody) { - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", ozgFile.getName())) - .contentLength(ozgFile.getSize()) - .contentType(MediaType.valueOf(ozgFile.getContentType())) - .body(responseBody); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileDownloadStreamObserver.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileDownloadStreamObserver.java deleted file mode 100644 index 1361e587ea37993a3c78251cf3c4fab5ac39e6a2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileDownloadStreamObserver.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.concurrent.CompletableFuture; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataResponse; -import io.grpc.stub.StreamObserver; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor(access = AccessLevel.PROTECTED) -class BinaryFileDownloadStreamObserver implements StreamObserver<GrpcGetBinaryFileDataResponse> { - - private final CompletableFuture<Boolean> streamFuture; - private final OutputStream out; - - @Override - public void onNext(GrpcGetBinaryFileDataResponse response) { - writeToStream(response.getFileContent().toByteArray()); - } - - void writeToStream(byte[] contentPart) { - try { - out.write(contentPart); - } catch (IOException e) { - throw new TechnicalException("Download file error writing on outputstream", e); - } - } - - @Override - public void onError(Throwable t) { - streamFuture.completeExceptionally(t); - } - - @Override - public void onCompleted() { - streamFuture.complete(true); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileMaxSizeConstraint.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileMaxSizeConstraint.java deleted file mode 100644 index d4750254af87d459414342030a8bac97f3abddf9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileMaxSizeConstraint.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.*; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import jakarta.validation.Constraint; -import jakarta.validation.Payload; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; - -@Constraint(validatedBy = { UploadBinaryFileSizeValidator.class }) -@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE }) -@Retention(RUNTIME) -@Documented -public @interface BinaryFileMaxSizeConstraint { - String message() default ValidationMessageCodes.FIELD_FILE_SIZE_EXCEEDED; - - Class<?>[] groups() default {}; - - Class<? extends Payload>[] payload() default {}; - - int max() default UploadBinaryFileSizeValidator.DEFAULT_MAX_SIZE; - - String unit() default UploadBinaryFileSizeValidator.DEFAULT_UNIT_STRING; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java deleted file mode 100644 index 1f9e5345231f8f619b0951c4480d12f9cc5d2b78..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.file.OzgFile; - -@Component -public class BinaryFileModelAssembler implements RepresentationModelAssembler<OzgFile, EntityModel<OzgFile>> { - - static final String REL_DOWNLOAD = "download"; - - @Override - public EntityModel<OzgFile> toModel(OzgFile file) { - var selfLink = linkTo(BinaryFileController.class).slash(file.getId()); - - return ModelBuilder.fromEntity(file).addLink(selfLink.withSelfRel()) - .addLink(linkTo(BinaryFileController.class).slash(file.getId()).withRel(REL_DOWNLOAD)) - .buildModel(); - } - - public CollectionModel<EntityModel<OzgFile>> toCollectionModel(Stream<OzgFile> entities) { - return CollectionModel.of(entities.map(this::toModel).toList(), linkTo(BinaryFileController.class).withSelfRel()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileProperties.java deleted file mode 100644 index 5a7985935083a6d2565baa40231df49086c7a517..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileProperties.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.unit.DataSize; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties("ozgcloud.upload") -class BinaryFileProperties { - - /** - * Max file data size to upload - */ - private Map<String, DataSize> maxFileSize = Collections.emptyMap(); - - /** - * Supported file content types to upload - */ - private Map<String, List<String>> contentTypes = Collections.emptyMap(); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileRemoteService.java deleted file mode 100644 index df2ae12de90416fb801fbda5ed8ccb05120d5311..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileRemoteService.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.io.OutputStream; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileMapper; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceStub; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcFindFilesResponse; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataRequest; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileMetaData; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest; -import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class BinaryFileRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private BinaryFileServiceBlockingStub serviceStub; - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private BinaryFileServiceStub asyncServiceStub; - @Autowired - private OzgFileMapper mapper; - @Autowired - private FileIdMapper fileIdMapper; - - @Autowired - private ContextService contextService; - - static final int CHUNK_SIZE = 255 * 1024; - - public OzgFile getFile(FileId fileId) { - var response = serviceStub.findBinaryFilesMetaData(buildGrpcBinaryFileRequest(fileId)); - - return mapOzgFile(response.getFile(0)); - } - - private OzgFile mapOzgFile(GrpcOzgFile file) { - return mapper.toFile(file); - } - - GrpcBinaryFilesRequest buildGrpcBinaryFileRequest(FileId fileId) { - return GrpcBinaryFilesRequest.newBuilder() - .addFileId(fileId.toString()) - .setContext(contextService.createCallContext()) - .build(); - } - - public CompletableFuture<FileId> uploadFile(UploadBinaryFileRequest uploadBinaryFileRequest) { - var fileIdFuture = new CompletableFuture<FileId>(); - var responseObserver = createUploadBinaryFileObserver(fileIdFuture, uploadBinaryFileRequest); - - asyncServiceStub.uploadBinaryFileAsStream(responseObserver); - - return fileIdFuture; - } - - BinaryFileUploadStreamObserver createUploadBinaryFileObserver(CompletableFuture<FileId> fileIdFuture, - UploadBinaryFileRequest uploadBinaryFileRequest) { - var metadataRequest = buildMetaDataRequest(uploadBinaryFileRequest); - var streamer = new ChunkedFileSender<>(uploadBinaryFileRequest.getUploadStream(), CHUNK_SIZE, this::buildChunkRequest, metadataRequest); - return new BinaryFileUploadStreamObserver(fileIdFuture, streamer); - } - - GrpcUploadBinaryFileRequest buildMetaDataRequest(UploadBinaryFileRequest uploadBinaryFileRequest) { - return GrpcUploadBinaryFileRequest.newBuilder() - .setMetadata(GrpcUploadBinaryFileMetaData.newBuilder() - .setContext(contextService.createCallContext()) - .setVorgangId(uploadBinaryFileRequest.getVorgangId()) - .setField(uploadBinaryFileRequest.getField()) - .setContentType(uploadBinaryFileRequest.getContentType()) - .setSize(uploadBinaryFileRequest.getSize()) - .setFileName(uploadBinaryFileRequest.getName())) - .build(); - } - - GrpcUploadBinaryFileRequest buildChunkRequest(byte[] bytes) { - return GrpcUploadBinaryFileRequest.newBuilder().setFileContent((ByteString.copyFrom(bytes))).build(); - } - - public Stream<OzgFile> getFiles(List<FileId> fileIds) { - var response = serviceStub.findBinaryFilesMetaData(buildBinaryFilesRequest(fileIds)); - - return mapGrpcFindFilesRespones(response); - } - - private Stream<OzgFile> mapGrpcFindFilesRespones(GrpcFindFilesResponse response) { - return response.getFileList().stream().map(mapper::toFile); - } - - GrpcBinaryFilesRequest buildBinaryFilesRequest(List<FileId> fileIds) { - return GrpcBinaryFilesRequest.newBuilder() - .addAllFileId(mapFileIds(fileIds)) - .setContext(contextService.createCallContext()) - .build(); - } - - private List<String> mapFileIds(List<FileId> fileIds) { - return fileIds.stream().map(fileIdMapper::toString).toList(); - } - - public void writeFileContent(FileId fileId, OutputStream out) { - var streamFuture = new CompletableFuture<Boolean>(); - var responseObserver = createDownloadBinaryFileObserver(streamFuture, out); - - asyncServiceStub.getBinaryFileContent(buildGrpcGetBinaryFileDataRequest(fileId), responseObserver); - - waitUntilFutureToComplete(streamFuture); - } - - void waitUntilFutureToComplete(CompletableFuture<Boolean> streamFuture) { - try { - streamFuture.get(10, TimeUnit.MINUTES); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new TechnicalException(e.getMessage(), e); - } catch (ExecutionException | TimeoutException e) { - throw new TechnicalException(e.getMessage(), e); - } - } - - BinaryFileDownloadStreamObserver createDownloadBinaryFileObserver(CompletableFuture<Boolean> streamFuture, OutputStream out) { - return new BinaryFileDownloadStreamObserver(streamFuture, out); - } - - private GrpcGetBinaryFileDataRequest buildGrpcGetBinaryFileDataRequest(FileId fileId) { - return GrpcGetBinaryFileDataRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setFileId(fileIdMapper.toString(fileId)).build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileService.java deleted file mode 100644 index ceb1a44974b4ace1b988201fc7eecf26e0375c96..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.io.OutputStream; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Stream; - -import jakarta.validation.Valid; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.alfa.common.file.OzgFile; - -@Service -@Validated -public class BinaryFileService { - - @Autowired - private BinaryFileRemoteService remoteService; - - public CompletableFuture<FileId> uploadFile(@Valid UploadBinaryFileRequest uploadBinaryFileRequest) { - return remoteService.uploadFile(uploadBinaryFileRequest); - } - - public Stream<OzgFile> getFiles(List<FileId> fileIds) { - return remoteService.getFiles(fileIds); - } - - public void writeFileContent(FileId fileId, OutputStream out) { - remoteService.writeFileContent(fileId, out); - } - - public OzgFile getFile(FileId fileId) { - return remoteService.getFile(fileId); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileUploadStreamObserver.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileUploadStreamObserver.java deleted file mode 100644 index 04dce33e8855c1e34a5c1024b9c3bf1790e0a97b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileUploadStreamObserver.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.concurrent.CompletableFuture; - -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileResponse; -import io.grpc.stub.ClientCallStreamObserver; -import io.grpc.stub.ClientResponseObserver; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor(access = AccessLevel.PROTECTED) -class BinaryFileUploadStreamObserver implements ClientResponseObserver<GrpcUploadBinaryFileRequest, GrpcUploadBinaryFileResponse> { - - private final CompletableFuture<FileId> fileIdFuture; - private final ChunkedFileSender<GrpcUploadBinaryFileRequest> fileStreamer; - - @Getter - private String fileId; - - private ClientCallStreamObserver<GrpcUploadBinaryFileRequest> requestObserver; - - @Override - public void beforeStart(ClientCallStreamObserver<GrpcUploadBinaryFileRequest> requestStream) { - this.requestObserver = requestStream; - requestObserver.setOnReadyHandler(() -> fileStreamer.sendChunkTo(requestObserver)); - } - - @Override - public void onNext(GrpcUploadBinaryFileResponse response) { - fileId = response.getFileId(); - } - - @Override - public void onError(Throwable t) { - fileIdFuture.completeExceptionally(t); - } - - @Override - public void onCompleted() { - fileIdFuture.complete(FileId.from(fileId)); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/ChunkedFileSender.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/ChunkedFileSender.java deleted file mode 100644 index b2269c0f6e104321106faf5427e191fc328144c2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/ChunkedFileSender.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Function; - -import org.apache.commons.io.IOUtils; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import io.grpc.stub.CallStreamObserver; -import lombok.AllArgsConstructor; - -@AllArgsConstructor -class ChunkedFileSender<T> { - - private final AtomicBoolean hasUploadFile = new AtomicBoolean(true); - private final InputStream uploadStream; - private final int chunkSize; - private final Function<byte[], T> buildChunkRequest; - private T requestMetadata; - - public void sendChunkTo(CallStreamObserver<T> streamObserver) { - if (hasUploadFile.get()) { - sendMetadata(streamObserver); - int size = sendNextChunk(streamObserver); - if (size < chunkSize) { - handleFileEndReached(streamObserver); - } - } - } - - private void sendMetadata(CallStreamObserver<T> streamObserver) { - if (requestMetadata != null) { - streamObserver.onNext(requestMetadata); - requestMetadata = null; - } - } - - private int sendNextChunk(CallStreamObserver<T> streamObserver) { - byte[] content = readFromStream(); - var size = content.length; - if (size > 0) { - streamObserver.onNext(buildChunkRequest.apply(content)); - } - return size; - } - - private byte[] readFromStream() { - try { - return uploadStream.readNBytes(chunkSize); - } catch (IOException e) { - throw new TechnicalException("Error on sending a single chunk", e); - } - } - - private void handleFileEndReached(CallStreamObserver<T> streamObserver) { - IOUtils.closeQuietly(uploadStream); - streamObserver.onCompleted(); - hasUploadFile.getAndSet(false); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/DownloadAuthenticationHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/DownloadAuthenticationHandler.java deleted file mode 100644 index 04785d469a9e5b45ff4c5536b83d6141a3110b35..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/DownloadAuthenticationHandler.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.Objects; - -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; - -@Component -public class DownloadAuthenticationHandler { - - public boolean canDownloadFile(FileId fileId) { - return check(fileId, SecurityContextHolder.getContext().getAuthentication()); - } - - boolean check(FileId fileId, Authentication auth) { - if (auth instanceof UsernamePasswordAuthenticationToken userPasswordToken) { - var user = (AlfaUserWithFileId) userPasswordToken.getPrincipal(); - return Objects.nonNull(fileId) && fileId.equals(user.getFileId()) && auth.isAuthenticated(); - } - - return auth.isAuthenticated(); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/DynamicViolationParameter.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/DynamicViolationParameter.java deleted file mode 100644 index 6d0bbe8393feba029712abb2527fd665ab7f2baa..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/DynamicViolationParameter.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.HashMap; -import java.util.Map; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class DynamicViolationParameter { - - @Builder.Default - private Map<String, Object> map = new HashMap<>(); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/FileId.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/FileId.java deleted file mode 100644 index 8a98a3054af3d1481f44e3964eae34d800e91d37..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/FileId.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.UUID; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -public class FileId extends StringBasedValue { - - private static final long serialVersionUID = 1L; - - FileId(String fileId) { - super(fileId); - } - - public static FileId createNew() { - return from(UUID.randomUUID().toString()); - } - - public static FileId from(String fileId) { - return new FileId(fileId); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapper.java deleted file mode 100644 index d3fc71d7698f2b78da97f0a0b39f2cbe41e19546..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import org.mapstruct.Mapper; - -@Mapper -public interface FileIdMapper { - - default FileId toFileId(String fileId) { - return FileId.from(fileId); - } - - default String toString(FileId fileId) { - return fileId.toString(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileContentTypeValidator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileContentTypeValidator.java deleted file mode 100644 index d1fc3a35eea483a6590889a0a194ce21b0248646..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileContentTypeValidator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.Collection; -import java.util.Collections; -import java.util.Optional; - -import jakarta.validation.ConstraintValidator; -import jakarta.validation.ConstraintValidatorContext; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public class UploadBinaryFileContentTypeValidator implements ConstraintValidator<BinaryFileContentTypeConstraint, UploadBinaryFileRequest> { - - private final BinaryFileProperties properties; - - @Override - public boolean isValid(UploadBinaryFileRequest uploadRequest, ConstraintValidatorContext context) { - var contentTypes = getConfiguredContentTypes(uploadRequest.getField()); - return contentTypes.isEmpty() || contentTypes.contains(uploadRequest.getContentType()); - } - - Collection<String> getConfiguredContentTypes(String field) { - return Optional.ofNullable(properties.getContentTypes().get(field)).orElse(Collections.emptyList()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileRequest.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileRequest.java deleted file mode 100644 index 83dcd721d537d96afac700704ae5a4e0905eb2b6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileRequest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.io.InputStream; - -import org.springframework.validation.annotation.Validated; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -@Validated -@BinaryFileMaxSizeConstraint -@BinaryFileContentTypeConstraint -class UploadBinaryFileRequest { - - private String vorgangId; - private String field; - - private String name; - private String contentType; - private long size; - private InputStream uploadStream; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileSizeValidator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileSizeValidator.java deleted file mode 100644 index 791c7889e63cb8b45d480896fa6f2384cca29f7c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileSizeValidator.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.util.Map; -import java.util.Optional; - -import jakarta.validation.ConstraintValidator; -import jakarta.validation.ConstraintValidatorContext; - -import org.hibernate.validator.constraintvalidation.HibernateConstraintValidatorContext; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.unit.DataSize; -import org.springframework.util.unit.DataUnit; - -class UploadBinaryFileSizeValidator implements ConstraintValidator<BinaryFileMaxSizeConstraint, UploadBinaryFileRequest> { - - static final String DEFAULT_UNIT_STRING = "MB"; - static final DataUnit DEFAULT_UNIT = DataUnit.fromSuffix(DEFAULT_UNIT_STRING); - - static final int DEFAULT_MAX_SIZE = 40; - - private final DataSize defaultDataSize = DataSize.of(DEFAULT_MAX_SIZE, DEFAULT_UNIT); - - @Autowired - private BinaryFileProperties binaryFileProperties; - - @Override - public boolean isValid(UploadBinaryFileRequest uploadRequest, ConstraintValidatorContext context) { - var maxValidSize = getMaxValidSize(uploadRequest.getField()); - - setDynamicPayload(buildDynamicPayload(maxValidSize), context); - - return isFileSizeValid(DataSize.ofBytes(uploadRequest.getSize()), maxValidSize); - } - - private boolean isFileSizeValid(DataSize uploadFileSize, DataSize maxFileSize) { - return uploadFileSize.toBytes() <= maxFileSize.toBytes(); - } - - DataSize getMaxValidSize(String field) { - return Optional.ofNullable(binaryFileProperties.getMaxFileSize().get(field)).orElseGet(() -> defaultDataSize); - } - - private void setDynamicPayload(DynamicViolationParameter dynamicViolationParameter, ConstraintValidatorContext context) { - var unwrappedContext = getUnwrappedContext(HibernateConstraintValidatorContext.class, context); - unwrappedContext.withDynamicPayload(dynamicViolationParameter); - } - - <T> T getUnwrappedContext(Class<T> unwrapTo, ConstraintValidatorContext context) { - return context.unwrap(unwrapTo); - } - - private DynamicViolationParameter buildDynamicPayload(DataSize maxFileSize) { - return DynamicViolationParameter.builder().map(Map.of("max", maxFileSize.toMegabytes())).build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/CallContextAttachingInterceptor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/CallContextAttachingInterceptor.java deleted file mode 100644 index a0cc5e0d9b6ddd39b706e4df5805cb3a7ab44f39..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/CallContextAttachingInterceptor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.callcontext; - -import org.springframework.beans.factory.annotation.Autowired; - -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; -import io.grpc.ForwardingClientCall.SimpleForwardingClientCall; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; -import net.devh.boot.grpc.client.interceptor.GrpcGlobalClientInterceptor; - -@GrpcGlobalClientInterceptor -public class CallContextAttachingInterceptor implements ClientInterceptor { - - @Autowired - private ContextService contextService; - - @Override - public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) { - return new CallContextAttachingClientCall<>(next.newCall(method, callOptions)); - } - - final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> { - - protected CallContextAttachingClientCall(ClientCall<A, B> delegate) { - super(delegate); - } - - @Override - public void start(Listener<B> responseListener, Metadata headers) { - headers.merge(contextService.buildCallContextMetadata()); - super.start(responseListener, headers); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/CallContextMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/CallContextMapper.java deleted file mode 100644 index 857a54e3577573fcc8f6940188a99b1de7060ece..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/CallContextMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.callcontext; - -import org.mapstruct.Mapper; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; - -@Mapper -public abstract class CallContextMapper { - - @Autowired - private ContextService contextService; - - public GrpcCallContext createCallContext() { - return contextService.createCallContext(); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/ContextService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/ContextService.java deleted file mode 100644 index 360fa859ddff35b0e6cd773f04406b6516fe62c7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/callcontext/ContextService.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.callcontext; - -import static de.ozgcloud.alfa.common.GrpcUtil.*; - -import java.util.Objects; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.RequestAttributes; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; -import io.grpc.Metadata; -import lombok.extern.log4j.Log4j2; - -@Service -@Log4j2 -public class ContextService { - - static final String KEY_USER_ID = "USER_ID-bin"; - static final String KEY_USER_NAME = "USER_NAME-bin"; - public static final String KEY_CLIENT_NAME = "CLIENT_NAME-bin"; - public static final String KEY_REQUEST_ID = "REQUEST_ID-bin"; - static final String KEY_ACCESS_LIMITED_ORGAID = "ACCESS_LIMITED_TO_ORGANISATORISCHEEINHEITENID-bin"; - static final String KEY_ACCESS_LIMITED = "ACCESS_LIMITED-bin"; - - @Autowired - private ApplicationContext context; - - @Autowired - private CurrentUserService userService; - @Autowired(required = false) - private RequestAttributes reqAttributes; - - public GrpcCallContext createCallContext() { - return GrpcCallContext.newBuilder() - .setClient(context.getId()) - .setUser(createUser()) - .setRequestId(getRequestId()) - .build(); - } - - public String getClientName() { - return context.getId(); - } - - private GrpcUser createUser() { - var user = userService.getUser(); - - return GrpcUser.newBuilder() - .setId(user.getId().toString()) - .setName(user.getFullName()) - .build(); - } - - public Metadata buildCallContextMetadata() { - var user = userService.getUser(); - var metadata = buildCallContextWithoutUser(); - - Optional.ofNullable(user.getId()).map(id -> id.toString().getBytes()) - .ifPresentOrElse(bytes -> metadata.put(createKeyOf(KEY_USER_ID), bytes), () -> LOG.warn("Missing value 'userid'")); - Optional.ofNullable(user.getFullName()).map(String::getBytes) - .ifPresentOrElse(bytes -> metadata.put(createKeyOf(KEY_USER_NAME), bytes), () -> LOG.warn("Missing value 'fullname'")); - - user.getOrganisationseinheitIds().stream().map(String::getBytes) - .forEach(bytes -> metadata.put(createKeyOf(KEY_ACCESS_LIMITED_ORGAID), bytes)); - - return metadata; - } - - public Metadata buildCallContextWithoutUser() { - var metadata = new Metadata(); - - Optional.ofNullable(context.getId()).map(String::getBytes) - .ifPresentOrElse(bytes -> metadata.put(createKeyOf(KEY_CLIENT_NAME), bytes), () -> LOG.warn("Missing value 'client name'")); - - metadata.put(createKeyOf(KEY_REQUEST_ID), getRequestId().getBytes()); - metadata.put(createKeyOf(KEY_ACCESS_LIMITED), isOrganisationEinheitenIdCheckNecessary()); - - return metadata; - } - - private byte[] isOrganisationEinheitenIdCheckNecessary() { - var hasRoleWithNoCheckNecessary = userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE) - || userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); - - return Boolean.toString(!hasRoleWithNoCheckNecessary).getBytes(); - } - - String getRequestId() { - return Objects.isNull(reqAttributes) ? "- no request scope -" : reqAttributes.getRequestId(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttribute.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttribute.java deleted file mode 100644 index b8dc1197c5fea34b92e6cc46c5dcfbe271657d65..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttribute.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Getter -public enum ClientAttribute { - - WIEDERVORLAGE_NEXT_FRIST("nextWiedervorlageFrist", ClientName.ALFA), - HAS_POSTFACH_NACHRICHT("hasPostfachNachricht", ClientName.NACHRICHTEN_MANAGER), - HAS_NEW_POSTFACH_NACHRICHT("hasNewPostfachNachricht", ClientName.NACHRICHTEN_MANAGER), - ANTRAG_BEWILLIGT("antragBewilligt", ClientName.BESCHEID_MANAGER), - ARCHIVING("ARCHIVING", ClientName.ARCHIVE_MANAGER); - - private final String attributeName; - private final ClientName clientName; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeRemoteService.java deleted file mode 100644 index 46a5b3dff181958fbda8a6444c8e9a6f37e7eedd..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeRemoteService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcUpdateClientAttributeRequest; -import lombok.extern.log4j.Log4j2; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -@Log4j2 -class ClientAttributeRemoteService { - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private ClientAttributeServiceBlockingStub service; - - void setBooleanReadOnlyClientAttribute(String vorgangId, ClientAttribute clientAttribute, boolean value) { - try { - service.update(buildRequest(vorgangId, clientAttribute, value)); - } catch (RuntimeException e) { - LOG.error("Error on resetting new Postfachnachrichten.", e); - } - } - - GrpcUpdateClientAttributeRequest buildRequest(String vorgangId, ClientAttribute clientAttribute, boolean value) { - return GrpcUpdateClientAttributeRequest.newBuilder() - .setVorgangId(vorgangId) - .setAttribute( - GrpcClientAttribute.newBuilder().setValue( - GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()) - .setClientName(clientAttribute.getClientName().toString()) - .setAttributeName(clientAttribute.getAttributeName()) - .build()) - .build(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeService.java deleted file mode 100644 index 3920a077b01adce74965354f6bac185112d3fc3c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class ClientAttributeService { - - private final ClientAttributeRemoteService remoteService; - - public void resetPostfachNachricht(String vorgangId) { - remoteService.setBooleanReadOnlyClientAttribute(vorgangId, ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, false); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeUtils.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeUtils.java deleted file mode 100644 index 94cd6608537625656443ecb2b33d8a9c1a18da02..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeUtils.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import java.util.List; -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class ClientAttributeUtils { - - public static Optional<GrpcClientAttributeValue> findGrpcValue(ClientAttribute attribute, - List<GrpcClientAttribute> clientAttributes) { - return clientAttributes.stream() - .filter(grpcAttribute -> StringUtils.equals(grpcAttribute.getAttributeName(), attribute.getAttributeName()) - && StringUtils.equals(grpcAttribute.getClientName(), attribute.getClientName().toString())) - .map(GrpcClientAttribute::getValue) - .findFirst(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientName.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientName.java deleted file mode 100644 index 0feaa9190f9d25dceaa01a525c059bf6077ab140..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/clientattribute/ClientName.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public enum ClientName { - ALFA("Alfa"), - NACHRICHTEN_MANAGER("OzgCloud_NachrichtenManager"), - BESCHEID_MANAGER("OzgCloud_BescheidManager"), - ARCHIVE_MANAGER("OzgCloud_ArchiveManager"); - - private final String text; - - @Override - public String toString() { - return text; - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java deleted file mode 100644 index 21bb1c9bde7590193d9f78598e95181070685b10..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.time.ZonedDateTime; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder(toBuilder = true) -@Getter -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class Command { - - @JsonIgnore - private String id; - private ZonedDateTime createdAt; - private ZonedDateTime finishedAt; - - @JsonIgnore - @LinkedUserProfileResource - private UserId createdBy; - private String createdByName; - - @JsonIgnore - private CommandStatus status; - private String errorMessage; - - @JsonIgnore - private String vorgangId; - @JsonIgnore - private String relationId; - - private String order; - - private RedirectRequest redirectRequest; - - private Map<String, ?> body; - - private String createdResource; - - @JsonIgnore - public CommandOrder getCommandOrder() { - return CommandOrder.fromOrder(order); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java deleted file mode 100644 index eff4c6d7cdb8e907412b0f9a98ac9c793cfdbc59..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonSubTypes.Type; - -import de.ozgcloud.alfa.aktenzeichen.AktenzeichenCommandBody; -import de.ozgcloud.alfa.bescheid.Bescheid; -import de.ozgcloud.alfa.bescheid.BescheidDocumentFromFileBody; -import de.ozgcloud.alfa.collaboration.CollaborationCommandBody; -import de.ozgcloud.alfa.kommentar.Kommentar; -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderung; -import de.ozgcloud.alfa.postfach.PostfachMail; -import de.ozgcloud.alfa.vorgang.AssignUserCommandBody; -import de.ozgcloud.alfa.vorgang.ProcessVorgangBody; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; - -@JsonSubTypes({ - @Type(value = PostfachMail.class, name = "SEND_POSTFACH_MAIL"), - @Type(value = PostfachMail.class, name = "SEND_POSTFACH_NACHRICHT"), - @Type(value = PostfachMail.class, name = "RESEND_POSTFACH_MAIL"), - @Type(value = AssignUserCommandBody.class, name = "ASSIGN_USER"), - @Type(value = RedirectRequest.class, name = "REDIRECT_VORGANG"), - @Type(value = Wiedervorlage.class, name = "CREATE_WIEDERVORLAGE"), - @Type(value = Wiedervorlage.class, name = "EDIT_WIEDERVORLAGE"), - @Type(value = Kommentar.class, name = "CREATE_KOMMENTAR"), - @Type(value = Kommentar.class, name = "EDIT_KOMMENTAR"), - @Type(value = LoeschAnforderung.class, name = "LOESCH_ANFORDERUNG"), - @Type(value = DeleteLoeschAnforderung.class, name = "DELETE_LOESCH_ANFORDERUNG"), - @Type(value = Bescheid.class, name = "CREATE_BESCHEID"), - @Type(value = Bescheid.class, name = "UPDATE_BESCHEID"), - @Type(value = ProcessVorgangBody.class, name = "PROCESS_VORGANG"), - @Type(value = AktenzeichenCommandBody.class, name = "SET_AKTENZEICHEN"), - @Type(value = BescheidDocumentFromFileBody.class, name = "CREATE_BESCHEID_DOCUMENT_FROM_FILE"), - @Type(value = CollaborationCommandBody.class, name = "CREATE_COLLABORATION_REQUEST"), - @Type(value = EmptyCommandBody.class, name="ARCHIVE_VORGANG") -}) -public interface CommandBody { -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBodyMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBodyMapper.java deleted file mode 100644 index 8080f4938b2dc3794bbc88bc75b9b9740531e460..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBodyMapper.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import org.apache.commons.beanutils.BeanMap; -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; - -import de.ozgcloud.vorgang.grpc.command.GrpcCommandBody; -import de.ozgcloud.vorgang.grpc.command.GrpcCommandBodyField; - -@Mapper -public interface CommandBodyMapper { - - final Predicate<Entry<Object, Object>> IS_NOT_CLASS_VALUE = entry -> !StringUtils.equals("class", entry.getKey().toString()); - final Predicate<Entry<Object, Object>> IS_NOT_VERSION_VALUE = entry -> !StringUtils.equals("version", entry.getKey().toString()); - - static final String VORGANG_ID_PROPERTY = "vorgangId"; - static final String ITEM_NAME_PROPERTY = "itemName"; - static final String ITEM_PROPERTY = "item"; - - default GrpcCommandBody mapToBody(Map<String, String> bodyMap) { - if (Objects.isNull(bodyMap)) { - return GrpcCommandBody.getDefaultInstance(); - } - - var builder = GrpcCommandBody.newBuilder(); - - bodyMap.entrySet().stream() - .filter(entry -> Objects.nonNull(entry.getValue())) - .map(entry -> GrpcCommandBodyField.newBuilder().setName(entry.getKey()).setValue(entry.getValue()).build()) - .forEach(builder::addField); - - return builder.build(); - } - - default List<GrpcCommandBodyField> mapToBodyFields(CommandBody body) { - if (Objects.isNull(body)) { - return Collections.emptyList(); - } - - return mapToBodyFields(new BeanMap(body)); - } - - default List<GrpcCommandBodyField> mapToBodyFields(Map<Object, Object> bodyMap) { - if (Objects.isNull(bodyMap)) { - return Collections.emptyList(); - } - - return bodyMap.entrySet().stream() - .filter(IS_NOT_CLASS_VALUE) - .map(this::buildBodyField) - .toList(); - } - - default GrpcCommandBodyField buildBodyField(Entry<Object, Object> entry) { - var bodyFieldMapper = GrpcCommandBodyField.newBuilder().setName(entry.getKey().toString()); - - if (Objects.nonNull(entry.getValue())) { - bodyFieldMapper.setValue(getNullableStringValue(entry.getValue())); - } - return bodyFieldMapper.build(); - } - - default String getNullableStringValue(Object entryValue) { - return Optional.ofNullable(entryValue).map(Object::toString).orElse(null); - } - - default Map<String, String> map(GrpcCommandBody body) { - return body.getFieldList().stream().collect(Collectors.toMap(GrpcCommandBodyField::getName, GrpcCommandBodyField::getValue)); - } - - default Map<String, Object> mapToBodyMap(CreateCommand command, String itemName) { - return Map.of( - VORGANG_ID_PROPERTY, command.getVorgangId(), - ITEM_NAME_PROPERTY, itemName, - ITEM_PROPERTY, fromObjectToMap(command.getBody())); - } - - @SuppressWarnings("unchecked") - public default Map<String, Object> fromObjectToMap(Object object) { - if (object instanceof Map<?, ?> objMap) { - return (Map<String, Object>) objMap; - } - - return new BeanMap(object).entrySet().stream() - .filter(IS_NOT_CLASS_VALUE) - .filter(IS_NOT_VERSION_VALUE) - .collect(HashMap::new, this::addToMap, Map::putAll); - } - - default void addToMap(Map<String, Object> map, Entry<Object, Object> entry) { - map.put(entry.getKey().toString(), getValue(entry.getValue())); - } - - default Object getValue(Object entryValue) { - return checkEnumValue(entryValue); - } - - private Object checkEnumValue(Object entryValue) { - if (entryValue instanceof Enum<?> enumValue) { - return enumValue.name(); - } - return entryValue; - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandController.java deleted file mode 100644 index 3313049164d450fc8e54746aaaa9c38426966b31..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandController.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(CommandController.COMMANDS_PATH) -@RequiredArgsConstructor -public class CommandController { - - public static final String COMMANDS_PATH = "/api/commands"; // NOSONAR - - static final String PARAM_PENDING = "pending"; - static final String PARAM_VORGANG_ID = "vorgangId"; - - private final CommandService service; - private final CommandModelAssembler modelAssembler; - - @GetMapping("{commandId}") - public EntityModel<Command> getById(@PathVariable String commandId) { - return modelAssembler.toModel(service.getById(commandId)); - } - - @PatchMapping("{commandId}") - public ResponseEntity<EntityModel<Command>> revoke(@PathVariable String commandId, @RequestBody StatusPatch patch) { - if (patch.getStatus() == CommandStatus.REVOKED) { - return ResponseEntity.ok(modelAssembler.toModel(service.revoke(commandId))); - } - return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); - } - - @GetMapping(params = { PARAM_PENDING, PARAM_VORGANG_ID }) - public CollectionModel<EntityModel<Command>> getPendingCommands(@RequestParam boolean pending, @RequestParam String vorgangId) { - return modelAssembler.toCollectionModel(service.getPendingCommands(vorgangId)); - } - - public boolean existsPendingCommands(String relationId) { - return service.existsPendingCommands(relationId); - } - - @RestController - @RequestMapping(CommandByRelationController.COMMAND_BY_RELATION_PATH) - @RequiredArgsConstructor - public static class CommandByRelationController { - - public static final String COMMAND_BY_RELATION_PATH = "/api/vorgangs/{vorgangId}/relations/{relationId}/{relationVersion}/commands"; // NOSONAR - - private final CommandService service; - - @PostMapping - public ResponseEntity<Void> createCommand(@PathVariable String vorgangId, @PathVariable String relationId, - @PathVariable long relationVersion, @RequestBody CreateCommand command) { - command = command.toBuilder().vorgangId(vorgangId).relationId(relationId).build(); - - var created = service.createCommand(command, relationVersion); - - return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build(); - } - - public Command createCommand(CreateCommand command) { - return service.createCommand(command); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandHelper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandHelper.java deleted file mode 100644 index d455f0428da9183934a771e6a662c0e322951205..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandHelper.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.function.Predicate; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class CommandHelper { - - static final Predicate<Command> IS_DONE = command -> command.getStatus() == CommandStatus.FINISHED - || command.getStatus() == CommandStatus.REVOKED || command.getStatus() == CommandStatus.ERROR; - - static final Predicate<Command> IS_PENDING = command -> command.getStatus() == CommandStatus.PENDING - || command.getStatus() == CommandStatus.REVOKE_PENDING; - - public static final Predicate<Command> IS_REVOKEABLE = command -> command.getCommandOrder().isRevokeable() - && command.getStatus() == CommandStatus.FINISHED; - - public static final Predicate<Command> IS_LOESCHANFORDERUNG = command -> command.getCommandOrder() == CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN - || command.getCommandOrder() == CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java deleted file mode 100644 index 7c81d4cb175a320df2fdb4fb9c7e49160b0d66de..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.Map; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingConstants; -import org.mapstruct.ValueMapping; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.alfa.common.TimeMapper; -import de.ozgcloud.alfa.common.callcontext.CallContextMapper; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest; - -@Mapper(uses = { CallContextMapper.class, TimeMapper.class, CommandBodyMapper.class, GrpcObjectMapper.class, UserIdMapper.class }) -public abstract class CommandMapper { - - @Autowired - private GrpcObjectMapper objectMapper; - @Autowired - private CommandBodyMapper bodyMapper; - - @ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL) - @ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL) - @Mapping(source = "orderString", target = "order") - @Mapping(target = "body", expression = "java(mapBody(grpcCommand))") - abstract Command toCommand(GrpcCommand grpcCommand); - - RedirectRequest mapRedirectRequest(GrpcRedirectRequest request) { - var builder = RedirectRequest.builder().email(request.getEmail()); - if (StringUtils.isNotEmpty(request.getPassword())) { - builder.password(request.getPassword().toCharArray()); - } - return builder.build(); - } - - Map<String, ?> mapBody(GrpcCommand command) { - var bodyObject = objectMapper.mapFromGrpc(command.getBodyObj()); - - if (MapUtils.isNotEmpty(bodyObject)) { - return bodyObject; - } else { - return bodyMapper.map(command.getBody()); - } - } - - String mapStringtoNull(String in) { - return StringUtils.trimToNull(in); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java deleted file mode 100644 index cd92b52eef33d5fdaf1d13075e77488304a370c4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.bescheid.BescheidController; -import de.ozgcloud.alfa.bescheid.DocumentController; -import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.kommentar.KommentarController; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController; - -@Component -class CommandModelAssembler implements RepresentationModelAssembler<Command, EntityModel<Command>> { - - static final LinkRelation REL_EFFECTED_RESOURCE = LinkRelation.of("effected_resource"); - static final LinkRelation REL_REVOKE = LinkRelation.of("revoke"); - static final LinkRelation REL_UPDATE = LinkRelation.of("update"); - - static final Predicate<Command> IS_NOT_LOESCH_ANFORDERUNG_AND_REVOKEABLE = command -> !CommandHelper.IS_LOESCHANFORDERUNG.test(command) - && CommandHelper.IS_REVOKEABLE.test(command); - - static final Predicate<Command> HAS_KNOWN_COMMAND_ORDER = command -> command.getCommandOrder() != CommandOrder.UNBEKANNT; - - @Override - public EntityModel<Command> toModel(Command command) { - return ModelBuilder.fromEntity(command) - .addLink(linkTo(CommandController.class).slash(command.getId()).withSelfRel()) - .ifMatch(CommandHelper.IS_DONE.and(HAS_KNOWN_COMMAND_ORDER)) - .addLink(() -> effectedResourceLinkByOrderType(command)) - .ifMatch(CommandHelper.IS_PENDING) - .addLink(() -> linkTo(CommandController.class).slash(command.getId()).withRel(REL_UPDATE)) - .ifMatch(IS_NOT_LOESCH_ANFORDERUNG_AND_REVOKEABLE) - .addLink(() -> linkTo(methodOn(CommandController.class).revoke(command.getId(), null)).withRel(REL_REVOKE)) - .buildModel(); - } - - Link effectedResourceLinkByOrderType(Command entity) { - var type = entity.getCommandOrder().getType(); - - WebMvcLinkBuilder linkBuilder = switch (type) { - case FORWARDING -> linkTo(methodOn(ForwardingController.class).findByVorgangId(entity.getVorgangId())); - case KOMMENTAR -> linkTo(KommentarController.class).slash(entity.getRelationId()); - case POSTFACH -> linkTo(methodOn(PostfachMailController.class).getAll(entity.getVorgangId())); - case VORGANG -> linkTo(VorgangController.class).slash(entity.getRelationId()); - case VORGANG_LIST -> linkTo(VorgangController.class); - case WIEDERVORLAGE -> linkTo(WiedervorlageController.class).slash(entity.getRelationId()); - case BESCHEID -> linkTo(methodOn(BescheidController.class).getDraft(entity.getVorgangId())); - case DOCUMENT -> linkTo(DocumentController.class).slash(entity.getCreatedResource()); - case COLLABORATION -> linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(entity.getVorgangId())); - case NONE -> throw new IllegalArgumentException("Unknown CommandOrder: " + entity.getOrder()); - }; - - return linkBuilder.withRel(REL_EFFECTED_RESOURCE); - } - - public CollectionModel<EntityModel<Command>> toCollectionModel(Stream<Command> entities) { - return CollectionModel.of(entities.map(this::toModel).toList(), linkTo(CommandController.class).withSelfRel()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java deleted file mode 100644 index 5e97b02673c16a2ada39fd7c79ee931507668d46..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import lombok.AccessLevel; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor(access = AccessLevel.PRIVATE) -@Getter -public enum CommandOrder { - - VORGANG_ANNEHMEN(true, Type.VORGANG), - VORGANG_VERWERFEN(true, Type.VORGANG), - VORGANG_ZURUECKHOLEN(true, Type.VORGANG), - VORGANG_BEARBEITEN(true, Type.VORGANG), - VORGANG_BESCHEIDEN(true, Type.VORGANG), - VORGANG_ZURUECKSTELLEN(true, Type.VORGANG), - VORGANG_ABSCHLIESSEN(true, Type.VORGANG), - VORGANG_WIEDEREROEFFNEN(true, Type.VORGANG), - - VORGANG_ZUM_LOESCHEN_MARKIEREN(true, Type.VORGANG), - VORGANG_LOESCHEN(false, Type.VORGANG_LIST), - LOESCH_ANFORDERUNG_ZURUECKNEHMEN(true, Type.VORGANG), - - ASSIGN_USER(false, Type.VORGANG), - - SET_AKTENZEICHEN(false, Type.VORGANG), - - REDIRECT_VORGANG(false, Type.FORWARDING), - FORWARD_SUCCESSFULL(false, Type.FORWARDING), - FORWARD_FAILED(false, Type.FORWARDING), - - @Deprecated - SEND_POSTFACH_MAIL(false, Type.POSTFACH), - SEND_POSTFACH_NACHRICHT(false, Type.POSTFACH), - RESEND_POSTFACH_MAIL(false, Type.POSTFACH), - RECEIVE_POSTFACH_NACHRICHT(false, Type.POSTFACH), - - CREATE_ATTACHED_ITEM(false, Type.VORGANG), - UPDATE_ATTACHED_ITEM(false, Type.VORGANG), - PATCH_ATTACHED_ITEM(false, Type.VORGANG), - DELETE_ATTACHED_ITEM(false, Type.VORGANG), - - CREATE_BESCHEID(false, Type.BESCHEID), - DELETE_BESCHEID(false, Type.VORGANG), - UPDATE_BESCHEID(false, Type.BESCHEID), - - CREATE_BESCHEID_DOCUMENT(false, Type.DOCUMENT), - CREATE_BESCHEID_DOCUMENT_FROM_FILE(false, Type.DOCUMENT), - SEND_BESCHEID(false, Type.BESCHEID), - - PROCESS_VORGANG(false, Type.VORGANG), - - CREATE_COLLABORATION_REQUEST(false, Type.COLLABORATION), - - UNBEKANNT(false, Type.NONE); - - enum Type { - VORGANG, VORGANG_LIST, WIEDERVORLAGE, KOMMENTAR, FORWARDING, POSTFACH, BESCHEID, DOCUMENT, COLLABORATION, NONE - } - - private final boolean revokeable; - @Getter(value = AccessLevel.PROTECTED) - private final Type type; - - public static CommandOrder fromOrder(String order) { - try { - return valueOf(order); - } catch (IllegalArgumentException e) { - return UNBEKANNT; - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java deleted file mode 100644 index 90a7dbe82cd63d41f3ef77e9143bfadf920c0ca9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.lang3.ArrayUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcExistsPendingCommandsRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcFindCommandsRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcRevokeCommandRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcSetCommandExecutedRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class CommandRemoteService { - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private CommandServiceBlockingStub commandServiceStub; - @Autowired - private CommandMapper mapper; - @Autowired - private CommandBodyMapper bodyMapper; - - @Autowired - private ContextService contextService; - - @Autowired - private GrpcObjectMapper objectMapper; - - public Command createCommand(CreateCommand command) { - var response = commandServiceStub.createCommand(buildCreateCommandRequest(command)); - - return mapper.toCommand(response.getCommand()); - } - - GrpcCreateCommandRequest buildCreateCommandRequest(CreateCommand command) { - var requestBuilder = GrpcCreateCommandRequest.newBuilder() - .setCallContext(contextService.createCallContext()) - .setVorgangId(command.getVorgangId()) - .setRelationId(command.getRelationId()) - .setRelationVersion(command.getRelationVersion()) - .setOrderString(command.getOrder()) - .addAllBody(bodyMapper.mapToBodyFields(command.getBody())) - .setBodyObj(objectMapper.fromMap(bodyMapper.fromObjectToMap(command.getBody()))); - - Optional.ofNullable(command.getRedirectRequest()).map(this::buildForwardRequest).ifPresent(requestBuilder::setRedirectRequest); - - return requestBuilder.build(); - } - - GrpcRedirectRequest buildForwardRequest(RedirectRequest forwardRequest) { - var builder = GrpcRedirectRequest.newBuilder().setEmail(forwardRequest.getEmail()); - if (ArrayUtils.isNotEmpty(forwardRequest.getPassword())) { - builder.setPassword(String.valueOf(forwardRequest.getPassword())); - } - return builder.build(); - } - - public Command revokeCommand(String commandId) { - var response = commandServiceStub.revokeCommand(createRevokeRequest(commandId)); - - return mapper.toCommand(response.getCommand()); - } - - GrpcRevokeCommandRequest createRevokeRequest(String commandId) { - return GrpcRevokeCommandRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setId(commandId) - .build(); - } - - public Command getCommand(String commandId) { - var response = commandServiceStub.getCommand(createGetCommandRequest(commandId)); - - return mapper.toCommand(response); - } - - GrpcGetCommandRequest createGetCommandRequest(String commandId) { - return GrpcGetCommandRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setId(commandId) - .build(); - } - - public boolean existsPendingCommands(String relationId) { - var response = commandServiceStub.existsPendingCommands(buildGrpcExistsPendingCommandsRequest(relationId)); - - return response.getExistsPendingCommands(); - } - - private GrpcExistsPendingCommandsRequest buildGrpcExistsPendingCommandsRequest(String relationId) { - return GrpcExistsPendingCommandsRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setVorgangId(relationId) - .build(); - } - - public Stream<Command> getPendingCommands(String vorgangId) { - var response = commandServiceStub.getPendingCommands(buildGrpcGetPendingCommandsRequest(vorgangId)); - - return response.getCommandList().stream().map(mapper::toCommand); - } - - private GrpcGetPendingCommandsRequest buildGrpcGetPendingCommandsRequest(String vorgangId) { - return GrpcGetPendingCommandsRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setVorgangId(vorgangId) - .build(); - } - - public Stream<Command> findCommands(String vorgangId, Optional<CommandStatus> status, Optional<String> order) { - var response = commandServiceStub.findCommands(buildFindCommandsRequest(vorgangId, status, order)); - - return response.getCommandList().stream().map(mapper::toCommand); - } - - private GrpcFindCommandsRequest buildFindCommandsRequest(String vorgangId, Optional<CommandStatus> status, Optional<String> order) { - var builder = GrpcFindCommandsRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setVorgangId(vorgangId); - - status.map(CommandStatus::name).ifPresent(builder::addStatus); - order.ifPresent(builder::setOrderString); - - return builder.build(); - } - - public void finishCommand(String commandId) { - commandServiceStub.setCommandExecuted(buildGrpcSetCommandExecutedRequest(commandId)); - } - - private GrpcSetCommandExecutedRequest buildGrpcSetCommandExecutedRequest(String commandId) { - return GrpcSetCommandExecutedRequest.newBuilder().setCommandId(commandId).build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java deleted file mode 100644 index d69ce0cab4116df915c76bbba5fd6a9122c0d4f1..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandService.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.Optional; -import java.util.stream.Stream; - -import jakarta.validation.Valid; - -import org.apache.commons.collections.MapUtils; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Validated -@Service -public class CommandService { - - static final long NO_RELATION_VERSION = -1; - - private final CommandRemoteService remoteService; - - /** - * @deprecated use {@link #createCommand(CreateCommand)} instead - */ - @Deprecated(since = "1.14.0", forRemoval = true) - public Command createCommandDeprecated(CreateCommand command) { - command = command.toBuilder().relationVersion(NO_RELATION_VERSION).build(); - - return remoteService.createCommand(command); - } - - public Command createCommand(@Valid CreateCommand command) { - return remoteService.createCommand(command); - } - - public Command createCommand(@Valid CreateCommand command, long relationVersion) { - command = command.toBuilder().relationVersion(relationVersion).build(); - - return remoteService.createCommand(command); - } - - public Command getById(String commandId) { - var command = remoteService.getCommand(commandId); - if (isDeleteLoeschAnforderung(command)) { - handleDeleteLoeschAnforderung(command); - } - return command; - } - - private boolean isDeleteLoeschAnforderung(Command command) { - return command.getCommandOrder() == CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN; - } - - void handleDeleteLoeschAnforderung(Command command) { - if (isDeleteAttachedItemCommandFinished(command) && isChangeStatusCommandFinished(command)) { - remoteService.finishCommand(command.getId()); - } - } - - boolean isDeleteAttachedItemCommandFinished(Command command) { - return isCommandFinished(MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD)); - } - - boolean isChangeStatusCommandFinished(Command command) { - return isCommandFinished(MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD)); - } - - private boolean isCommandFinished(String commandId) { - return remoteService.getCommand(commandId).getStatus() == CommandStatus.FINISHED; - } - - public Command revoke(String commandId) { - return remoteService.revokeCommand(commandId); - } - - public boolean existsPendingCommands(String relationId) { - return remoteService.existsPendingCommands(relationId); - } - - public Stream<Command> getPendingCommands(String vorgangId) { - return remoteService.getPendingCommands(vorgangId); - } - - public Stream<Command> findFinishedCommands(@NonNull String vorgangId) { - return remoteService.findCommands(vorgangId, Optional.of(CommandStatus.FINISHED), Optional.empty()); - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java deleted file mode 100644 index 1bc5744c87e09dbb4727d3613f8a9de267ef7cc6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandStatus.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -public enum CommandStatus { - PENDING, FINISHED, ERROR, REVOKE_PENDING, REVOKED; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java deleted file mode 100644 index 634746ff1f2f7bae267d4811b72d47860c540ba3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import jakarta.validation.Valid; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeInfo.As; -import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Builder(toBuilder = true) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class CreateCommand { - - @JsonIgnore - private UserId createdBy; - @JsonIgnore - private CommandStatus status; - - private String vorgangId; - private String relationId; - private long relationVersion; - - private String order; - - @Valid - private RedirectRequest redirectRequest; - - @Valid - @JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, property = "order") - private CommandBody body; - - @JsonIgnore - public CommandOrder getCommandOrder() { - return CommandOrder.fromOrder(order); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/EmptyCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/EmptyCommandBody.java deleted file mode 100644 index 3095c1084dc8e64355c1622e0db528fdac472657..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/EmptyCommandBody.java +++ /dev/null @@ -1,4 +0,0 @@ -package de.ozgcloud.alfa.common.command; - -class EmptyCommandBody implements CommandBody { -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/GenericCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/GenericCommandBody.java deleted file mode 100644 index 7556d145a3a831a936febb12e739a0d4377ce3d7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/GenericCommandBody.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.HashMap; - -class GenericCommandBody extends HashMap<String, Object> implements CommandBody { - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/LegacyOrder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/LegacyOrder.java deleted file mode 100644 index 0154e48c5b541bd898b81f417b12fb2858f4dc94..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/LegacyOrder.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.command; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class LegacyOrder { - public static final String CREATE_WIEDERVORLAGE = "CREATE_WIEDERVORLAGE"; - public static final String EDIT_WIEDERVORLAGE = "EDIT_WIEDERVORLAGE"; - public static final String WIEDERVORLAGE_ERLEDIGEN = "WIEDERVORLAGE_ERLEDIGEN"; - public static final String WIEDERVORLAGE_WIEDEREROEFFNEN = "WIEDERVORLAGE_WIEDEREROEFFNEN"; - public static final String CREATE_KOMMENTAR = "CREATE_KOMMENTAR"; - public static final String EDIT_KOMMENTAR = "EDIT_KOMMENTAR"; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/RequiredOrder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/RequiredOrder.java deleted file mode 100644 index 3dff456bb5948a0fbbd42d9aaca8d2fdc65f6238..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/RequiredOrder.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.*; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import jakarta.validation.Constraint; -import jakarta.validation.Payload; - -@Constraint(validatedBy = { RequiredOrderValidator.class }) -@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE }) -@Retention(RUNTIME) -@Documented -public @interface RequiredOrder { - - String message() default "invalid command order"; - - Class<?>[] groups() default {}; - - Class<? extends Payload>[] payload() default {}; - - CommandOrder value(); - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/RequiredOrderValidator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/RequiredOrderValidator.java deleted file mode 100644 index b074f0923dc5713c1ac61a0bdd0bc94c807dc4c2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/RequiredOrderValidator.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import jakarta.validation.ConstraintValidator; -import jakarta.validation.ConstraintValidatorContext; - -public class RequiredOrderValidator implements ConstraintValidator<RequiredOrder, CreateCommand> { - - private CommandOrder order; - - @Override - public void initialize(RequiredOrder constraintAnnotation) { - this.order = constraintAnnotation.value(); - } - - @Override - public boolean isValid(CreateCommand command, ConstraintValidatorContext constraintValidatorContext) { - return command.getCommandOrder() == order; - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/StatusPatch.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/StatusPatch.java deleted file mode 100644 index f9094b5ee42c35a87083ec34944010e1afcbc5fb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/StatusPatch.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@ToString -@Builder -@Getter -public class StatusPatch { - - private CommandStatus status; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilter.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilter.java deleted file mode 100644 index f407dfaa5d9b6fd55491e313133b31c48bfbc212..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilter.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import java.io.IOException; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -@Component -@Order(0) -public class DownloadTokenAuthenticationFilter extends OncePerRequestFilter { - @Autowired - private DownloadTokenService downloadTokenService; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - - try { - downloadTokenService.handleToken(request, getDownloadToken(request)); - } catch (TechnicalException e) { - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - return; - } - - filterChain.doFilter(request, response); - } - - @Override - protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { - return StringUtils.isEmpty(getDownloadToken(request)); - } - - private String getDownloadToken(HttpServletRequest request) { - return request.getParameter(DownloadTokenController.PARAM_TOKEN); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenController.java deleted file mode 100644 index bc81eb7a59e655db789d47370c1ca48c5ef5335f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenController.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.net.URI; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.binaryfile.FileId; - -@RestController -@RequestMapping(DownloadTokenController.DOWNLOAD_TOKEN_PATH) -public class DownloadTokenController { - - public static final String DOWNLOAD_TOKEN_PATH = "/api/downloadtoken"; // NOSONAR - - public static final String PARAM_TOKEN = "token"; - - @Autowired - private DownloadTokenService tokenService; - - @PostMapping - public ResponseEntity<Void> downloadToken(@RequestBody DownloadTokenRequest request) { - return ResponseEntity.created(buildUri(request.getFileId())).build(); - } - - private URI buildUri(FileId fileId) { - return linkTo(DownloadTokenController.class).toUriComponentsBuilder().queryParam(PARAM_TOKEN, tokenService.createToken(fileId)) - .build() - .toUri(); - } - - @GetMapping - public ResponseEntity<DownloadTokenResponse> getToken(@RequestParam String token) { - return ResponseEntity.ok(DownloadTokenResponse.builder().token(token).build()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenProperties.java deleted file mode 100644 index 1f2e0b6833010bcff85a2c89daa7b23266664db4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenProperties.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.validation.annotation.Validated; - -import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Validated -@Configuration -@ConfigurationProperties("ozgcloud.auth.token") -public class DownloadTokenProperties { - - @NotNull - private String secret; - @NotNull - private int validity; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenRequest.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenRequest.java deleted file mode 100644 index 720c091e63c8c897574785c49a7945de88cf1256..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenRequest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import lombok.Getter; - -@Getter -class DownloadTokenRequest { - - @LinkedResource(controllerClass = BinaryFileController.class) - private FileId fileId; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenResponse.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenResponse.java deleted file mode 100644 index 39a04ad288a1276fab51c53ffb8d2e99060c3388..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenResponse.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -class DownloadTokenResponse { - - private String token; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenService.java deleted file mode 100644 index e3a43569afdd7dfcd0cec1d64ba45dbe4d9118e0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenService.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static de.ozgcloud.alfa.JwtTokenUtil.*; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.stereotype.Service; - -import com.auth0.jwt.exceptions.JWTVerificationException; - -import de.ozgcloud.alfa.JwtTokenUtil; -import de.ozgcloud.alfa.common.binaryfile.AlfaUserWithFileId; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.common.errorhandling.TechnicalException; -import io.jsonwebtoken.Claims; -import jakarta.servlet.http.HttpServletRequest; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -class DownloadTokenService { - - @Autowired - private CurrentUserService userService; - - @Autowired - private JwtTokenUtil jwtTokenUtil; - - public String createToken(FileId fileId) { - var user = userService.getUser(); - return jwtTokenUtil.generateToken(fileId, user); - } - - public void handleToken(HttpServletRequest request, String token) { - if (StringUtils.isNotBlank(token)) { - try { - jwtTokenUtil.verifyToken(token); - - SecurityContextHolder.getContext().setAuthentication(buildAuthentication(request, token)); - } catch (JWTVerificationException e) { - LOG.error("JwtVerficationException in DownloadTokenService", e); - throw new TechnicalException("download token not valid", e); - } - } - } - - private Authentication buildAuthentication(HttpServletRequest request, String token) { - var user = getUserFromToken(token); - - var authenticationToken = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()); - authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - - return authenticationToken; - } - - AlfaUserWithFileId getUserFromToken(String token) { - Optional<Claims> claimsOptional = jwtTokenUtil.getAllClaimsFromToken(token); - var downloadUserBuilder = AlfaUserWithFileId.builder(); - claimsOptional.ifPresent(claims -> downloadUserBuilder.user( - UserProfile.builder() - .id(UserId.from(claims.get(USERID_CLAIM, String.class))) - .firstName(claims.get(FIRSTNAME_CLAIM, String.class)) - .lastName(claims.get(LASTNAME_CLAIM, String.class)) - .authorities(jwtTokenUtil.getRolesFromToken(token)) - .organisationseinheitIds(jwtTokenUtil.getOrganisationseinheitIdsFromToken(token)).build()) - .fileId(FileId.from(claims.get(FILEID_CLAIM, String.class)))); - - return downloadUserBuilder.build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ApiError.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ApiError.java deleted file mode 100644 index e863df60eec8e2d9498e11e54001d7806fbd8c35..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ApiError.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import java.util.List; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Getter -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -class ApiError { - - @Singular - private List<Issue> issues; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ExceptionController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ExceptionController.java deleted file mode 100644 index 4de36cf73523e005eeee3258235138bb55f256bc..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ExceptionController.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import java.util.UUID; - -import jakarta.validation.ConstraintViolationException; - -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpStatus; -import org.springframework.http.ProblemDetail; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import de.ozgcloud.common.errorhandling.ExceptionUtil; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@RestControllerAdvice -@RequiredArgsConstructor -@Log4j2 -@Order(98) -public class ExceptionController extends ResponseEntityExceptionHandler { - - static final String RUNTIME_MESSAGE_CODE = "generale.server_error"; - static final String RESOURCE_NOT_FOUNT_MESSAGE_CODE = "resource.not_found"; - static final String ACCESS_DENIED_MESSAGE_CODE = "generale.access_denied"; - - private final ProblemDetailMapper problemDetailMapper; - - @ExceptionHandler(FunctionalException.class) - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ApiError handleFunctionalException(FunctionalException e) { - LOG.error("BadRequest", e); - return ApiError.builder().issue(buildIssueForFunctionalException(e)).build(); - } - - private Issue buildIssueForFunctionalException(FunctionalException e) { - return Issue.builder().message(e.getMessage()).messageCode(e.getErrorCode()).exceptionId(e.getExceptionId()).build(); - } - - @ExceptionHandler(AccessDeniedException.class) - @ResponseStatus(HttpStatus.FORBIDDEN) - public ApiError handleAccessDeniedException(AccessDeniedException e) { - var exceptionId = createExceptionId(); - var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId); - LOG.error("Access Denied Exception: {}", messageWithExceptionId); - - return ApiError.builder().issue(buildIssueForAccessDeniedException(messageWithExceptionId, exceptionId)).build(); - } - - private Issue buildIssueForAccessDeniedException(String message, String exceptionId) { - return Issue.builder().messageCode(ACCESS_DENIED_MESSAGE_CODE).message(message).exceptionId(exceptionId).build(); - } - - @ExceptionHandler(ResourceNotFoundException.class) - @ResponseStatus(HttpStatus.NOT_FOUND) - public ApiError handleResourceNotFoundException(ResourceNotFoundException e) { - LOG.warn("Resource not found: {}", e.getMessage()); - return ApiError.builder().issue(buildIssueForResourceNotFoundException(e)).build(); - } - - private Issue buildIssueForResourceNotFoundException(ResourceNotFoundException e) { - return Issue.builder().message(e.getMessage()).messageCode(RESOURCE_NOT_FOUNT_MESSAGE_CODE).exceptionId(e.getExceptionId()).build(); - } - - @ExceptionHandler(ConstraintViolationException.class) - public ProblemDetail handleConstraintViolationException(ConstraintViolationException e) { - LOG.warn("Validation Exception: {}", problemDetailMapper.buildMessageWithExceptionId(e)); - - return problemDetailMapper.fromConstraintViolationException(e); - } - - @ExceptionHandler(TechnicalException.class) - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public ApiError handleTechnicalException(TechnicalException e) { - LOG.error("TechnicalException on Request", e); - return buildRuntimeApiError(e.getMessage(), e.getExceptionId()); - } - - @ExceptionHandler(RuntimeException.class) - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public ApiError handleRuntimeException(RuntimeException e) { - var exceptionId = createExceptionId(); - var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId); - LOG.error("RuntimeException on Request: " + messageWithExceptionId, e); - return buildRuntimeApiError(messageWithExceptionId, exceptionId); - } - - String createExceptionId() { - return UUID.randomUUID().toString(); - } - - private ApiError buildRuntimeApiError(String message, String exceptionId) { - return ApiError.builder().issue(createIssueForRuntimeException(message, exceptionId)).build(); - } - - private Issue createIssueForRuntimeException(String message, String exceptionId) { - return Issue.builder().messageCode(RUNTIME_MESSAGE_CODE).message(message).exceptionId(exceptionId).build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/FunctionalException.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/FunctionalException.java deleted file mode 100644 index 7765bda33648e679997afe631b8d58050119e543..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/FunctionalException.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import java.util.UUID; - -import de.ozgcloud.common.errorhandling.ExceptionUtil; -import de.ozgcloud.common.errorhandling.FunctionalErrorCode; -import de.ozgcloud.common.errorhandling.IdentifiableException; - -public class FunctionalException extends RuntimeException implements IdentifiableException { - - private static final long serialVersionUID = 1L; - - private final FunctionalErrorCode errorCode; - private final String exceptionId; - - public FunctionalException(FunctionalErrorCode errorCode) { - super("Functional error: " + errorCode.getErrorCode()); - - this.errorCode = errorCode; - this.exceptionId = UUID.randomUUID().toString(); - } - - public String getErrorCode() { - return errorCode.getErrorCode(); - } - - @Override - public String getMessage() { - return ExceptionUtil.formatMessageWithExceptionId(super.getMessage(), exceptionId); - } - - @Override - public String getExceptionId() { - return exceptionId; - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionController.java deleted file mode 100644 index 5ad57e05fe564b258da2151efd583dbd41b156ae..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionController.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; -import java.util.function.Predicate; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.core.annotation.Order; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.common.errorhandling.ExceptionUtil; -import de.ozgcloud.common.errorhandling.FunctionalErrorCode; -import io.grpc.Metadata; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; -import lombok.extern.log4j.Log4j2; - -@ControllerAdvice -@Log4j2 -@Order(97) -public class GrpcExceptionController { - - static final FunctionalErrorCode GRPC_NOT_FOUND_ERROR_CODE_KEY = () -> ExceptionController.RESOURCE_NOT_FOUNT_MESSAGE_CODE; - static final FunctionalErrorCode GRPC_INTERNAL_ERROR_CODE_KEY = () -> ExceptionController.RUNTIME_MESSAGE_CODE; - static final FunctionalErrorCode GRPC_PERMISSION_DENIED_CODE_KEY = () -> ExceptionController.ACCESS_DENIED_MESSAGE_CODE; - - static final String KEY_ERROR_CODE = "ERROR_CODE"; - static final String KEY_EXCEPTION_ID = "EXCEPTION_ID"; - - private final Predicate<String> ignoreKey = key -> !isErrorCode(key) && !isExceptionId(key); - - private boolean isErrorCode(String metadataKey) { - return isParamKeyEquals(metadataKey, KEY_ERROR_CODE); - } - - private boolean isExceptionId(String metadataKey) { - return isParamKeyEquals(metadataKey, KEY_EXCEPTION_ID); - } - - private boolean isParamKeyEquals(String metaDataKey, String key) { - return GrpcUtil.keyOfString(metaDataKey).equals(GrpcUtil.keyOfString(key)); - } - - @ExceptionHandler(StatusRuntimeException.class) - public ResponseEntity<ApiError> handleStatusRuntimeException(StatusRuntimeException e) { - if (isNotFoundStatusCode(e)) { - return buildNotFoundErrorResponse(e); - } else if (isInternalStatusCode(e)) { - return buildInternalErrorResponse(e); - } else if (isPermissionDeniedCode(e)) { - return buildAccessDeniedErrorResponse(e); - } - - return buildInternalUnavailableErrorResponse(e); - } - - private boolean isNotFoundStatusCode(StatusRuntimeException e) { - return e.getStatus().getCode() == Status.NOT_FOUND.getCode(); - } - - private ResponseEntity<ApiError> buildNotFoundErrorResponse(StatusRuntimeException e) { - LOG.error("Grpc not found exception: {}", e.getMessage()); - - Issue.IssueBuilder issueBuilder = Issue.builder().message(e.getMessage()).messageCode(GRPC_NOT_FOUND_ERROR_CODE_KEY.getErrorCode()); - addExceptionId(issueBuilder, e); - - return new ResponseEntity<>(buildApiErrorWithIssue(issueBuilder.build()), HttpStatus.NOT_FOUND); - } - - private ResponseEntity<ApiError> buildInternalUnavailableErrorResponse(StatusRuntimeException e) { - if (hasExceptionId(e)) { - return new ResponseEntity<>(buildInternalUnavailableApiError(e, getExceptionId(e)), HttpStatus.SERVICE_UNAVAILABLE); - } - - var exceptionId = createExceptionId(); - var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId); - LOG.error("Grpc service unavailable: {}", messageWithExceptionId); - - return new ResponseEntity<>(buildInternalUnavailableApiError(e, exceptionId), HttpStatus.SERVICE_UNAVAILABLE); - } - - String createExceptionId() { - return UUID.randomUUID().toString(); - } - - private ApiError buildInternalUnavailableApiError(StatusRuntimeException e, String exceptionId) { - return ApiError.builder().issue(Issue.builder().message(e.getMessage()).messageCode(getMessageCode(e)).exceptionId(exceptionId).build()) - .build(); - } - - private ResponseEntity<ApiError> buildInternalErrorResponse(StatusRuntimeException e) { - LOG.error("Grpc internal server error: " + e.getMessage(), e); - - return new ResponseEntity<>(buildInternalApiError(e), HttpStatus.INTERNAL_SERVER_ERROR); - } - - private boolean isInternalStatusCode(StatusRuntimeException e) { - return e.getStatus().getCode() == Status.INTERNAL.getCode(); - } - - private ApiError buildInternalApiError(StatusRuntimeException e) { - var issueBuilder = Issue.builder().message(e.getMessage()).messageCode(getMessageCode(e)); - - addParameter(issueBuilder, e); - addExceptionId(issueBuilder, e); - - return buildApiErrorWithIssue(issueBuilder.build()); - } - - String getMessageCode(StatusRuntimeException e) { - if (hasErrorCode(e)) { - return getErrorCode(e); - } - if (hasServiceCode(e)) { - return getServiceCode(e); - } - return GRPC_INTERNAL_ERROR_CODE_KEY.getErrorCode(); - } - - private boolean hasServiceCode(StatusRuntimeException e) { - return Optional.ofNullable(e.getTrailers()).map(metadata -> metadata.get(GrpcUtil.keyOfString(GrpcUtil.SERVICE_KEY))).isPresent(); - } - - private String getServiceCode(StatusRuntimeException e) { - return getParameter(e, GrpcUtil.SERVICE_KEY); - } - - private boolean hasErrorCode(StatusRuntimeException e) { - return hasParameter(e) && StringUtils.isNotEmpty(getErrorCode(e)); - } - - private ApiError buildApiErrorWithIssue(Issue issue) { - return ApiError.builder().issue(issue).build(); - } - - private boolean isPermissionDeniedCode(StatusRuntimeException e) { - return e.getStatus().getCode() == Status.PERMISSION_DENIED.getCode(); - } - - private ResponseEntity<ApiError> buildAccessDeniedErrorResponse(StatusRuntimeException e) { - var exceptionId = createExceptionId(); - var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId); - LOG.error("Grpc permission denied error: " + messageWithExceptionId); - - return new ResponseEntity<>(buildAccessDeniedApiError(e, exceptionId), HttpStatus.FORBIDDEN); - } - - private ApiError buildAccessDeniedApiError(StatusRuntimeException e, String exceptionId) { - return ApiError.builder() - .issue(Issue.builder().message(e.getMessage()).messageCode(GRPC_PERMISSION_DENIED_CODE_KEY.getErrorCode()).exceptionId(exceptionId) - .build()) - .build(); - } - - void addParameter(Issue.IssueBuilder builder, StatusRuntimeException e) { - if (hasParameter(e)) { - builder.parameters(mapToIssueParams(e.getTrailers())); - } - } - - List<IssueParam> mapToIssueParams(Metadata metaData) { - return metaData.keys().stream() - .filter(ignoreKey) - .map(key -> buildIssueParam(metaData, key)) - .toList(); - } - - private IssueParam buildIssueParam(Metadata metaData, String key) { - return IssueParam.builder().name(key).value(metaData.get(GrpcUtil.keyOfString(key))).build(); - } - - void addExceptionId(Issue.IssueBuilder builder, StatusRuntimeException e) { - if (hasExceptionId(e)) { - builder.exceptionId(getExceptionId(e)); - } - } - - private boolean hasExceptionId(StatusRuntimeException e) { - return hasParameter(e) && StringUtils.isNotEmpty(getExceptionId(e)); - } - - private boolean hasParameter(StatusRuntimeException e) { - return Objects.nonNull(e.getTrailers()); - } - - private String getExceptionId(StatusRuntimeException e) { - return getParameter(e, KEY_EXCEPTION_ID); - } - - private String getErrorCode(StatusRuntimeException e) { - return getParameter(e, KEY_ERROR_CODE); - } - - private String getParameter(StatusRuntimeException e, String metadataKey) { - return e.getTrailers().get(GrpcUtil.keyOfString(metadataKey)); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/Issue.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/Issue.java deleted file mode 100644 index 0308da5c60b0ccf194cf108a054827dfe038c28c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/Issue.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import java.util.List; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Singular; - -@Getter -@Builder -@NoArgsConstructor -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class Issue { - - private String field; - private String messageCode; - private String message; - private String exceptionId; - - @Singular - private List<IssueParam> parameters; - -} - -@Builder -@Getter -class IssueParam { - private String name; - private String value; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/OrderNotAllowedException.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/OrderNotAllowedException.java deleted file mode 100644 index 1d3c00bc0b0eb1729f64a2b19ef650c5ed71b07c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/OrderNotAllowedException.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import de.ozgcloud.common.errorhandling.FunctionalErrorCode; - -public class OrderNotAllowedException extends FunctionalException { - - private static final long serialVersionUID = 1L; - - private static final FunctionalErrorCode MESSAGE_CODE = () -> "loeschanforderung.order_not_allowed"; - private static final String MESSAGE_TEMPLATE = "Order '%s' is not allowed. Expected 'VORGANG_LOESCHEN or LOESCH_ANFORDERUNG_ZURUECKNEHMEN'."; - - private final String order; - - public OrderNotAllowedException(String order) { - super(MESSAGE_CODE); - - this.order = order; - } - - @Override - public String getMessage() { - return super.getMessage() + String.format(MESSAGE_TEMPLATE, order); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ProblemDetailMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ProblemDetailMapper.java deleted file mode 100644 index e90daa1f191c9a218f843803ce263b1d918f79c2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ProblemDetailMapper.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import java.util.Collections; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Stream; - -import jakarta.validation.ConstraintViolation; -import jakarta.validation.ConstraintViolationException; -import jakarta.validation.metadata.ConstraintDescriptor; - -import org.hibernate.validator.engine.HibernateConstraintViolation; -import org.springframework.http.HttpStatus; -import org.springframework.http.ProblemDetail; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.binaryfile.DynamicViolationParameter; -import de.ozgcloud.common.errorhandling.ExceptionUtil; - -@Component -public class ProblemDetailMapper { - - static final String INVALID_PARAMS_KEY_CONSTRAINT_PARAMETERS = "constraintParameters"; - static final String INVALID_PARAMS_KEY_REASON = "reason"; - static final String INVALID_PARAMS_KEY_VALUE = "value"; - static final String INVALID_PARAMS_KEY_NAME = "name"; - static final String INVALID_PARAMS = "invalidParams"; - static final String PROVIDED_VALUE_WAS_NULL = "Provided value was null!"; - private static final Set<String> IGNORABLE_CONSTRAINT_VIOLATION_ATTRIBUTES = Set.of("groups", "payload", "message"); - - public ProblemDetail fromConstraintViolationException(ConstraintViolationException e) { - var problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.UNPROCESSABLE_ENTITY, buildMessageWithExceptionId(e)); - problemDetail.setProperty(INVALID_PARAMS, buildInvalidParams(e.getConstraintViolations()).toList()); - return problemDetail; - } - - public String buildMessageWithExceptionId(ConstraintViolationException e) { - var exceptionId = createExceptionId(); - return ExceptionUtil.formatMessageWithExceptionId(e.getLocalizedMessage(), - exceptionId); - } - - String createExceptionId() { - return UUID.randomUUID().toString(); - } - - Stream<Map<String, Object>> buildInvalidParams(Set<ConstraintViolation<?>> violations) { - return Objects.requireNonNullElse(violations, Collections.<ConstraintViolation<?>>emptySet()).stream().map(this::buildDetailedViolation); - } - - Map<String, Object> buildDetailedViolation(ConstraintViolation<?> violation) { - return Map.of( - INVALID_PARAMS_KEY_NAME, violation.getPropertyPath().toString(), - INVALID_PARAMS_KEY_VALUE, Objects.requireNonNullElse(violation.getInvalidValue(), PROVIDED_VALUE_WAS_NULL).toString(), - INVALID_PARAMS_KEY_REASON, violation.getMessage(), - INVALID_PARAMS_KEY_CONSTRAINT_PARAMETERS, buildParameters(violation).toList()); - } - - Stream<IssueParam> buildParameters(ConstraintViolation<?> violation) { - var dynamicPayload = getDynamicPayload(violation); - return Optional.ofNullable(violation.getConstraintDescriptor()) - .map(ConstraintDescriptor::getAttributes) - .map(descr -> descr.entrySet().stream() - .filter(entry -> !IGNORABLE_CONSTRAINT_VIOLATION_ATTRIBUTES.contains(entry.getKey())) - .map(entryMap -> buildIssueParam(entryMap, dynamicPayload))) - .orElse(Stream.empty()); - } - - private IssueParam buildIssueParam(Entry<String, Object> entry, Optional<DynamicViolationParameter> dynamicValues) { - return IssueParam.builder().name(entry.getKey()).value(getValue(entry, dynamicValues)).build(); - } - - private String getValue(Entry<String, Object> entry, Optional<DynamicViolationParameter> dynamicValues) { - return dynamicValues - .map(DynamicViolationParameter::getMap) - .map(map -> map.get(entry.getKey())) - .filter(Objects::nonNull) - .map(String::valueOf) - .orElse(String.valueOf(entry.getValue())); - } - - private Optional<DynamicViolationParameter> getDynamicPayload(ConstraintViolation<?> violation) { - HibernateConstraintViolation<?> hibernateViolation = violation.unwrap(HibernateConstraintViolation.class); - return Optional.ofNullable(hibernateViolation.getDynamicPayload(DynamicViolationParameter.class)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ResourceNotFoundException.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ResourceNotFoundException.java deleted file mode 100644 index 6a7c08960bcc9896f865e59876aec92a5eba09d9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/errorhandling/ResourceNotFoundException.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import de.ozgcloud.common.errorhandling.FunctionalErrorCode; -import lombok.Getter; - -@Getter -public class ResourceNotFoundException extends FunctionalException { - - private static final long serialVersionUID = 1L; - private static final String MESSAGE_TEMPLATE = "Resource '%s' with id '%s' not found."; - - public ResourceNotFoundException(Class<?> resource, Object id) { - super(buildErrorCode(resource, id)); - } - - private static FunctionalErrorCode buildErrorCode(Class<?> resource, Object id) { - return () -> String.format(MESSAGE_TEMPLATE, resource.getSimpleName(), id.toString()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFile.java deleted file mode 100644 index 0ed45079511e2e3b1e415b496e817f6deb059276..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFile.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@Getter -@EqualsAndHashCode(onlyExplicitlyIncluded = true) -public class OzgFile { - - @JsonIgnore - @EqualsAndHashCode.Include - private FileId id; - @EqualsAndHashCode.Include - private String name; - private long size; - - private String contentType; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileMapper.java deleted file mode 100644 index 87f7411d607a0a02e6e9b2369c60b1cfd88b8ea9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileMapper.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import org.mapstruct.Mapper; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; - -@Mapper -public interface OzgFileMapper { - - OzgFile toFile(GrpcOzgFile file); - - default FileId toFileId(String id) { - return FileId.from(id); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java deleted file mode 100644 index 0badd5a7c055e5505013a9122e70f356eebec1ce..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileRemoteService.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.vorgang.grpc.file.FileServiceGrpc.FileServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest; -import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class OzgFileRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private FileServiceBlockingStub fileServiceStub; - @Autowired - private OzgFileMapper fileMapper; - - public Stream<OzgFile> getAttachments(String vorgangId) { - var response = fileServiceStub.getAttachments(buildGrpcGetAttachmentsRequest(vorgangId)); - - return response.getFileList().stream().map(fileMapper::toFile); - } - - private GrpcGetAttachmentsRequest buildGrpcGetAttachmentsRequest(String vorgangId) { - return GrpcGetAttachmentsRequest.newBuilder() - .setVorgangId(vorgangId) - .build(); - } - - public Stream<OzgFile> getRepresentations(String vorgangId) { - var response = fileServiceStub.getRepresentations(buildGrpcGetRepresentationsRequest(vorgangId)); - - return response.getFileList().stream().map(fileMapper::toFile); - } - - private GrpcGetRepresentationsRequest buildGrpcGetRepresentationsRequest(String vorgangId) { - return GrpcGetRepresentationsRequest.newBuilder() - .setVorgangId(vorgangId) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java deleted file mode 100644 index 1ffc0b5ff51e5b40a70e970ebde76b37d2ade980..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/file/OzgFileService.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class OzgFileService { - - @Autowired - private OzgFileRemoteService remoteService; - - public Stream<OzgFile> getAttachments(String vorgangId) { - return remoteService.getAttachments(vorgangId); - } - - public Stream<OzgFile> getRepresentations(String vorgangId) { - return remoteService.getRepresentations(vorgangId); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserHelper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserHelper.java deleted file mode 100644 index cbabea0188c4242f7f74d6b74b1fcab236b72e06..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserHelper.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Collection; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.security.authentication.AuthenticationTrustResolver; -import org.springframework.security.authentication.AuthenticationTrustResolverImpl; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.jwt.Jwt; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class CurrentUserHelper { - - static final String ROLE_PREFIX = "ROLE_"; - private static final String SUB_CLAIM_KEY = "sub"; - - private static final AuthenticationTrustResolver TRUST_RESOLVER = new AuthenticationTrustResolverImpl(); - private static final Predicate<Authentication> IS_TRUSTED = auth -> !TRUST_RESOLVER.isAnonymous(auth); - private static final Predicate<String> IS_ROLE_PREFIX_MISSING = role -> !role.startsWith(ROLE_PREFIX); - - public static boolean hasRole(String role) { - var auth = getAuthentication(); - - if ((Objects.isNull(auth)) || (Objects.isNull(auth.getPrincipal()))) { - return false; - } - return containsRole(auth.getAuthorities(), role); - } - - public static boolean containsRole(Collection<? extends GrantedAuthority> authorities, String role) { - if (Objects.isNull(authorities)) { - return false; - } - return containsRole(prepareRoleForCheck(role), authorities); - } - - static boolean containsRole(String role, Collection<? extends GrantedAuthority> authorities) { - return authorities.stream().anyMatch(a -> isAuthorityEquals(role, a.getAuthority())); - } - - private static boolean isAuthorityEquals(String role, String authority) { - return StringUtils.equalsIgnoreCase(role, authority) || StringUtils.equalsIgnoreCase(prepareRoleForCheck(role), authority); - } - - static String prepareRoleForCheck(String roleToCheck) { - return Optional.ofNullable(roleToCheck) - .filter(IS_ROLE_PREFIX_MISSING) - .map(role -> String.format("%s%s", ROLE_PREFIX, role)) - .orElse(roleToCheck); - } - - public static UserId getCurrentUserId() { - return UserId.from(getSubClaim()); - } - - private static String getSubClaim() { - return ((Jwt) getAuthentication().getPrincipal()).getClaim(SUB_CLAIM_KEY); - } - - public static Authentication getAuthentication() { - return findAuthentication().orElseThrow(() -> new IllegalStateException("No authenticated User found")); - } - - private static Optional<Authentication> findAuthentication() { - return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication()).filter(IS_TRUSTED); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java deleted file mode 100644 index dfc3a6d14f456420070eede9c6833e1d82eab4d9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import org.springframework.security.access.hierarchicalroles.RoleHierarchy; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.AlfaUserWithFileId; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -public class CurrentUserService { - - public static final String VERIFY_HAS_ROLE_VERWALTUNG_USER = "@currentUserService.hasRole(\"" + UserRole.VERWALTUNG_USER + "\")"; - public static final String VERIFY_HAS_ROLE_VERWALTUNG_LOESCHEN = "@currentUserService.hasRole(\"" + UserRole.VERWALTUNG_LOESCHEN + "\")"; - public static final String ATTRIBUTE_NAME_USER_ID = "ozgCloudUserId"; - - static final String USER_ATTRIBUTE_ORGANISATIONSEINHEIT_ID = "organisationseinheitId"; - - static final String KEYCLOAK_USER_PREFERRED_USERNAME = "preferred_username"; - static final String KEYCLOAK_USER_GIVEN_NAME = "given_name"; - static final String KEYCLOAK_USER_FAMILY_NAME = "family_name"; - - private final UserService userService; - - private final RoleHierarchy roleHierarchy; - - public boolean hasRole(String role) { - return CurrentUserHelper.hasRole(role) || hasRoleReachable(role); - } - - private boolean hasRoleReachable(String role) { - var reachableRoles = roleHierarchy.getReachableGrantedAuthorities(getAuthorities()); - - return CurrentUserHelper.containsRole(reachableRoles, role); - } - - public UserProfile getUser() { - return getDownloadUser().orElseGet(this::buildUserProfile); - } - - private UserProfile buildUserProfile() { - var userBuilder = UserProfile.builder() - .id(getUserId()) - .authorities(getAuthorities()); - - getCurrentSecurityToken().ifPresent(token -> userBuilder - .userName(token.getClaimAsString(KEYCLOAK_USER_PREFERRED_USERNAME)) - .firstName(token.getClaimAsString(KEYCLOAK_USER_GIVEN_NAME)) - .lastName(token.getClaimAsString(KEYCLOAK_USER_FAMILY_NAME)) - .organisationseinheitIds(getOrganisationsEinheitIds(token))); - - return userBuilder.build(); - } - - public Collection<GrantedAuthority> getAuthorities() { - return Collections.unmodifiableCollection(CurrentUserHelper.getAuthentication().getAuthorities()); - } - - public UserId getUserId() { - return findUserId() - .orElseThrow(() -> new TechnicalException("Cannot find internal UserId. Check sync with UserManager or Token Mapper in keycloak.")); - } - - public Optional<UserId> findUserId() { - return Optional.ofNullable(getSingleClaimValue(ATTRIBUTE_NAME_USER_ID) - .map(UserId::from) - .orElseGet(this::getInternalId)) - .filter(Objects::nonNull); - } - - private UserId getInternalId() { - return userService.getInternalId(CurrentUserHelper.getCurrentUserId()).orElse(null); - } - - List<String> getOrganisationsEinheitIds(Jwt jwt) { - return Optional.ofNullable(jwt) - .map(token -> token.getClaim(USER_ATTRIBUTE_ORGANISATIONSEINHEIT_ID)) - .map(col -> (Collection<?>) col).orElse(Collections.emptyList()) // NOSONAR - Collection.class::cast has type-safty issue - .stream().map(Object::toString).toList(); - } - - private Optional<UserProfile> getDownloadUser() { - return Optional.of(CurrentUserHelper.getAuthentication().getPrincipal()) - .filter(AlfaUserWithFileId.class::isInstance) - .map(AlfaUserWithFileId.class::cast) - .map(AlfaUserWithFileId::getUser); - } - - Optional<String> getSingleClaimValue(String attributeName) { - return getCurrentSecurityToken() - .map(token -> token.getClaim(attributeName)) - .map(String.class::cast); - } - - Optional<Jwt> getCurrentSecurityToken() { - var principal = CurrentUserHelper.getAuthentication().getPrincipal(); - - if (principal instanceof Jwt kcPrincipal) { - return Optional.of(kcPrincipal); - } - - return Optional.empty(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserCallContextAttachingInterceptor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserCallContextAttachingInterceptor.java deleted file mode 100644 index b5caec9b4c02590b3e7fdf8b3f33ba1c09a3843e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserCallContextAttachingInterceptor.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static de.ozgcloud.alfa.common.GrpcUtil.*; -import static de.ozgcloud.alfa.common.callcontext.ContextService.*; - -import java.util.Objects; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; - -import de.ozgcloud.alfa.RequestAttributes; -import io.grpc.CallOptions; -import io.grpc.Channel; -import io.grpc.ClientCall; -import io.grpc.ClientInterceptor; -import io.grpc.ForwardingClientCall.SimpleForwardingClientCall; -import io.grpc.Metadata; -import io.grpc.MethodDescriptor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -class UserCallContextAttachingInterceptor implements ClientInterceptor { - - @Autowired - private ApplicationContext context; - @Autowired(required = false) - private RequestAttributes reqAttributes; - - @Override - public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) { - return new CallContextAttachingClientCall<>(next.newCall(method, callOptions)); - } - - final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> { - - protected CallContextAttachingClientCall(ClientCall<A, B> delegate) { - super(delegate); - } - - @Override - public void start(Listener<B> responseListener, Metadata headers) { - headers.merge(buildCallContextWithoutUser()); - super.start(responseListener, headers); - } - - private Metadata buildCallContextWithoutUser() { - var metadata = new Metadata(); - - Optional.ofNullable(context.getId()).map(String::getBytes) - .ifPresentOrElse(bytes -> metadata.put(createKeyOf(KEY_CLIENT_NAME), bytes), () -> LOG.warn("Missing value 'client name'")); - - metadata.put(createKeyOf(KEY_REQUEST_ID), getRequestId().getBytes()); - - return metadata; - } - - private String getRequestId() { - return Objects.isNull(reqAttributes) ? "- no request scope -" : reqAttributes.getRequestId(); - } - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserConfiguration.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserConfiguration.java deleted file mode 100644 index b512ed63caf33170b7e7be2b1ac0cc1e5131ecc4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserConfiguration.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static de.ozgcloud.alfa.common.user.UserRole.*; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; -import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; -import org.springframework.security.access.hierarchicalroles.RoleHierarchy; -import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; - -import io.grpc.Channel; -import io.grpc.ManagedChannelBuilder; - -@Configuration -class UserConfiguration { - - @ConditionalOnProperty(name = "grpc.client.user-manager.address") - @Bean - Channel userManagerChannel(UserManagerClientProperties properties) { - var builder = ManagedChannelBuilder.forTarget(properties.getAddress()) - .intercept(userCallContextAttachingInterceptor()); - if (StringUtils.equalsIgnoreCase(properties.getNegotiationType(), "PLAINTEXT")) { - builder.usePlaintext(); - } - return builder.build(); - } - - @Bean - UserCallContextAttachingInterceptor userCallContextAttachingInterceptor() { - return new UserCallContextAttachingInterceptor(); - } - - @Bean - static RoleHierarchy roleHierarchy() { - var hierarchy = new RoleHierarchyImpl(); - hierarchy.setHierarchy(addRolePrefix(VERWALTUNG_LOESCHEN) + " > " + addRolePrefix(VERWALTUNG_USER)); - return hierarchy; - } - - private static String addRolePrefix(String roleName) { - return CurrentUserHelper.ROLE_PREFIX + roleName; - } - - @Bean - static MethodSecurityExpressionHandler methodSecurityExpressionHandler(RoleHierarchy roleHierarchy) { - DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); - expressionHandler.setRoleHierarchy(roleHierarchy); - return expressionHandler; - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserId.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserId.java deleted file mode 100644 index 83f96ffad874c2998c9f05bff974fe8c4af712c2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserId.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.UUID; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.AccessLevel; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PACKAGE) -@EqualsAndHashCode(callSuper = true) -public class UserId extends StringBasedValue { - - private static final long serialVersionUID = 1L; - - UserId(String userId) { - super(userId); - } - - public static UserId from(UUID userId) { - return UserId.from(userId.toString()); - } - - public static UserId from(String userId) { - return new UserId(userId); - } - - public static UserId empty() { - return new UserId(StringUtils.EMPTY); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserIdMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserIdMapper.java deleted file mode 100644 index 361f7e5b9b89143a5be159879a3c91ecdcba5938..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserIdMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; -import org.mapstruct.Mapper; - -@Mapper -public interface UserIdMapper { - - default UserId fromString(String userId) { - return Optional.ofNullable(StringUtils.trimToNull(userId)).map(UserId::from).orElse(null); - } - - default String toString(UserId userId) { - return userId == null ? null : userId.toString(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerClientProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerClientProperties.java deleted file mode 100644 index 65aba9f052e5e1da5d8b20160a04b30d72fb2ceb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerClientProperties.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = "grpc.client.user-manager") -public class UserManagerClientProperties { - - /** - * UserManager grpc adress. - */ - private String address; - - /** - * UserManager grpc negotiationType. - */ - private String negotiationType; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerProperties.java deleted file mode 100644 index 696818e32307e3f4172afd78f119df0737f51757..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerProperties.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties("ozgcloud.user-manager") -public class UserManagerProperties { - - private String url; - private String profileTemplate; - private String searchTemplate; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerUnavailableException.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerUnavailableException.java deleted file mode 100644 index 9b5be14c627fc6372c4ad68903853aa261db3400..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerUnavailableException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import de.ozgcloud.alfa.common.errorhandling.FunctionalException; -import de.ozgcloud.common.errorhandling.FunctionalErrorCode; - -public class UserManagerUnavailableException extends FunctionalException { - - private static final long serialVersionUID = 1L; - static final FunctionalErrorCode USER_MANAGER_UNAVAILABLE = () -> "general.service_unavailable.usermanager"; - - public UserManagerUnavailableException() { - super(USER_MANAGER_UNAVAILABLE); - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerUrlProvider.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerUrlProvider.java deleted file mode 100644 index 8777af4d2960ce65c5d956b663ab844da6ae8453..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserManagerUrlProvider.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.util.UriComponentsBuilder; - -import de.ozgcloud.alfa.postfach.PostfachMail; - -@Service -public class UserManagerUrlProvider { - - public static final String SYSTEM_USER_IDENTIFIER = "system"; - public static final Predicate<PostfachMail> SENT_BY_CLIENT_USER = postfachNachricht -> Optional.ofNullable(postfachNachricht.getCreatedBy()) - .map(createdBy -> !createdBy.toString().startsWith(SYSTEM_USER_IDENTIFIER)).orElse(false); - - @Autowired - private UserManagerProperties userManagerProperties; - - /** only for building links */ - public String getUserProfileTemplate() { - return userManagerProperties.getUrl() + userManagerProperties.getProfileTemplate(); - } - - public UriComponentsBuilder getSearchUserProfilesTemplate() { - return UriComponentsBuilder.fromUriString(userManagerProperties.getUrl() + userManagerProperties.getSearchTemplate()); - } - - public boolean isConfiguredForUserProfile() { - return StringUtils.isNotBlank(userManagerProperties.getUrl()) && StringUtils.isNotBlank(userManagerProperties.getProfileTemplate()); - } - - public boolean isConfiguredForSearchUserProfile() { - return StringUtils.isNotBlank(userManagerProperties.getUrl()) && StringUtils.isNotBlank(userManagerProperties.getSearchTemplate()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserProfile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserProfile.java deleted file mode 100644 index 4a8a00fedf69892452a71f1a2c93927f8a514d1d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserProfile.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Collection; -import java.util.Date; - -import org.springframework.security.core.GrantedAuthority; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Singular; - -@Builder -@Getter -@AllArgsConstructor -public class UserProfile { - - @JsonIgnore - private UserId id; - private String userName; - private String firstName; - private String lastName; - private Date createdAt; - - @Singular - private Collection<GrantedAuthority> authorities; - @Singular - private Collection<String> organisationseinheitIds; - - public String getFullName() { - return String.format("%s %s", firstName, lastName); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserProfileMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserProfileMapper.java deleted file mode 100644 index 7fe8161df72f321617101c26afa3135be7d2ac12..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserProfileMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import org.mapstruct.Mapper; - -import de.ozgcloud.user.userprofile.GrpcUserProfile; - -@Mapper -interface UserProfileMapper { - - UserProfile mapFrom(GrpcUserProfile userProfile); - - default UserId toUserId(String userId) { - return UserId.from(userId); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserRemoteService.java deleted file mode 100644 index 8af36fa806b2c17780e4ad58436e91a247515676..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserRemoteService.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; - -import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc; -import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc.UserProfileServiceBlockingStub; -import de.ozgcloud.user.userprofile.GrpcGetUserProfileRequest; -import io.grpc.Channel; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; -import lombok.extern.log4j.Log4j2; - -@ConditionalOnProperty(name = "grpc.client.user-manager.address") -@Log4j2 -@Service -class UserRemoteService { - - @Autowired - private Channel userManagerChannel; - - @Autowired - private UserProfileMapper mapper; - - public UserProfile getById(UserId id) { - var response = getUserProfileServiceStub().getById(buildRequest(id)); - return mapper.mapFrom(response.getUserProfile()); - } - - public Optional<UserProfile> getByExternalId(UserId externalUserId) { - try { - var response = getUserProfileServiceStub().getByExternalId(buildRequest(externalUserId)); - return Optional.of(mapper.mapFrom(response.getUserProfile())); - } catch (StatusRuntimeException e) { - if (isNotFound(e)) { - return Optional.empty(); - } - LOG.error("Error loading internal Userid.", e); - throw new UserManagerUnavailableException(); - } - } - - private GrpcGetUserProfileRequest buildRequest(UserId externalUserId) { - return GrpcGetUserProfileRequest.newBuilder().setUserId(externalUserId.toString()).build(); - } - - private boolean isNotFound(StatusRuntimeException e) { - return e.getStatus().getCode().value() == Status.NOT_FOUND.getCode().value(); - } - - UserProfileServiceBlockingStub getUserProfileServiceStub() { - return UserProfileServiceGrpc.newBlockingStub(userManagerChannel); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserRole.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserRole.java deleted file mode 100644 index eaf662a1662680ba29bffd73406511bdc4ccf961..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserRole.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class UserRole { - - public static final String EINHEITLICHER_ANSPRECHPARTNER = "EINHEITLICHER_ANSPRECHPARTNER"; - public static final String VERWALTUNG_LOESCHEN = "VERWALTUNG_LOESCHEN"; - public static final String VERWALTUNG_POSTSTELLE = "VERWALTUNG_POSTSTELLE"; - public static final String VERWALTUNG_USER = "VERWALTUNG_USER"; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserService.java deleted file mode 100644 index adbd01edfb8feb837dfd90bc18ea8fd73c784c86..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/UserService.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Objects; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import io.grpc.Status; -import io.grpc.StatusRuntimeException; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -public class UserService { - - @Autowired(required = false) - private UserRemoteService remoteService; - - public UserProfile getById(UserId userId) { - try { - return getUserRemoteService().getById(userId); - } catch (StatusRuntimeException e) { - if (isNotFound(e)) { - // TODO use optional, rename function to 'find...', move errorhandling to - // remoteService - return null; - } - LOG.error("Error on loading UserProfile from UserManager."); - throw new UserManagerUnavailableException(); - } - } - - private boolean isNotFound(StatusRuntimeException e) { - return e.getStatus().getCode().value() == Status.NOT_FOUND.getCode().value(); - } - - /** For package-internal use only */ - public Optional<UserId> getInternalId(UserId externalId) { - try { - return getUserRemoteService().getByExternalId(externalId).map(UserProfile::getId); - } catch (UserManagerUnavailableException e) { - return Optional.empty(); - } - } - - private UserRemoteService getUserRemoteService() { - if (Objects.nonNull(remoteService)) { - return remoteService; - } - LOG.warn("UserManager is not configured."); - throw new UserManagerUnavailableException(); - - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/zipdownload/ZipDownloadService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/zipdownload/ZipDownloadService.java deleted file mode 100644 index 11cc784f97b2dc4937fe06b3172fd865fb154466..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/zipdownload/ZipDownloadService.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.zipdownload; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.common.binaryfile.TempFileUtils; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class ZipDownloadService { - - private final BinaryFileService binaryFileService; - - public void write(List<OzgFile> ozgFiles, OutputStream out) { - writeZipFileContent(createZipFile(ozgFiles), out); - } - - File createZipFile(List<OzgFile> ozgFiles) { - var file = TempFileUtils.createTmpFile().toFile(); - try (var zipOutputStream = new ZipOutputStream(new FileOutputStream(file))) { - ozgFiles.forEach(ozgFile -> addOzgFileToZip(ozgFile, zipOutputStream)); - return file; - } catch (Exception e) { - throw new TechnicalException("Error creating zip file", e); - } - } - - void addOzgFileToZip(OzgFile ozgFile, ZipOutputStream zipOutputStream) { - try { - zipOutputStream.putNextEntry(new ZipEntry(ozgFile.getName())); - binaryFileService.writeFileContent(ozgFile.getId(), zipOutputStream); - zipOutputStream.closeEntry(); - } catch (IOException e) { - throw new TechnicalException("Cannot add file to ZIP.", e); - } - } - - void writeZipFileContent(File zipFile, OutputStream outputStream) { - try (var fileInputStream = new FileInputStream(zipFile)) { - fileInputStream.transferTo(outputStream); - } catch (Exception e) { - throw new TechnicalException("Error writing zip file to output stream", e); - } - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/DmsProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/DmsProperties.java deleted file mode 100644 index 9ec65379fa46462a9e3c9eab9fd84deeb2ce419a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/DmsProperties.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.ozgcloud.alfa.export; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties("ozgcloud.dms") -class DmsProperties { - - private boolean enabled; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportRemoteService.java deleted file mode 100644 index db442c3709b5b298c2c483c461abc2172a811313..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportRemoteService.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.archive.grpc.export.ExportServiceGrpc.ExportServiceBlockingStub; -import de.ozgcloud.archive.grpc.export.GrpcExportVorgangRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class ExportRemoteService { - - @GrpcClient(GrpcUtil.ARCHIVE_MANAGER_GRPC_CLIENT) - private ExportServiceBlockingStub exportServiceStub; - - public ExportedVorgangFile exportVorgang(String vorgangId) { - var responseIterator = exportServiceStub.exportVorgang(GrpcExportVorgangRequest.newBuilder().setVorgangId(vorgangId).build()); - return new StreamedExportedVorgangFile(responseIterator); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java deleted file mode 100644 index 8bf7bc9126858a8caef16cd33d47f3802c5248a0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(ExportVorgangController.PATH) -@RequiredArgsConstructor -public class ExportVorgangController { - - static final String PATH = "/api/vorgangs"; // NOSONAR - - private final ExportRemoteService exportRemoteService; - - @GetMapping(value = "{vorgangId}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) - public ResponseEntity<StreamingResponseBody> exportVorgang(@PathVariable String vorgangId) { - var exportedVorgangFile = exportRemoteService.exportVorgang(vorgangId); - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s", exportedVorgangFile.getFileName())) - .contentType(MediaType.APPLICATION_OCTET_STREAM) - .body(exportedVorgangFile::writeToOutputStream); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java deleted file mode 100644 index 33e5c38b351cb727281233dd7b9e9a26d88acc55..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; -import java.util.function.Predicate; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Component -class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - - private static final Predicate<VorgangWithEingang> IS_VORGANG_ABGESCHLOSSEN = vorgang -> vorgang.getStatus() == VorgangStatus.ABGESCHLOSSEN; - - static final LinkRelation REL_EXPORT = LinkRelation.of("export"); - static final LinkRelation REL_ARCHIVE = LinkRelation.of("archive"); - - private final DmsProperties dmsProperties; - private final VorgangController vorgangController; - - @Override - public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { - var vorgang = model.getContent(); - - if (Objects.isNull(vorgang)) { - return model; - } - - return ModelBuilder.fromModel(model) - .ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(vorgangController::isEditable)) - .addLink(linkTo(methodOn(ExportVorgangController.class).exportVorgang(vorgang.getId())).withRel(REL_EXPORT)) - .ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(isDmsEnabled()).and(vorgangController::isEditable)) - .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), - null)).withRel(REL_ARCHIVE)) - .buildModel(); - } - - private Predicate<VorgangWithEingang> isDmsEnabled() { - return vorgang -> dmsProperties.isEnabled(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportedVorgangFile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportedVorgangFile.java deleted file mode 100644 index be6c0d7c18f2e6c54787308264e8a2dd23481d68..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportedVorgangFile.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import java.io.IOException; -import java.io.OutputStream; - -interface ExportedVorgangFile { - - String getFileName(); - - void writeToOutputStream(OutputStream outputStream) throws IOException; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java deleted file mode 100644 index 255b971d7f6744b2a417ebb33d24539aceeecee1..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.Iterator; - -import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.Getter; - -class StreamedExportedVorgangFile implements ExportedVorgangFile { - - @Getter - private final String fileName; - private final Iterator<GrpcExportVorgangResponse> responseIterator; - - public StreamedExportedVorgangFile(Iterator<GrpcExportVorgangResponse> responseIterator) { - this.fileName = getFileNameFrom(responseIterator); - this.responseIterator = responseIterator; - } - - static String getFileNameFrom(Iterator<GrpcExportVorgangResponse> responseIterator) { - if (!responseIterator.hasNext()) { - throw new TechnicalException("Response is empty"); - } - return responseIterator.next().getVorgangFile().getFileName(); - } - - @Override - public void writeToOutputStream(OutputStream outputStream) throws IOException { - while (responseIterator.hasNext()) { - outputStream.write(responseIterator.next().getVorgangFile().getFileContent().toByteArray()); - } - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/Hint.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/Hint.java deleted file mode 100644 index f9b4ec41c69501f0f415b758fea5abb6e86a24c3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/Hint.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -class Hint { - - private String code; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintController.java deleted file mode 100644 index 36a4ff7339d41ad2aca4414295adb7ef87423b9f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintController.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping(HintController.PATH) -public class HintController { - - static final String PATH = "/api/hints"; // NOSONAR - - @Autowired - private HintService service; - @Autowired - private HintModelAssembler modelAssembler; - - @GetMapping - public CollectionModel<EntityModel<Hint>> getAll() { - return modelAssembler.toCollectionModel(service.findHints()); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java deleted file mode 100644 index f7639f549bba1143a6542cc19d3bcb46d98bb0af..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.List; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; - -@Component -class HintModelAssembler implements RepresentationModelAssembler<Hint, EntityModel<Hint>> { - - public CollectionModel<EntityModel<Hint>> toCollectionModel(List<Hint> entities) { - return CollectionModel.of(entities.stream().map(this::toModel).toList(), linkTo(HintController.class).withSelfRel()); - } - - @Override - public EntityModel<Hint> toModel(Hint hint) { - return ModelBuilder.fromEntity(hint).addLink(buildSelfLink(hint)).buildModel(); - } - - private Link buildSelfLink(Hint hint) { - return linkTo(HintController.class).slash(String.format("/%s", hint.getCode())).withSelfRel(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java deleted file mode 100644 index 651e14ef63583ef1e8b89d61bfa0cb4de7f22ba9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.hint; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.Root; -import de.ozgcloud.alfa.common.ModelBuilder; - -@Component -class HintRootResourceProcessor implements RepresentationModelProcessor<EntityModel<? extends Root>> { - - static final String HINTS_RELATION = "hints"; - - @Autowired - private HintService service; - - @Override - public EntityModel<? extends Root> process(EntityModel<? extends Root> model) { - return ModelBuilder.fromModel(model) - .ifMatch(service::hasHints) - .addLink(linkTo(HintController.class).withRel(HINTS_RELATION)) - .buildModel(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintService.java deleted file mode 100644 index e4e7dfa5020f63bdfecd3168f837772b8a09777b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintService.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; - -@Service -class HintService { - - static final String USER_NO_ORGANISATIONS_EINHEIT_ID_CODE = "user.no.organisationsEinheitId"; - - @Autowired - private CurrentUserService currentUserService; - - public boolean hasHints() { - return !findHints().isEmpty(); - } - - public List<Hint> findHints() { - var hints = new ArrayList<Hint>(); - - getHasUserNoOrganisationsEinheitIdHint().ifPresent(hints::add); - - return hints; - } - - Optional<Hint> getHasUserNoOrganisationsEinheitIdHint() { - if (getOrganisationsEinheitIds().isEmpty() && hasOrganisationsEinheitIdRequiredRole()) { - return Optional.of(buildUserNoOrganisationsEinheitIdHint()); - } - return Optional.empty(); - } - - private Hint buildUserNoOrganisationsEinheitIdHint() { - return Hint.builder().code(USER_NO_ORGANISATIONS_EINHEIT_ID_CODE).build(); - } - - Collection<String> getOrganisationsEinheitIds() { - return currentUserService.getUser().getOrganisationseinheitIds(); - } - - boolean hasOrganisationsEinheitIdRequiredRole() { - return !currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER) && !currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/AktenzeichenChangeHistoryBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/AktenzeichenChangeHistoryBuilder.java deleted file mode 100644 index 92c5615c58bde1ddf6c73456bd21d283e3515b65..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/AktenzeichenChangeHistoryBuilder.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class AktenzeichenChangeHistoryBuilder extends ChangeHistoryBuilder<AktenzeichenChangeHistoryBuilder> { - - static final String BODY_PROPERTY_AKTENZEICHEN = "aktenzeichen"; - - public static AktenzeichenChangeHistoryBuilder builder() { - return new AktenzeichenChangeHistoryBuilder(); - } - - @Override - boolean isRelevant(Command command) { - return command.getCommandOrder().equals(CommandOrder.SET_AKTENZEICHEN); - } - - @Override - CommandWithChangeValues toCommandWithChangeValues(CommandWithPrevious commandWithPrevious) { - return new CommandWithChangeValues( - commandWithPrevious.getCommand(), - getAktenzeichenBeforeChange(commandWithPrevious), - getAktenzeichenAfterChange(commandWithPrevious)); - } - - String getAktenzeichenBeforeChange(CommandWithPrevious commandWithPrevious) { - return Optional.ofNullable(commandWithPrevious.getPrevious()) - .map(this::getAktenzeichen) - .orElse(StringUtils.EMPTY); - } - - String getAktenzeichenAfterChange(CommandWithPrevious commandWithPrevious) { - return getAktenzeichen(commandWithPrevious.getCommand()); - } - - String getAktenzeichen(Command command) { - return getValueFromCommandBody(BODY_PROPERTY_AKTENZEICHEN, command); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/AssignedUserChangeHistoryBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/AssignedUserChangeHistoryBuilder.java deleted file mode 100644 index 89ede1f3abfeb489b5dbac97d84367db1effbd5f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/AssignedUserChangeHistoryBuilder.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.user.UserId; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class AssignedUserChangeHistoryBuilder extends ChangeHistoryBuilder<AssignedUserChangeHistoryBuilder> { - - static final String BODY_PROPERTY_ASSIGNED_USER = "assignedTo"; - - private UserProfileCache userProfileCache; - - public static AssignedUserChangeHistoryBuilder builder() { - return new AssignedUserChangeHistoryBuilder(); - } - - public AssignedUserChangeHistoryBuilder withUserProfileCache(UserProfileCache userProfileCache) { - this.userProfileCache = userProfileCache; - return this; - } - - @Override - boolean isRelevant(Command command) { - return command.getCommandOrder().equals(CommandOrder.ASSIGN_USER); - } - - @Override - CommandWithChangeValues toCommandWithChangeValues(CommandWithPrevious commandWithPrevious) { - return new CommandWithChangeValues( - commandWithPrevious.getCommand(), - getAssignedUserBeforeChange(commandWithPrevious), - getAssignedUserAfterChange(commandWithPrevious)); - } - - String getAssignedUserBeforeChange(CommandWithPrevious commandWithPrevious) { - return Optional.ofNullable(commandWithPrevious.getPrevious()) - .map(this::getAssignedUserFullNameFromCommand) - .orElse(StringUtils.EMPTY); - } - - String getAssignedUserAfterChange(CommandWithPrevious commandWithPrevious) { - return getAssignedUserFullNameFromCommand(commandWithPrevious.getCommand()); - } - - String getAssignedUserFullNameFromCommand(Command command) { - var assignedUserId = UserId.from(getValueFromCommandBody(BODY_PROPERTY_ASSIGNED_USER, command)); - return userProfileCache.getUserProfile(assignedUserId).getFullName(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/ChangeHistoryBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/ChangeHistoryBuilder.java deleted file mode 100644 index 15c36b91fecc98ea7754587cd12b10e0088dc3fa..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/ChangeHistoryBuilder.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.historie.CommandWithPrevious.CommandWithPreviousBuilder; - -abstract class ChangeHistoryBuilder<T extends ChangeHistoryBuilder<T>> { - - List<Command> commands; - String organisationseinheitenID; - - @SuppressWarnings("unchecked") - public T withCommands(List<Command> commands) { - this.commands = commands; - return (T) this; - } - - @SuppressWarnings("unchecked") - public T withOrganisationseinheitenID(String organisationseinheitenID) { - this.organisationseinheitenID = organisationseinheitenID; - return (T) this; - } - - public Stream<VorgangChange> build() { - return Stream.of(retrieveRelevantCommands()) - .map(this::inChronologicalOrder) - .map(this::addPreviousCommand) - .map(this::toCommandsWithChangeValues) - .flatMap(this::toVorgangChanges); - } - - Stream<Command> retrieveRelevantCommands() { - return commands.stream().filter(this::isRelevant); - } - - abstract boolean isRelevant(Command command); - - Stream<Command> inChronologicalOrder(Stream<Command> commands) { - return commands.sorted(Comparator.comparing(Command::getFinishedAt)); - } - - Stream<CommandWithPrevious> addPreviousCommand(Stream<Command> commands) { - var commandsList = commands.toList(); - var result = new ArrayList<CommandWithPrevious>(commandsList.size()); - for (int i = 0; i < commandsList.size(); i++) { - CommandWithPreviousBuilder builder = new CommandWithPreviousBuilder().command(commandsList.get(i)); - if (i > 0) { - builder.previous(commandsList.get(i - 1)); - } - result.add(builder.build()); - } - return result.stream(); - } - - Stream<CommandWithChangeValues> toCommandsWithChangeValues(Stream<CommandWithPrevious> commands) { - return commands.map(this::toCommandWithChangeValues); - } - - abstract CommandWithChangeValues toCommandWithChangeValues(CommandWithPrevious commandWithPrevious); - - Stream<VorgangChange> toVorgangChanges(Stream<CommandWithChangeValues> commandsWithChangeValues) { - return commandsWithChangeValues.map(this::toVorgangChange); - } - - VorgangChange toVorgangChange(CommandWithChangeValues commandChangeValues) { - return VorgangChange.builder() - .valueBeforeChange(commandChangeValues.valueBeforeChange()) - .valueAfterChange(commandChangeValues.valueAfterChange()) - .authorFullName(commandChangeValues.command().getCreatedByName()) - .finishedAt(commandChangeValues.command().getFinishedAt()) - .order(commandChangeValues.command().getOrder()) - .organisationseinheitenID(organisationseinheitenID) - .build(); - } - - String getValueFromCommandBody(String propertyName, Command command) { - return Optional.ofNullable(command.getBody()).map(body -> body.get(propertyName)).map(Object::toString).orElse(StringUtils.EMPTY); - } - - record CommandWithChangeValues(Command command, String valueBeforeChange, String valueAfterChange) { - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/CommandWithPrevious.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/CommandWithPrevious.java deleted file mode 100644 index bc24c2284bf105e4bd923ee56ccc64a4dfb3f2d5..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/CommandWithPrevious.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import de.ozgcloud.alfa.common.command.Command; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder(toBuilder = true) -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -class CommandWithPrevious { - - private Command command; - private Command previous; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java deleted file mode 100644 index 3da6312c0c7c5787c74fad6a9ba7270db2e15c52..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.Map; -import java.util.Optional; -import java.util.function.Predicate; - -import org.apache.commons.collections.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandBodyMapper; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandStatus; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.kommentar.Kommentar; -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; - -/** - * Bitte zukuenftig als Implementierung von {@link HistorieProcessor} in den - * jeweiligen fachlichen packages umsetzen. - * - * TODO: Aktuellen Code auf Processoren umstellen - */ -@Component -class HistorieCommandHandler { - - static final String DIRECTION_INCOMMING = "IN"; - static final String DIRECTION_OUTGOING = "OUT"; - static final String DIRECTION = "direction"; - static final String OZGCLOUD_NACHRICHTEN_MANAGER = "OzgCloud_NachrichtenManager"; - static final String CLIENT = "client"; - - private static final Predicate<Command> IS_CREATE_ATTACHED_ITEM = command -> command.getCommandOrder() == CommandOrder.CREATE_ATTACHED_ITEM; - - @Autowired - private VorgangAttachedItemService vorgangAttachedItemService; - - @Autowired - private CommandService commandService; - - public boolean isHistorieCommand(Command command) { - return !isOutgoingPostfachNachrichtByOzgCloudNachrichtenManager(command) - && !isCreateLoeschAnforderungVorgangAttachedItem(command) - && !isLoeschAnforderungZuruecknehmenRevoked(command) - && !isDeleteVorgangAttachedItem(command); - } - - boolean isOutgoingPostfachNachrichtByOzgCloudNachrichtenManager(Command command) { - return command.getCommandOrder().equals(CommandOrder.CREATE_ATTACHED_ITEM) && isOzgCloudNachrichtenManager(command) && isOutgoing(command); - } - - private boolean isOzgCloudNachrichtenManager(Command command) { - return StringUtils.equals(MapUtils.getString(command.getBody(), CLIENT), OZGCLOUD_NACHRICHTEN_MANAGER); - } - - private boolean isOutgoing(Command command) { - return isDirection(command, DIRECTION_OUTGOING); - } - - boolean isCreateLoeschAnforderungVorgangAttachedItem(Command command) { - return Optional.of(command) - .filter(IS_CREATE_ATTACHED_ITEM) - .map(Command::getBody) - .map(bodyMap -> MapUtils.getString(bodyMap, VorgangAttachedItem.FIELD_ITEM_NAME)) - .map(vorgangAttachedItemService::isLoeschAnforderung) - .orElse(false); - } - - boolean isLoeschAnforderungZuruecknehmenRevoked(Command command) { - if (command.getCommandOrder() != CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN) { - return false; - } - var changeStatusCommand = commandService.getById(getChangeStatusCommandId(command)); - return changeStatusCommand.getStatus() == CommandStatus.REVOKED; - } - - private String getChangeStatusCommandId(Command command) { - return MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD); - } - - boolean isDeleteVorgangAttachedItem(Command command) { - return command.getCommandOrder() == CommandOrder.DELETE_ATTACHED_ITEM; - } - - public Command translateOrder(Command command) { - HistorieCommandHandler translator = new HistorieCommandHandler(); - return switch (command.getCommandOrder()) { - case CREATE_ATTACHED_ITEM: - yield translator.mapCreateOrder(command); - case UPDATE_ATTACHED_ITEM: - yield translator.mapUpdateOrder(command); - case PATCH_ATTACHED_ITEM: - yield translator.mapPatchOrder(command); - case SEND_POSTFACH_MAIL: - yield command.toBuilder().order(CommandOrder.SEND_POSTFACH_NACHRICHT.name()).build(); - default: - yield command; - }; - } - - private Command mapCreateOrder(Command command) { - var resultBuilder = command.toBuilder(); - var itemName = getItemName(command); - - itemName.ifPresent(name -> { - if (name.equals(Kommentar.class.getSimpleName())) { - resultBuilder.order(LegacyOrder.CREATE_KOMMENTAR).build(); - } else if (name.equals(Wiedervorlage.class.getSimpleName())) { - resultBuilder.order(LegacyOrder.CREATE_WIEDERVORLAGE).build(); - } else if (isOzgCloudNachrichtenManager(command) && isIncomming(command)) { - resultBuilder.order(CommandOrder.RECEIVE_POSTFACH_NACHRICHT.name()).build(); - } - }); - - return resultBuilder.build(); - } - - private boolean isIncomming(Command command) { - return isDirection(command, DIRECTION_INCOMMING); - } - - private boolean isDirection(Command command, String expectedDirection) { - return StringUtils.equals(MapUtils.getString(getItemMap(command), DIRECTION), expectedDirection); - } - - private Command mapUpdateOrder(Command command) { - var resultBuilder = command.toBuilder(); - var itemName = getItemName(command); - - itemName.ifPresent(name -> { - if (name.equals(Kommentar.class.getSimpleName())) { - resultBuilder.order(LegacyOrder.EDIT_KOMMENTAR).build(); - } else if (name.equals(Wiedervorlage.class.getSimpleName())) { - resultBuilder.order(LegacyOrder.EDIT_WIEDERVORLAGE).build(); - } - }); - - return resultBuilder.build(); - } - - private Optional<String> getItemName(Command command) { - return Optional.ofNullable(MapUtils.getString(command.getBody(), CommandBodyMapper.ITEM_NAME_PROPERTY)); - } - - private Command mapPatchOrder(Command command) { - var resultBuilder = command.toBuilder(); - var isDone = getDoneValue(command); - - isDone.ifPresent(done -> { - if (done.booleanValue()) { - resultBuilder.order(LegacyOrder.WIEDERVORLAGE_ERLEDIGEN).build(); - } else { - resultBuilder.order(LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN).build(); - } - }); - - return resultBuilder.build(); - } - - private Optional<Boolean> getDoneValue(Command command) { - return Optional.ofNullable(MapUtils.getBoolean(getItemMap(command), Wiedervorlage.DONE_FIELD)); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getItemMap(Command command) { - return MapUtils.getMap(command.getBody(), CommandBodyMapper.ITEM_PROPERTY); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieController.java deleted file mode 100644 index cc355b033ef5c0787054fd68aa163ae30205c0fb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieController.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.command.Command; - -@RestController -@RequestMapping(HistorieController.PATH) -public class HistorieController { - - static final String PATH = "/api/histories"; // NOSONAR - static final String PARAM_VORGANG_ID = "vorgangId"; - - @Autowired - private HistorieService historieService; - - @Autowired - private HistorieModelAssembler modelAssembler; - - @GetMapping(params = PARAM_VORGANG_ID) - public CollectionModel<EntityModel<Command>> getAll(@RequestParam String vorgangId) { - return modelAssembler.toCollectionModel(historieService.findFinishedCommands(vorgangId)); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java deleted file mode 100644 index b3d974cdfde016189d2218ac258a6fac361be750..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; - -@Component -class HistorieModelAssembler implements RepresentationModelAssembler<Command, EntityModel<Command>> { - static final String SYSTEM_NOTIFICATION_MANAGER_PREFIX = "system-notification_manager"; - - static final String REL_ASSIGNED_TO = "assignedTo"; - - static final String ASSIGNED_TO_BODY_FIELD = "assignedTo"; - - @Autowired - private UserManagerUrlProvider userManagerUrlProvider; - - @Override - public EntityModel<Command> toModel(Command entity) { - var cleanCommand = unsetSystemUser(entity); - var modelBuilder = ModelBuilder.fromEntity(cleanCommand).addLink(linkTo(HistorieController.class).slash(cleanCommand.getId()).withSelfRel()); - - addAssignedTo(cleanCommand, modelBuilder); - - return modelBuilder.buildModel(); - } - - Command unsetSystemUser(Command entity) { - if (isSystemNotificationUser(entity)) { - return entity.toBuilder().createdBy(null).build(); - } - - return entity; - } - - private boolean isSystemNotificationUser(Command entity) { - return Objects.nonNull(entity.getCreatedBy()) && entity.getCreatedBy().toString().startsWith(SYSTEM_NOTIFICATION_MANAGER_PREFIX); - } - - private void addAssignedTo(Command entity, ModelBuilder<Command> modelBuilder) { - Optional.ofNullable(entity.getBody()).map(body -> body.get(ASSIGNED_TO_BODY_FIELD)) - .ifPresent(assignedTo -> { - if (userManagerUrlProvider.isConfiguredForUserProfile()) { - modelBuilder.addLink(Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), assignedTo), REL_ASSIGNED_TO)); - } - }); - } - - public CollectionModel<EntityModel<Command>> toCollectionModel(Stream<Command> entities) { - return CollectionModel.of(entities.map(this::toModel).toList(), linkTo(HistorieController.class).withSelfRel()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieProcessor.java deleted file mode 100644 index e28cb6a96dcc9748fafd419e0acd4e5ec6b7e815..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieProcessor.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.List; - -import de.ozgcloud.alfa.common.command.Command; - -public interface HistorieProcessor { - - List<Command> process(List<Command> commands); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieService.java deleted file mode 100644 index 28cf9b859c1b07fb16971ac69715067da0872691..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieService.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Stream; - -import org.apache.commons.collections.MapUtils; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -class HistorieService { - - private final CommandService commandService; - private final HistorieCommandHandler historieCommandHandler; - private final List<HistorieProcessor> processors; - - public Stream<Command> findFinishedCommands(String vorgangId) { - var reduceBy = new HashSet<String>(); - var commands = commandService.findFinishedCommands(vorgangId) - .filter(historieCommandHandler::isHistorieCommand) - .map(command -> considerReduceByIds(reduceBy, command)) - .map(historieCommandHandler::translateOrder).toList(); - - commands = commands.stream().filter(command -> !reduceBy.contains(command.getId())) - .toList(); - return processCommands(commands); - } - - private Stream<Command> processCommands(List<Command> commands) { - return new CommandHistorieProcessor().process(commands).stream(); - } - - class CommandHistorieProcessor { - private List<Command> processedCommands; - - public List<Command> process(List<Command> commands) { - processedCommands = commands; - processors.forEach(processor -> processedCommands = processor.process(processedCommands)); - return processedCommands; - } - } - - private Command considerReduceByIds(Set<String> reduceBy, Command command) { - if (isLoeschAnforderungZuruecknehmenCommand(command)) { - reduceBy.addAll(getCommandBodyIds(command)); - } - return command; - } - - private boolean isLoeschAnforderungZuruecknehmenCommand(Command command) { - return command.getCommandOrder() == CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN; - } - - private Set<String> getCommandBodyIds(Command command) { - return Set.of(getDeleteAttachedItemCommandId(command), getChangeStatusCommandId(command)); - } - - private String getDeleteAttachedItemCommandId(Command command) { - return MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD); - } - - private String getChangeStatusCommandId(Command command) { - return MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/StatusChangeHistoryBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/StatusChangeHistoryBuilder.java deleted file mode 100644 index 5c2cef4d06968ad08f14dbe239f2b7d57d242cc4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/StatusChangeHistoryBuilder.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class StatusChangeHistoryBuilder extends ChangeHistoryBuilder<StatusChangeHistoryBuilder> { - - static final String GELOESCHT_NAME = "Gelöscht"; - static final Map<VorgangStatus, String> VORGANG_STATUS_TO_NAME = Map.of( - VorgangStatus.NEU, "Neu", - VorgangStatus.ANGENOMMEN, "Angenommen", - VorgangStatus.VERWORFEN, "Verworfen", - VorgangStatus.IN_BEARBEITUNG, "In Bearbeitung", - VorgangStatus.BESCHIEDEN, "Beschieden", - VorgangStatus.ABGESCHLOSSEN, "Abgeschlossen", - VorgangStatus.WEITERGELEITET, "Weitergeleitet", - VorgangStatus.ZU_LOESCHEN, "Zu Löschen"); - static final Set<CommandOrder> STATUS_CHANGE_COMMAND_ORDER = Set.of( - CommandOrder.VORGANG_ANNEHMEN, - CommandOrder.VORGANG_VERWERFEN, - CommandOrder.VORGANG_ZURUECKHOLEN, - CommandOrder.VORGANG_BEARBEITEN, - CommandOrder.VORGANG_BESCHEIDEN, - CommandOrder.VORGANG_ABSCHLIESSEN, - CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN, - CommandOrder.VORGANG_WIEDEREROEFFNEN, - CommandOrder.VORGANG_LOESCHEN, - CommandOrder.VORGANG_ZURUECKSTELLEN); - - public static StatusChangeHistoryBuilder builder() { - return new StatusChangeHistoryBuilder(); - } - - @Override - boolean isRelevant(Command command) { - return STATUS_CHANGE_COMMAND_ORDER.contains(command.getCommandOrder()); - } - - @Override - CommandWithChangeValues toCommandWithChangeValues(CommandWithPrevious commandWithPrevious) { - return new CommandWithChangeValues(commandWithPrevious.getCommand(), - getStatusBeforeChange(commandWithPrevious), - getStatusAfterChange(commandWithPrevious)); - } - - String getStatusBeforeChange(CommandWithPrevious commandWithPrevious) { - return Optional.ofNullable(commandWithPrevious.getPrevious()) - .map(this::getStatus) - .orElse(VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU)); - } - - String getStatusAfterChange(CommandWithPrevious commandWithPrevious) { - return getStatus(commandWithPrevious.getCommand()); - } - - String getStatus(Command command) { - return switch (command.getCommandOrder()) { - case VORGANG_ANNEHMEN, VORGANG_ZURUECKSTELLEN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.ANGENOMMEN); - case VORGANG_VERWERFEN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN); - case VORGANG_ZURUECKHOLEN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU); - case VORGANG_BEARBEITEN, VORGANG_WIEDEREROEFFNEN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.IN_BEARBEITUNG); - case VORGANG_BESCHEIDEN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.BESCHIEDEN); - case VORGANG_ABSCHLIESSEN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.ABGESCHLOSSEN); - case VORGANG_ZUM_LOESCHEN_MARKIEREN -> VORGANG_STATUS_TO_NAME.get(VorgangStatus.ZU_LOESCHEN); - case VORGANG_LOESCHEN -> GELOESCHT_NAME; - default -> throw new IllegalArgumentException("Unexpected or unknown command order " + command.getOrder()); - }; - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/UserProfileCache.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/UserProfileCache.java deleted file mode 100644 index 1358169db20563cbf7814fedbed40c265b8945be..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/UserProfileCache.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor(access = AccessLevel.PRIVATE) -class UserProfileCache { - - private final Function<UserId, UserProfile> findUserProfileForUserId; - - private final Map<UserId, UserProfile> cache = new HashMap<>(); - - public static UserProfileCache create(Function<UserId, UserProfile> findUserProfileForUserId) { - return new UserProfileCache(findUserProfileForUserId); - } - - public UserProfile getUserProfile(UserId userId) { - if (!cache.containsKey(userId)) { - findAndAddToCache(userId); - } - return cache.get(userId); - } - - private void findAndAddToCache(UserId userId) { - var userProfile = findUserProfileForUserId.apply(userId); - if (userProfile == null) { - throw new TechnicalException("UserProfile not found for user with ID " + userId); - } - cache.put(userId, userProfile); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChange.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChange.java deleted file mode 100644 index 51f570e14b89bef0b4ec4b45f87f295e65609aab..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChange.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.time.ZonedDateTime; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder(toBuilder = true) -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class VorgangChange { - - private String valueBeforeChange; - private String valueAfterChange; - private String authorFullName; - private ZonedDateTime finishedAt; - private String order; - private String organisationseinheitenID; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChangeHistory.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChangeHistory.java deleted file mode 100644 index 414e7f46e74d6a6221b1dc1be887730b23a4cff5..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChangeHistory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.List; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Builder(toBuilder = true) -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class VorgangChangeHistory { - - private List<VorgangChange> statusChangeHistory; - private List<VorgangChange> aktenzeichenChangeHistory; - private List<VorgangChange> assignedUserChangeHistory; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryService.java deleted file mode 100644 index 15b6a7374468900ae1b2acd249354726e0102fef..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryService.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.List; -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@Service -@RequiredArgsConstructor -public class VorgangChangeHistoryService { - - private final UserService userService; - private final CommandService commandService; - - public VorgangChangeHistory createVorgangChangeHistory(VorgangWithEingang vorgang) { - var commands = commandService.findFinishedCommands(vorgang.getId()).toList(); - return VorgangChangeHistory.builder() - .statusChangeHistory(createStatusChangeHistory(vorgang, commands).toList()) - .aktenzeichenChangeHistory(createAktenzeichenChangeHistory(vorgang, commands).toList()) - .assignedUserChangeHistory(createAssignedUserChangeHistory(vorgang, commands).toList()) - .build(); - } - - Stream<VorgangChange> createStatusChangeHistory(VorgangWithEingang vorgang, List<Command> commands) { - return StatusChangeHistoryBuilder.builder() - .withCommands(commands) - .withOrganisationseinheitenID(vorgang.getOrganisationseinheitenID()) - .build(); - } - - Stream<VorgangChange> createAktenzeichenChangeHistory(VorgangWithEingang vorgang, List<Command> commands) { - return AktenzeichenChangeHistoryBuilder.builder() - .withCommands(commands) - .withOrganisationseinheitenID(vorgang.getOrganisationseinheitenID()) - .build(); - } - - Stream<VorgangChange> createAssignedUserChangeHistory(VorgangWithEingang vorgang, List<Command> commands) { - return AssignedUserChangeHistoryBuilder.builder() - .withCommands(commands) - .withOrganisationseinheitenID(vorgang.getOrganisationseinheitenID()) - .withUserProfileCache(UserProfileCache.create(userService::getById)) - .build(); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/Kommentar.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/Kommentar.java deleted file mode 100644 index b6a4bb308768448ecae33fb977b8c99768641471..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/Kommentar.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; - -import java.time.ZonedDateTime; -import java.util.List; - -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonProperty.Access; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Singular; -import lombok.ToString; - -@Getter -@Builder(toBuilder = true) -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@ToString -public class Kommentar implements CommandBody { - - @JsonIgnore - private String id; - @JsonIgnore - private long version; - - @JsonIgnore - private String vorgangId; - - @JsonProperty(access = Access.READ_ONLY) - @LinkedUserProfileResource - private String createdBy; - @JsonProperty(access = Access.READ_ONLY) - private ZonedDateTime createdAt; - - @NotNull(message = FIELD_IS_EMPTY) - @Size(min = 1, message = FIELD_MIN_SIZE) - private String text; - - @LinkedResource(controllerClass = BinaryFileController.class) - @Singular - private List<FileId> attachments; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarCommandController.java deleted file mode 100644 index da437abf85959dd9b2819780f30dfd69849b9500..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarCommandController.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CreateCommand; - -@RestController -@RequestMapping(KommentarCommandController.KOMMENTAR_COMMANDS) -public class KommentarCommandController { - - static final String KOMMENTAR_COMMANDS = "/api/kommentars/{kommentarId}/{kommentarVersion}/commands"; - - @Autowired - private KommentarService service; - - @PostMapping - public ResponseEntity<Void> editKommentar(@RequestBody CreateCommand command, @PathVariable String kommentarId, - @PathVariable long kommentarVersion) { - var createdCommand = service.editKommentar((Kommentar) command.getBody(), kommentarId, kommentarVersion); - - return buildResponseLink(createdCommand); - } - - private ResponseEntity<Void> buildResponseLink(Command createdKommentarCommand) { - return ResponseEntity.created(linkTo(CommandController.class).slash(createdKommentarCommand.getId()).toUri()).build(); - } - - @RestController - @RequestMapping(KommentarCommandByVorgangController.KOMMENTAR_COMMANDS_BY_VORGANG) - public static class KommentarCommandByVorgangController { - - static final String KOMMENTAR_COMMANDS_BY_VORGANG = "/api/vorgangs/{vorgangId}/kommentarCommands"; - - @Autowired - private KommentarService service; - - @PostMapping - public ResponseEntity<Void> createKommentar(@RequestBody CreateCommand command, @PathVariable String vorgangId) { - var createdCommand = service.createKommentar((Kommentar) command.getBody(), vorgangId); - - return ResponseEntity.created(linkTo(CommandController.class).slash(createdCommand.getId()).toUri()).build(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarController.java deleted file mode 100644 index a168d0805179e5451ba9822c1c1fec3c2f0bb450..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarController.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import java.util.Comparator; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.file.OzgFile; - -@RestController -@RequestMapping(KommentarController.KOMMENTAR_PATH) -public class KommentarController { - - static final String KOMMENTAR_PATH = "/api/kommentars"; // NOSONAR - - @Autowired - private KommentarService service; - - @Autowired - private KommentarModelAssembler modelAssembler; - - @Autowired - private BinaryFileController binaryFileController; - - @GetMapping("/{kommentarId}") - public EntityModel<Kommentar> getById(@PathVariable String kommentarId) { - return modelAssembler.toModel(service.getById(kommentarId)); - } - - @GetMapping("/{kommentarId}/attachments") - public CollectionModel<EntityModel<OzgFile>> getAttachments(@PathVariable String kommentarId) { - var kommentar = service.getById(kommentarId); - return binaryFileController.getFiles(kommentar.getAttachments()); - } - - @RestController - @RequestMapping(KommentarByVorgangController.KOMMENTAR_BY_VORGANG_PATH) - public static class KommentarByVorgangController { - - static final String KOMMENTAR_BY_VORGANG_PATH = "/api/vorgangs"; // NOSONAR - - @Autowired - private KommentarService service; - - @Autowired - private KommentarModelAssembler modelAssembler; - - @GetMapping("/{vorgangId}/kommentars") - public CollectionModel<EntityModel<Kommentar>> getAll(@PathVariable String vorgangId) { - return modelAssembler.toCollectionModel(sortByCreatedAt(service.findByVorgangId(vorgangId)), vorgangId); - } - - Stream<Kommentar> sortByCreatedAt(Stream<Kommentar> kommentare) { - return kommentare.sorted(Comparator.comparing(Kommentar::getCreatedAt).reversed()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarMapper.java deleted file mode 100644 index 72edc09c19ad3d714d96f0d83b760f4bdfe1800d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarMapper.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import java.time.ZonedDateTime; -import java.util.Map; - -import org.mapstruct.Mapper; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.alfa.attachment.AttachmentMapper; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -abstract class KommentarMapper { - - static final String ID = "id"; - static final String TEXT = "text"; - static final String CREATED_BY = "createdBy"; - static final String CREATED_AT = "createdAt"; - static final String ATTACHMENTS = "attachments"; - - @Autowired - private GrpcObjectMapper grpcObjectMapper; - - public Kommentar fromItem(GrpcVorgangAttachedItem vorgangAttachedItem) { - return fromItemMap(grpcObjectMapper.mapFromGrpc(vorgangAttachedItem.getItem()), vorgangAttachedItem.getVersion()); - } - - Kommentar fromItemMap(Map<String, Object> map, long version) { - return Kommentar.builder() - .id((String) map.get(ID)) - .version(version) - .createdAt(ZonedDateTime.parse((String) map.get(CREATED_AT))) - .createdBy((String) map.get(CREATED_BY)) - .text((String) map.get(TEXT)) - .attachments(AttachmentMapper.mapAttachments(map.get(ATTACHMENTS))) - .build(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java deleted file mode 100644 index ed4c3a53428540126bb1e7440fbba411d9b58753..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.CollectionModelBuilder; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; - -@Component -class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar, EntityModel<Kommentar>> { - - static final String REL_CREATE = "create-kommentar"; - static final String REL_EDIT = "edit"; - static final String REL_ATTACHMENTS = "attachments"; - static final String REL_UPLOAD_FILE = "uploadFile"; - - private static final Predicate<Kommentar> HAS_ATTACHMENTS = kommentar -> !kommentar.getAttachments().isEmpty(); - - @Autowired - private VorgangController vorgangController; - - @Override - public EntityModel<Kommentar> toModel(Kommentar kommentar) { - var vorgang = vorgangController.getVorgang(kommentar.getVorgangId()); - return buildModel(kommentar, vorgang); - } - - EntityModel<Kommentar> buildModel(Kommentar kommentar, VorgangWithEingang vorgang) { - var selfLink = linkTo(KommentarController.class).slash(kommentar.getId()); - var commandLink = linkTo(methodOn(KommentarCommandController.class).editKommentar(null, kommentar.getId(), kommentar.getVersion())); - var attachmentsLink = linkTo(methodOn(KommentarController.class).getAttachments(kommentar.getId())); - - return ModelBuilder.fromEntity(kommentar).addLink(selfLink.withSelfRel()) - .ifMatch(() -> vorgangController.isEditable(vorgang)) - .addLink(commandLink.withRel(REL_EDIT)) - .ifMatch(HAS_ATTACHMENTS) - .addLink(attachmentsLink.withRel(REL_ATTACHMENTS)) - .buildModel(); - } - - public CollectionModel<EntityModel<Kommentar>> toCollectionModel(Stream<Kommentar> entities, String vorgangId) { - var vorgang = vorgangController.getVorgang(vorgangId); - - return CollectionModelBuilder.fromEntities(entities.map(kommentar -> buildModel(kommentar, vorgang))) - .addLink(linkTo(KommentarController.class).withSelfRel()) - .addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE)) - .ifMatch(() -> vorgangController.isEditable(vorgang)) - .addLink(linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId)) - .withRel(REL_CREATE)) - .buildModel(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarRemoteService.java deleted file mode 100644 index c8ecfb45fd43988eedb626b94e72e9992670be19..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarRemoteService.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class KommentarRemoteService { - - static final String ITEM_NAME = "Kommentar"; - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; - @Autowired - private KommentarMapper mapper; - - public Stream<Kommentar> findByVorgangId(String vorgangId) { - var response = vorgangAttachedItemServiceStub.find(buildFindRequest(vorgangId)); - - return response.getVorgangAttachedItemsList().stream().map(mapper::fromItem); - } - - GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) { - return GrpcFindVorgangAttachedItemRequest.newBuilder() - .setVorgangId(vorgangId) - .setItemName(ITEM_NAME) - .build(); - } - - public Kommentar getById(String kommentarId) { - var response = vorgangAttachedItemServiceStub.getById(buildRequest(kommentarId)); - - return mapper.fromItem(response.getVorgangAttachedItem()).toBuilder().vorgangId(response.getVorgangAttachedItem().getVorgangId()).build(); - } - - private GrpcVorgangAttachedItemRequest buildRequest(String kommentarId) { - return GrpcVorgangAttachedItemRequest.newBuilder().setId(kommentarId).build(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarService.java deleted file mode 100644 index 5c33a662e5b1e0b1389e5c8d5489fe7ad9662279..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarService.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import java.time.ZonedDateTime; -import java.util.stream.Stream; - -import jakarta.validation.Valid; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.user.CurrentUserService; - -@Validated -@Service -class KommentarService { - - @Autowired - private KommentarRemoteService remoteService; - @Autowired - private CurrentUserService currentUserService; - @Autowired - private VorgangAttachedItemService vorgangAttachedItemService; - - public Command createKommentar(@Valid Kommentar kommentar, String vorgangId) { - return vorgangAttachedItemService.createNewKommentar(addCreated(kommentar), vorgangId); - } - - Kommentar addCreated(Kommentar kommentar) { - return kommentar.toBuilder() - .createdAt(ZonedDateTime.now().withNano(0)) - .createdBy(currentUserService.getUserId().toString()) - .build(); - } - - public Command editKommentar(@Valid Kommentar kommentar, String kommentarId, long kommentarVersion) { - var loadedKommentar = getById(kommentarId); - var preparedKommentar = loadedKommentar.toBuilder() - .text(kommentar.getText()) - .clearAttachments().attachments(kommentar.getAttachments()) - .build(); - - return vorgangAttachedItemService.editKommentar(preparedKommentar, kommentarId, kommentarVersion); - } - - public Stream<Kommentar> findByVorgangId(String vorgangId) { - return remoteService.findByVorgangId(vorgangId); - } - - public Kommentar getById(String kommentarId) { - return remoteService.getById(kommentarId); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/DeleteLoeschAnforderung.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/DeleteLoeschAnforderung.java deleted file mode 100644 index 50a921cf23d52f2cdd1936e0ce32f127bcdb2a51..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/DeleteLoeschAnforderung.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Getter -@Builder -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@ToString -public class DeleteLoeschAnforderung implements CommandBody { - - public static final String DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD = "deleteAttachedItemCommandId"; - public static final String CHANGE_STATUS_COMMAND_ID_FIELD = "changeStatusCommandId"; - - private String deleteAttachedItemCommandId; - private String changeStatusCommandId; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderung.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderung.java deleted file mode 100644 index 9bd2c83b2fcca3d6e3e03a64ffe9c0159767f75f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderung.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.command.CommandBody; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Getter -@Builder(toBuilder = true) -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@ToString -public class LoeschAnforderung implements CommandBody { - - static final String REQUESTED_BY_FIELD = "requestedBy"; - static final String PREV_STATUS_FIELD = "prevStatus"; - - @JsonIgnore - private String id; - - @JsonIgnore - private String vorgangId; - - @LinkedUserProfileResource - private UserId requestedBy; - private VorgangStatus prevStatus; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandController.java deleted file mode 100644 index c5467c5aa470f38861947fe464259cdfa778cd15..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandController.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Optional; - -import org.springframework.hateoas.EntityModel; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandStatus; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.StatusPatch; -import de.ozgcloud.alfa.common.errorhandling.OrderNotAllowedException; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(LoeschAnforderungCommandController.BASE_PATH) -@RequiredArgsConstructor -public class LoeschAnforderungCommandController { - - static final String BASE_PATH = "/api/loeschanforderungs/{loeschAnforderungId}/commands"; // NOSONAR - - private final LoeschAnforderungService loeschAnforderungService; - - private final VorgangAttachedItemService vorgangAttachedItemService; - - private final VorgangController vorgangController; - - private final CommandController commandController; - - @PreAuthorize("@loeschAnforderungPreAuthorizeHandler.hasPermissionForOrder(#loeschAnforderungId, #command.order)") - @PostMapping - public ResponseEntity<Void> createCommand(@PathVariable String loeschAnforderungId, @RequestBody CreateCommand command) { - var createdCommand = executeCommand(command, loeschAnforderungId); - - return ResponseEntity.created(linkTo(CommandController.class).slash(createdCommand.getId()).toUri()).build(); - } - - private Command executeCommand(CreateCommand command, String loeschAnforderungId) { - return switch (command.getCommandOrder()) { - case VORGANG_LOESCHEN -> loeschAnforderungService.vorgangLoeschen(command, loeschAnforderungId); - case LOESCH_ANFORDERUNG_ZURUECKNEHMEN -> loeschAnforderungZuruecknehmen(loeschAnforderungId); - default -> throw new OrderNotAllowedException(command.getOrder()); - }; - } - - private Command loeschAnforderungZuruecknehmen(String loeschAnforderungId) { - var vorgangAttachedItem = vorgangAttachedItemService.getById(loeschAnforderungId); - var vorgang = vorgangController.getVorgang(vorgangAttachedItem.getVorgangId()); - return loeschAnforderungService.zuruecknehmen(vorgangAttachedItem, vorgang); - } - - @PatchMapping("{commandId}") - public ResponseEntity<EntityModel<Command>> revoke(@PathVariable String loeschAnforderungId, @PathVariable String commandId, - @RequestBody StatusPatch patch) { - if (patch.getStatus() == CommandStatus.REVOKED) { - var command = commandController.getById(commandId).getContent(); - - if (Optional.ofNullable(command).map(Command::getCommandOrder).orElse(null) == CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN) { - return handleVorgangZumLoeschenMarkierenRevokeCommand(loeschAnforderungId, command, patch); - } - if (Optional.ofNullable(command).map(Command::getCommandOrder).orElse(null) == CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN) { - return handleLoeschAnforderungZuruecknehmenRevokeCommand(command, patch); - } - } - return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); - } - - ResponseEntity<EntityModel<Command>> handleVorgangZumLoeschenMarkierenRevokeCommand(String loeschAnforderungId, Command command, - StatusPatch patch) { - loeschAnforderungService.deleteLoeschAnforderung(loeschAnforderungId); - - return commandController.revoke(command.getId(), patch); - } - - ResponseEntity<EntityModel<Command>> handleLoeschAnforderungZuruecknehmenRevokeCommand(Command command, StatusPatch patch) { - loeschAnforderungService.reCreateLoeschAnforderung(command); - - var changeStatusCommandId = loeschAnforderungService.getChangeStatusCommandId(command); - return commandController.revoke(changeStatusCommandId, patch); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java deleted file mode 100644 index a1843587039f98039222b661b48b5b2918dd8c5b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandHelper; -import de.ozgcloud.alfa.common.command.CommandOrder; - -@Component -class LoeschAnforderungCommandProcessor implements RepresentationModelProcessor<EntityModel<Command>> { - - @Autowired - private LoeschAnforderungService service; - - static final LinkRelation REL_REVOKE = LinkRelation.of("revoke"); - - private static final Predicate<Command> IS_VORGANG_ZUM_LOESCHEN_MARKIEREN_AND_REVOKEABLE = command -> command - .getCommandOrder() == CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN && CommandHelper.IS_REVOKEABLE.test(command); - static final Predicate<Command> IS_LOESCHEN_ANFORDERUNG_ZURUECKNEHMEN_AND_REVOKEABLE = command -> command - .getCommandOrder() == CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN && CommandHelper.IS_REVOKEABLE.test(command); - - @Override - public EntityModel<Command> process(EntityModel<Command> model) { - var command = model.getContent(); - - if (Objects.isNull(command)) { - return model; - } - return ModelBuilder.fromModel(model) - .ifMatch(IS_LOESCHEN_ANFORDERUNG_ZURUECKNEHMEN_AND_REVOKEABLE) - .addLink(() -> linkTo(methodOn(LoeschAnforderungCommandController.class).revoke(command.getRelationId(), command.getId(), null)) - .withRel(REL_REVOKE)) - .ifMatch(IS_VORGANG_ZUM_LOESCHEN_MARKIEREN_AND_REVOKEABLE) - .addLinkIfPresent(() -> buildLink(command)) - .buildModel(); - } - - Optional<Link> buildLink(Command command) { - return service.findLoeschAnforderung(command.getVorgangId()).map(loeschAnforderung -> buildLink(loeschAnforderung, command.getId())); - } - - Link buildLink(VorgangAttachedItem loeschAnforderung, String commandId) { - return linkTo(methodOn(LoeschAnforderungCommandController.class).revoke(loeschAnforderung.getId(), commandId, null)) - .withRel(REL_REVOKE); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungController.java deleted file mode 100644 index 57d96dcea4d00dd4d0f2e7cf5ffa970bfe1ce494..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungController.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.vorgang.VorgangController; - -@RestController -@RequestMapping(LoeschAnforderungController.BASE_PATH) -public class LoeschAnforderungController { - - static final String BASE_PATH = "/api/loeschanforderungs"; // NOSONAR - - @Autowired - private LoeschAnforderungService service; - - @Autowired - private LoeschAnforderungModelAssembler modelAssembler; - - @GetMapping("/{id}") - public EntityModel<LoeschAnforderung> getLoeschanforderung(@PathVariable String id) { - return modelAssembler.toModel(service.getById(id)); - } - - @RestController - @RequestMapping(LoeschAnforderungByVorgangController.BASE_PATH) - public static class LoeschAnforderungByVorgangController { - - public static final String BASE_PATH = "/api/vorgangs/{vorgangId}/vorgangVersion/{vorgangVersion}/loeschanforderung"; // NOSONAR - - @Autowired - private LoeschAnforderungService loeschAnforderungService; - - @Autowired - private VorgangController vorgangController; - - @PostMapping - public ResponseEntity<Void> createLoeschAnforderung(@PathVariable String vorgangId, @PathVariable long vorgangVersion, - @RequestBody CreateCommand command) { - var vorgang = vorgangController.getVorgang(vorgangId); - var created = loeschAnforderungService.createLoeschAnforderung(command, vorgang, vorgangVersion); - - return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build(); - } - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungMapper.java deleted file mode 100644 index 2bb6fa8f118ddaffb3da32c075f2dbcc6f63325a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungMapper.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import java.util.Map; - -import org.apache.commons.collections.MapUtils; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandBodyMapper; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -@Component -class LoeschAnforderungMapper { - - public LoeschAnforderung fromVorgangAttachedItem(VorgangAttachedItem vorgangAttachedItem) { - var item = vorgangAttachedItem.getItem(); - return LoeschAnforderung.builder() - .id(vorgangAttachedItem.getId()) - .vorgangId(vorgangAttachedItem.getVorgangId()) - .requestedBy(getRequestedBy(item)) - .prevStatus(getPrevState(item)) - .build(); - } - - public LoeschAnforderung fromCommand(Command command) { - var item = getItem(command); - return LoeschAnforderung.builder() - .id(command.getRelationId()) - .vorgangId(command.getVorgangId()) - .requestedBy(getRequestedBy(item)) - .prevStatus(getPrevState(item)) - .build(); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getItem(Command command) { - return MapUtils.getMap(command.getBody(), CommandBodyMapper.ITEM_PROPERTY); - } - - private UserId getRequestedBy(Map<String, ?> item) { - return UserId.from(MapUtils.getString(item, LoeschAnforderung.REQUESTED_BY_FIELD)); - } - - private VorgangStatus getPrevState(Map<String, ?> item) { - return VorgangStatus.valueOf(MapUtils.getString(item, LoeschAnforderung.PREV_STATUS_FIELD)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java deleted file mode 100644 index d2b91d808a956a20483ce342da8763de668f9a97..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; - -@Component -class LoeschAnforderungModelAssembler implements RepresentationModelAssembler<LoeschAnforderung, EntityModel<LoeschAnforderung>> { - - static final LinkRelation REL_EXECUTE_LOESCHEN = LinkRelation.of("execute_loeschen"); - static final LinkRelation REL_LOESCH_ANFORDERUNG_ZURUECKNEHMEN = LinkRelation.of("zuruecknehmen"); - - @Autowired - private LoeschAnforderungService loeschAnforderungService; - - @Override - public EntityModel<LoeschAnforderung> toModel(LoeschAnforderung loeschAnforderung) { - return ModelBuilder.fromEntity(loeschAnforderung) - .addLink(linkTo(methodOn(LoeschAnforderungController.class).getLoeschanforderung(loeschAnforderung.getId())).withSelfRel()) - .ifMatch(loeschAnforderungService::isAllowedToVorgangLoeschen) - .addLink(linkTo(methodOn(LoeschAnforderungCommandController.class).createCommand(loeschAnforderung.getId(), null)).withRel( - REL_EXECUTE_LOESCHEN)) - .addLink(linkTo(methodOn(LoeschAnforderungCommandController.class).createCommand(loeschAnforderung.getId(), null)).withRel( - REL_LOESCH_ANFORDERUNG_ZURUECKNEHMEN)) - .buildModel(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungPreAuthorizeHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungPreAuthorizeHandler.java deleted file mode 100644 index 0152a5701d6caccb644919ccf5e2423e671f55dc..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungPreAuthorizeHandler.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class LoeschAnforderungPreAuthorizeHandler { - - private final LoeschAnforderungService loeschAnforderungService; - private final CurrentUserService currentUserService; - - public boolean hasPermissionForOrder(String loeschAnforderungId, CommandOrder order) { - return switch (order) { - case VORGANG_LOESCHEN -> loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderungService.getById(loeschAnforderungId)); - case LOESCH_ANFORDERUNG_ZURUECKNEHMEN -> hasRoleForZuruecknehmen(); - default -> false; - }; - } - - private boolean hasRoleForZuruecknehmen() { - return currentUserService.hasRole(UserRole.VERWALTUNG_USER) || currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungService.java deleted file mode 100644 index ee20014e44d336a7b6f5f03021c2f4e3e5e315f9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungService.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import java.util.List; -import java.util.Optional; - -import jakarta.validation.Valid; - -import org.apache.commons.collections.MapUtils; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.RequiredOrder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Validated -@Service -@RequiredArgsConstructor -class LoeschAnforderungService { - - private final LoeschAnforderungMapper mapper; - - private final CommandService commandService; - - private final VorgangAttachedItemService vorgangAttachedItemService; - - private final CurrentUserService currentUserService; - - public Command createLoeschAnforderung(@Valid @RequiredOrder(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN) CreateCommand command, Vorgang vorgang, - long vorgangVersion) { - createVorgangAttachedItem(vorgang); - - return createCreateCommand(command, vorgang, vorgangVersion); - } - - void createVorgangAttachedItem(Vorgang vorgang) { - vorgangAttachedItemService.createNewLoeschAnforderung(buildLoeschAnforderung(vorgang), vorgang.getId()); - } - - private LoeschAnforderung buildLoeschAnforderung(Vorgang vorgang) { - return LoeschAnforderung.builder() - .requestedBy(currentUserService.getUserId()) - .prevStatus(vorgang.getStatus()) - .build(); - } - - Command createCreateCommand(CreateCommand command, Vorgang vorgang, long vorgangVersion) { - var createCommand = command.toBuilder().relationId(vorgang.getId()).vorgangId(vorgang.getId()).build(); - - return commandService.createCommand(createCommand, vorgangVersion); - } - - public Command vorgangLoeschen(CreateCommand command, String loeschAnforderungId) { - var loeschAnforderung = getById(loeschAnforderungId); - - command = command.toBuilder().vorgangId(loeschAnforderung.getVorgangId()).relationId(loeschAnforderung.getVorgangId()).build(); - - return commandService.createCommand(command); - } - - public LoeschAnforderung getById(String id) { - var vorgangAttachedItem = vorgangAttachedItemService.getById(id); - - return mapper.fromVorgangAttachedItem(vorgangAttachedItem); - } - - public Command zuruecknehmen(VorgangAttachedItem vorgangAttachedItem, Vorgang vorgang) { - var deleteAttachedItemCommand = vorgangAttachedItemService.deleteAttachedItem(vorgangAttachedItem); - - var loeschAnforderng = mapper.fromVorgangAttachedItem(vorgangAttachedItem); - var changeStatusCommand = setPreviousVorgangStatus(vorgang, loeschAnforderng); - - return commandService.createCommand( - buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeStatusCommand, vorgang, loeschAnforderng), - vorgang.getVersion()); - } - - public boolean isAllowedToVorgangLoeschen(LoeschAnforderung loeschAnforderung) { - return hasRequiredRoles() && isDifferentUser(loeschAnforderung); - } - - private boolean hasRequiredRoles() { - return currentUserService.hasRole(UserRole.VERWALTUNG_LOESCHEN); - } - - private boolean isDifferentUser(LoeschAnforderung loeschAnforderung) { - return !currentUserService.getUserId().equals(loeschAnforderung.getRequestedBy()); - } - - Command setPreviousVorgangStatus(Vorgang vorgang, LoeschAnforderung loeschAnforderung) { - var createCommand = createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - - return commandService.createCommand(createCommand, vorgang.getVersion()); - } - - CreateCommand createSetPreviousVorgangStatusCreateCommand(Vorgang vorgang, LoeschAnforderung loeschAnforderung) { - return CreateCommand.builder() - .order(getCommandOrderForPreviousStatus(loeschAnforderung).name()) - .vorgangId(loeschAnforderung.getVorgangId()) - .relationId(loeschAnforderung.getVorgangId()) - .relationVersion(vorgang.getVersion()).build(); - } - - CommandOrder getCommandOrderForPreviousStatus(LoeschAnforderung loeschAnforderung) { - return switch (loeschAnforderung.getPrevStatus()) { - case ABGESCHLOSSEN -> CommandOrder.VORGANG_ABSCHLIESSEN; - case VERWORFEN -> CommandOrder.VORGANG_VERWERFEN; - default -> throw new TechnicalException( - String.format("Unexpected prevStatus %s in LoeschAnforderung.", loeschAnforderung.getPrevStatus())); - }; - } - - CreateCommand buildDeleteLoeschAnforderungCommand(Command deleteAttachedItemCommand, Command changeStatusCommand, Vorgang vorgang, - LoeschAnforderung loeschAnforderung) { - return CreateCommand.builder() - .order(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()) - .vorgangId(vorgang.getId()) - .relationId(loeschAnforderung.getId()) - .body(buildDeleteLoeschAnforderung(changeStatusCommand.getId(), deleteAttachedItemCommand.getId())) - .build(); - } - - DeleteLoeschAnforderung buildDeleteLoeschAnforderung(String changeStatusCommandId, String deleteVorgangAttachedItemCommandId) { - return DeleteLoeschAnforderung.builder() - .changeStatusCommandId(changeStatusCommandId) - .deleteAttachedItemCommandId(deleteVorgangAttachedItemCommandId) - .build(); - } - - public void deleteLoeschAnforderung(String loeschAnforderungId) { - var vorgangAttachedItem = vorgangAttachedItemService.getById(loeschAnforderungId); - - vorgangAttachedItemService.deleteAttachedItem(vorgangAttachedItem); - } - - public Optional<VorgangAttachedItem> findLoeschAnforderung(String vorgangId) { - var vorgangAttachedItems = vorgangAttachedItemService.findLoeschAnforderung(vorgangId).toList(); - - if (vorgangAttachedItems.isEmpty()) { - return Optional.empty(); - } - if (vorgangAttachedItems.size() > 1) { - deleteDuplicateLoeschAnforderung(vorgangAttachedItems, vorgangId); - } - return Optional.of(vorgangAttachedItems.get(0)); - } - - void deleteDuplicateLoeschAnforderung(List<VorgangAttachedItem> items, String vorgangId) { - LOG.warn("Found {} Löschanforderungen for vorgang {}, only one was expected.", items.size(), vorgangId); - items.subList(1, items.size()).forEach(vorgangAttachedItemService::deleteAttachedItem); - } - - public void reCreateLoeschAnforderung(Command command) { - var deleteLoschAnforderungCommand = commandService.getById(getDeleteVorgangAttachedItemCommandId(command)); - var loeschAnforderung = mapper.fromCommand(deleteLoschAnforderungCommand); - - vorgangAttachedItemService.createNewLoeschAnforderung(loeschAnforderung, command.getVorgangId()); - } - - private String getDeleteVorgangAttachedItemCommandId(Command command) { - return MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD); - } - - public String getChangeStatusCommandId(Command command) { - return MapUtils.getString(command.getBody(), DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java deleted file mode 100644 index 5281c140049b6c730996d7243ae76b3e0a3ec408..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderungController.LoeschAnforderungByVorgangController; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class LoeschAnforderungVorgangProcessor implements RepresentationModelProcessor<EntityModel<? extends Vorgang>> { - - static final LinkRelation REL_LOESCHEN_ANFORDERN = LinkRelation.of("loeschen_anfordern"); - static final LinkRelation REL_LOESCH_ANFORDERUNG = LinkRelation.of("loesch_anforderung"); - - static final List<String> USER_ROLES_ALLOWED_TO_LOESCHEN_ANFORDERN = List.of(UserRole.VERWALTUNG_USER, UserRole.EINHEITLICHER_ANSPRECHPARTNER); - static final List<VorgangStatus> VORGANG_STATUSES_ALLOWED_TO_LOESCHEN_ANFORDERN = List.of(VorgangStatus.VERWORFEN, VorgangStatus.ABGESCHLOSSEN); - - private final LoeschAnforderungService service; - private final CurrentUserService currentUserService; - private final VorgangController vorgangController; - - @Override - public EntityModel<? extends Vorgang> process(EntityModel<? extends Vorgang> model) { - var vorgang = model.getContent(); - - if (Objects.isNull(vorgang)) { - return model; - } - - var vorgangAttachedItem = service.findLoeschAnforderung(vorgang.getId()); - - return ModelBuilder.fromModel(model) - .ifMatch(this::isLoeschenAnfordernAllowed) - .addLink(buildLoschenAnfordernLink(vorgang)) - .addLink(buildLoschAnforderungLink(vorgangAttachedItem)) - .buildModel(); - } - - boolean isLoeschenAnfordernAllowed(Vorgang vorgang) { - return isAllowedStatus(vorgang) && isAllowedUserRole() && vorgangController.isEditable(vorgang); - } - - private boolean isAllowedStatus(Vorgang vorgang) { - return VORGANG_STATUSES_ALLOWED_TO_LOESCHEN_ANFORDERN.contains(vorgang.getStatus()); - } - - private boolean isAllowedUserRole() { - return USER_ROLES_ALLOWED_TO_LOESCHEN_ANFORDERN.stream().anyMatch(currentUserService::hasRole); - } - - private Link buildLoschenAnfordernLink(Vorgang vorgang) { - return linkTo(methodOn(LoeschAnforderungByVorgangController.class).createLoeschAnforderung(vorgang.getId(), vorgang.getVersion(), null)) - .withRel(REL_LOESCHEN_ANFORDERN); - } - - private Optional<Link> buildLoschAnforderungLink(Optional<VorgangAttachedItem> vorgangAttachedItem) { - return vorgangAttachedItem.map(item -> linkTo(methodOn(LoeschAnforderungController.class).getLoeschanforderung(item.getId())) - .withRel(REL_LOESCH_ANFORDERUNG)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/Features.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/Features.java deleted file mode 100644 index 0eafad33f54b644b17d7aa1313798c2c51a6c9ed..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/Features.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@AllArgsConstructor -@Builder -class Features { - - private boolean reply; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettings.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettings.java deleted file mode 100644 index 335652a11cfa268dd978af94559502375fca6c21..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettings.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Builder -public class OrganisationsEinheitSettings { - private String signatur; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachAddress.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachAddress.java deleted file mode 100644 index de404873a339e131bc423aefa1b6b1267c9bb64a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachAddress.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Map; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class PostfachAddress { - - public static final String VERSION_FIELD = "version"; - public static final String TYPE_FIELD = "type"; - - public static final String IDENTIFIER_FIELD = "identifier"; - public static final String IDENTIFIER_POSTFACH_ID_FIELD = "postfachId"; - - private String version; - private int type; - private Map<String, Object> identifier; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfig.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfig.java deleted file mode 100644 index f1f7c76c561e1e0d12b133010ac15377c1553a42..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import lombok.Builder; -import lombok.Getter; -import lombok.ToString; - -@Getter -@Builder -@ToString -public class PostfachConfig { - - private final String type; - private final boolean replyAllowed; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfigGroup.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfigGroup.java deleted file mode 100644 index bd88d5f5d18320ef76fe9648b5fb6bfd60953126..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfigGroup.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -import lombok.Builder; -import lombok.Getter; -import lombok.ToString; - -@Getter -@Builder -@ToString -public class PostfachConfigGroup { - - private final boolean configured; - private final List<PostfachConfig> postfachConfigs; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfigMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfigMapper.java deleted file mode 100644 index fbdc69fe77586589a58653e0aabb01319cc66ab6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachConfigMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; - -import de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigResponse; -import de.ozgcloud.nachrichten.postfach.GrpcPostfach; - -@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -interface PostfachConfigMapper { - - @Mapping(target = "postfachConfigs", source = "postfachList") - PostfachConfigGroup toPostfachConfigGroup(GrpcGetPostfachConfigResponse grpcPostfachCollection); - - PostfachConfig toPostfachConfig(GrpcPostfach grpcPostfach); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMail.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMail.java deleted file mode 100644 index 6df13b095ea7ba65648ed17b50054283f17a12c1..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMail.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; - -import java.time.ZonedDateTime; -import java.util.List; -import java.util.Map; - -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Size; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandBody; -import de.ozgcloud.alfa.common.user.UserId; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Singular; -import lombok.ToString; - -@Builder(toBuilder = true) -@Getter -@ToString -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -public class PostfachMail implements CommandBody { - - public static final String POSTFACH_ADDRESS_FIELD = "postfachAddress"; - - enum Direction { - IN, OUT - } - - @JsonIgnore - private String id; - @JsonIgnore - private Map<String, Object> postfachAddress; - @JsonIgnore - private String vorgangId; - - private ZonedDateTime createdAt; - @JsonIgnore - private UserId createdBy; - - private ZonedDateTime sentAt; - private Boolean sentSuccessful; - private String messageCode; - - private Direction direction; - private ReplyOption replyOption; - - @NotEmpty(message = FIELD_IS_EMPTY) - @Size(max = 70, message = FIELD_MAX_SIZE) - private String subject; - - @NotEmpty(message = FIELD_IS_EMPTY) - private String mailBody; - - @LinkedResource(controllerClass = BinaryFileController.class) - @Singular - private List<FileId> attachments; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailController.java deleted file mode 100644 index 91ad702bfda5982fb5e22f9f97feec9c3fb5e6f4..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailController.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.RepresentationModel; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@RestController -@RequestMapping(PostfachMailController.PATH) -public class PostfachMailController { - - public static final String PATH = "/api/postfachMails"; // NOSONAR - public static final String PARAM_VORGANG_ID = "vorgangId"; - static final String PDF_NAME_TEMPLATE = "%s_%s_Nachrichten.pdf"; - static final DateTimeFormatter PDF_NAME_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); - - private final PostfachMailService postfachMailService; - private final PostfachSettingsService postfachSettingsService; - - private final PostfachMailModelAssembler assembler; - - private final VorgangController vorgangController; - private final BinaryFileController binaryFileController; - - @GetMapping(params = PARAM_VORGANG_ID) - public RepresentationModel<EntityModel<PostfachSettings>> getAll(@RequestParam String vorgangId) { - var vorgang = getVorgang(vorgangId); - var postfachSetting = postfachSettingsService.getPostfachSettings(vorgang); - return assembler.toCollectionModel(sort(postfachMailService.getAll(vorgangId)), vorgang, postfachSetting); - } - - Stream<PostfachMail> sort(Stream<PostfachMail> nachrichten) { - return nachrichten.sorted(new PostfachNachrichtComparator().reversed()); - } - - @GetMapping(params = PARAM_VORGANG_ID, produces = MediaType.APPLICATION_PDF_VALUE) - public ResponseEntity<StreamingResponseBody> getAllAsPdf(@RequestParam String vorgangId) { - var vorgang = getVorgang(vorgangId); - - return buildResponseEntity(vorgang, createDownloadStreamingBody(vorgang)); - } - - private VorgangWithEingang getVorgang(String vorgangId) { - return vorgangController.getVorgang(vorgangId); - } - - StreamingResponseBody createDownloadStreamingBody(VorgangWithEingang vorgang) { - return out -> postfachMailService.getAllAsPdf(vorgang, out); - } - - ResponseEntity<StreamingResponseBody> buildResponseEntity(VorgangWithEingang vorgang, StreamingResponseBody responseBody) { - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_DISPOSITION, buildPdfName(vorgang)) - .contentType(MediaType.APPLICATION_PDF) - .body(responseBody); - } - - private String buildPdfName(VorgangWithEingang vorgang) { - return String.format(PDF_NAME_TEMPLATE, vorgang.getNummer(), LocalDate.now().format(PDF_NAME_DATE_FORMATTER)); - } - - public boolean isPostfachConfigured() { - return postfachSettingsService.isPostfachConfigured(); - } - - @GetMapping("{nachrichtId}/attachments") - public CollectionModel<EntityModel<OzgFile>> findAttachments(@PathVariable PostfachNachrichtId nachrichtId) { - var postfachNachricht = postfachMailService.findById(nachrichtId); - - return binaryFileController.getFiles(postfachNachricht.getAttachments()); - } - - @RequiredArgsConstructor - @RestController - @RequestMapping(PostfachMailCommandController.POSTFACH_MAIL_COMMAND_PATH) - public static class PostfachMailCommandController { - static final String POSTFACH_MAIL_COMMAND_PATH = "/api/postfachMails/{postfachMailId}/commands"; // NOSONAR - - private final PostfachMailService service; - private final PostfachNachrichtHelper helper; - - private final VorgangController vorgangController; - - private final CommandByRelationController commandByRelationController; - - @PostMapping - public ResponseEntity<Void> createCommand(@PathVariable String postfachMailId, @RequestBody CreateCommand command) { - var created = createCommand(service.findById(PostfachNachrichtId.from(postfachMailId)), command); - - if (created.getCommandOrder() == CommandOrder.RESEND_POSTFACH_MAIL) { - service.resendPostfachMail(created.getId(), postfachMailId); - } - - return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build(); - } - - private Command createCommand(@NonNull PostfachMail mail, @NonNull CreateCommand command) { - var completedCommand = command.toBuilder().vorgangId(mail.getVorgangId()).relationId(mail.getId()).build(); - - if (completedCommand.getCommandOrder() == CommandOrder.SEND_POSTFACH_NACHRICHT) { - var vorgang = getVorgang(mail.getVorgangId()); - completedCommand = addPostfachAddress(completedCommand, vorgang); - } - - return commandByRelationController.createCommand(completedCommand); - } - - private VorgangWithEingang getVorgang(String vorgangId) { - return vorgangController.getVorgang(vorgangId); - } - - private CreateCommand addPostfachAddress(CreateCommand command, VorgangWithEingang vorgang) { - return command.toBuilder().body(helper.addPostfachAddressToBody((PostfachMail) command.getBody(), vorgang)).build(); - } - } - - @RequiredArgsConstructor - @RestController - @RequestMapping(PostfachMailCommandByVorgangController.PATH) - public static class PostfachMailCommandByVorgangController { - - static final String PATH = "/api/vorgangs/{vorgangId}/postfachMailCommands"; // NOSONAR - - private final PostfachMailService service; - private final PostfachNachrichtHelper helper; - private final VorgangController vorgangController; - - @PostMapping - public ResponseEntity<Void> sendPostfachMail(@PathVariable String vorgangId, @RequestBody CreateCommand command) { - command = command.toBuilder().vorgangId(vorgangId).relationId(vorgangId).build(); - - var vorgang = getVorgang(vorgangId); - command = addPostfachAddress(command, vorgang); - - var created = service.sendPostfachMail(command, vorgang.getVersion()); - - return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build(); - } - - private VorgangWithEingang getVorgang(String vorgangId) { - return vorgangController.getVorgang(vorgangId); - } - - private CreateCommand addPostfachAddress(CreateCommand command, VorgangWithEingang vorgang) { - return command.toBuilder().body(helper.addPostfachAddressToBody((PostfachMail) command.getBody(), vorgang)).build(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailMapper.java deleted file mode 100644 index a695f01a4cec220b59c83153d0484b740df26ecb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailMapper.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.apache.commons.beanutils.BeanMap; -import org.apache.commons.lang3.tuple.Pair; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.MappingConstants; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ValueMapping; - -import com.google.protobuf.ProtocolStringList; - -import de.ozgcloud.alfa.common.TimeMapper; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.nachrichten.postfach.GrpcPostfachMail; - -@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // - uses = { TimeMapper.class, UserIdMapper.class }) -interface PostfachMailMapper { - - @Mapping(target = "attachment", ignore = true) - @ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL) - @ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL) - @Mapping(target = "attachments", source = "attachmentList") - @Mapping(target = "postfachAddress", ignore = true) - PostfachMail toPostfachMail(GrpcPostfachMail grpcPostfachMail); - - default List<FileId> fromStringList(ProtocolStringList stringList) { - return stringList.stream().map(FileId::from).toList(); - } - - default Map<String, Object> mapPostfachAddressToMap(PostfachAddress postfachAddress) { - return new BeanMap(postfachAddress).entrySet().stream() - .map(entry -> Pair.of(entry.getKey().toString(), entry.getValue())) - .collect(Collectors.toMap(Pair::getKey, Pair::getValue)); - - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java deleted file mode 100644 index 8de875f0fae7795526b3f0b7ec0dd996a2a38d79..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.BooleanUtils; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.RepresentationModel; -import org.springframework.hateoas.mediatype.hal.HalModelBuilder; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandByVorgangController; -import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHead; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class PostfachMailModelAssembler implements RepresentationModelAssembler<PostfachMail, EntityModel<PostfachMail>> { - - public static final String REL_SEND_POSTFACH_MAIL = "sendPostfachMail"; - public static final String REL_SEND = "send"; - public static final String REL_RESEND_POSTFACH_MAIL = "resendPostfachMail"; - public static final String REL_RESET_NEW_POSTFACH_MAIL = "resetHasNewPostfachNachricht"; - public static final String REL_ATTACHMENTS = "attachments"; - public static final String REL_EDIT = "edit"; - static final String REL_UPLOAD_ATTACHMENT = "uploadAttachment"; - static final String REL_CREATED_BY = "createdBy"; - private static final String POSTFACH_NACHRICHT_ATTACHMENT_FIELD = "postfachNachrichtAttachment"; - private static final String HAS_NEW_POSTFACH_NACHRICHT_FIELD = "hasNewPostfachNachricht"; - private static final String FILE_PATH = "file"; - - private static final Predicate<PostfachMail> IS_OUTGOING = postfachNachricht -> postfachNachricht.getDirection() == Direction.OUT; - - private static final Predicate<PostfachMail> SENT_FAILED = postfachMail -> Objects.nonNull(postfachMail.getSentAt()) - && BooleanUtils.isFalse(postfachMail.getSentSuccessful()); - private static final Predicate<PostfachMail> IS_UNSEND = IS_OUTGOING.and(mail -> !mail.getSentSuccessful() && Objects.isNull(mail.getSentAt())); - private static final Predicate<PostfachMail> HAS_ATTACHMENTS = nachricht -> CollectionUtils.isNotEmpty(nachricht.getAttachments()); - - static final String SYSTEM_USER_IDENTIFIER = "system"; - private static final Predicate<PostfachMail> SENT_BY_CLIENT_USER = postfachNachricht -> Optional.ofNullable(postfachNachricht.getCreatedBy()) - .map(createdBy -> !createdBy.toString().startsWith(SYSTEM_USER_IDENTIFIER)).orElse(false); - - private final UserManagerUrlProvider userManagerUrlProvider; - private final VorgangController vorgangController; - - public RepresentationModel<EntityModel<PostfachSettings>> toCollectionModel(Stream<PostfachMail> postfachMails, VorgangWithEingang vorgang, - PostfachSettings postfachSettings) { - - var model = buildHalRepresentationModel(postfachMails, vorgang, postfachSettings); - - if (hasServiceKonto(vorgang)) { - addPostfachNachrichtLinks(model, vorgang); - } - return model; - } - - RepresentationModel<EntityModel<PostfachSettings>> buildHalRepresentationModel(Stream<PostfachMail> postfachMails, VorgangWithEingang vorgang, - PostfachSettings postfachSettings) { - return HalModelBuilder - .halModelOf(postfachSettings) - .link(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withSelfRel()) - .embed(postfachMails.map(this::toModel)) - .build(); - } - - boolean hasServiceKonto(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getHeader()).map(VorgangHead::getServiceKonto).isPresent(); - } - - void addPostfachNachrichtLinks(RepresentationModel<EntityModel<PostfachSettings>> model, VorgangWithEingang vorgang) { - var vorgangId = vorgang.getId(); - - if (vorgangController.isEditable(vorgang)) { - model.add(linkTo(methodOn(PostfachMailCommandByVorgangController.class).sendPostfachMail(vorgangId, null)) - .withRel(REL_SEND_POSTFACH_MAIL)); - } - - model.add(linkTo(BinaryFileController.class).slash(vorgangId).slash(POSTFACH_NACHRICHT_ATTACHMENT_FIELD).slash(FILE_PATH) - .withRel(REL_UPLOAD_ATTACHMENT)); - - if (vorgang.isHasNewPostfachNachricht()) { - model.add(linkTo(VorgangController.class).slash(vorgangId).slash(HAS_NEW_POSTFACH_NACHRICHT_FIELD).withRel(REL_RESET_NEW_POSTFACH_MAIL)); - } - } - - @Override - public EntityModel<PostfachMail> toModel(PostfachMail postfachMail) { - var selfLink = linkTo(PostfachMailController.class).slash(postfachMail.getId()); - - return ModelBuilder.fromEntity(postfachMail).addLink(selfLink.withSelfRel()) - .ifMatch(IS_UNSEND).addLink(linkTo(PostfachMailCommandController.class, postfachMail.getId()).withRel(REL_SEND)) - .ifMatch(SENT_FAILED) - .addLink(linkTo(methodOn(PostfachMailCommandController.class).createCommand(postfachMail.getId(), null)) - .withRel(REL_RESEND_POSTFACH_MAIL)) - .ifMatch(IS_UNSEND) - .addLink(linkTo(methodOn(PostfachMailCommandController.class).createCommand(postfachMail.getId(), null)) - .withRel(REL_EDIT)) - .ifMatch(HAS_ATTACHMENTS) - .addLink(linkTo(methodOn(PostfachMailController.class).findAttachments(PostfachNachrichtId.from(postfachMail.getId()))) - .withRel(REL_ATTACHMENTS)) - .ifMatch(() -> userManagerUrlProvider.isConfiguredForUserProfile() && SENT_BY_CLIENT_USER.test(postfachMail)) - .addLink(() -> Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), postfachMail.getCreatedBy()), - REL_CREATED_BY)) - .buildModel(); - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailRemoteService.java deleted file mode 100644 index a0c1b2b429c4ef55f0902cece52807ccf4bdfcdb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailRemoteService.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Optional; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailRequest; -import de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsRequest; -import de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigRequest; -import de.ozgcloud.nachrichten.postfach.GrpcResendPostfachMailRequest; -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class PostfachMailRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private PostfachServiceBlockingStub serviceStub; - @Autowired - private ContextService contextService; - @Autowired - private PostfachMailMapper postfachNachrichtMapper; - @Autowired - private PostfachConfigMapper postfachConfigMapper; - - public Stream<PostfachMail> findPostfachMails(String vorgangId) { - var response = serviceStub.findPostfachMails(buildFindPostfachMailsRequest(vorgangId)); - - return response.getMailsList().stream().map(postfachNachrichtMapper::toPostfachMail); - } - - private GrpcFindPostfachMailsRequest buildFindPostfachMailsRequest(String vorgangId) { - return GrpcFindPostfachMailsRequest.newBuilder() - .setVorgangId(vorgangId) - .setContext(contextService.createCallContext()) - .build(); - } - - public Optional<PostfachMail> findById(PostfachNachrichtId nachrichtId) { - var response = serviceStub.findPostfachMail(buildFindPostfachMailRequest(nachrichtId)); - - return Optional.ofNullable(response.getNachricht()).map(postfachNachrichtMapper::toPostfachMail); - } - - private GrpcFindPostfachMailRequest buildFindPostfachMailRequest(PostfachNachrichtId nachrichtId) { - return GrpcFindPostfachMailRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setNachrichtId(nachrichtId.toString()) - .build(); - } - - public void resendPostfachMail(String commandId, String postfachMailId) { - serviceStub.resendPostfachMail(buildResendPostfachMailRequest(commandId, postfachMailId)); - } - - GrpcResendPostfachMailRequest buildResendPostfachMailRequest(String commandId, String postfachMailId) { - return GrpcResendPostfachMailRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setPostfachMailId(postfachMailId) - .setCommandId(commandId) - .build(); - } - - public PostfachConfigGroup getPostfachConfig() { - var response = serviceStub.getPostfachConfig(buildGetPostfachConfigRequest()); - return postfachConfigMapper.toPostfachConfigGroup(response); - } - - private GrpcGetPostfachConfigRequest buildGetPostfachConfigRequest() { - return GrpcGetPostfachConfigRequest.newBuilder().build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailService.java deleted file mode 100644 index eb8f0d72dbda1d2a135ee10f5ddda8a1c6d922d3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailService.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.io.OutputStream; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@RequiredArgsConstructor -@Log4j2 -@Service -class PostfachMailService { - - private final PostfachMailRemoteService remoteService; - private final PostfachNachrichtPdfService pdfService; - private final BinaryFileService fileService; - private final UserService userService; - private final CommandService commandService; - - public PostfachMail findById(PostfachNachrichtId nachrichtId) { - return remoteService.findById(nachrichtId) - .orElseThrow(() -> new ResourceNotFoundException(PostfachMail.class, nachrichtId)); - } - - public Command sendPostfachMail(CreateCommand command, long relationVersion) { - return commandService.createCommand(command, relationVersion); - } - - // @Async FIXME Er scheint den CallContext zu verlieren - public void resendPostfachMail(String commandId, String postfachMailId) { - try { - remoteService.resendPostfachMail(commandId, postfachMailId); - } catch (RuntimeException e) { - LOG.error("Error sending PostfachNachricht: " + e.getMessage(), e); - // FIXME mark command as in error - } - } - - public OutputStream getAllAsPdf(VorgangWithEingang vorgang, OutputStream out) { - var postfachNachrichtPdfDataList = buildPostfachNachrichtPdfDataList(vorgang.getId()); - - return pdfService.getAllAsPdf(vorgang, postfachNachrichtPdfDataList, out); - } - - Stream<PostfachNachrichtPdfData> buildPostfachNachrichtPdfDataList(String vorgangId) { - var postfachNachrichten = getAll(vorgangId).toList(); - var ozgFileIdOzgFileMap = getFiles(postfachNachrichten).collect(Collectors.toMap(OzgFile::getId, OzgFile::getName)); - - return postfachNachrichten.stream() - .sorted(Comparator.comparing(PostfachMail::getCreatedAt).reversed()) - .map(postfachNachricht -> buildPostfachNachrichtPdfData(postfachNachricht, ozgFileIdOzgFileMap)); - } - - public Stream<PostfachMail> getAll(String vorgangId) { - return remoteService.findPostfachMails(vorgangId); - } - - Stream<OzgFile> getFiles(List<PostfachMail> postfachMails) { - return fileService.getFiles(getFileIdsFromAllAttachments(postfachMails)); - } - - List<FileId> getFileIdsFromAllAttachments(List<PostfachMail> postfachMails) { - return postfachMails.stream() - .map(PostfachMail::getAttachments) - .flatMap(Collection::stream) - .toList(); - } - - PostfachNachrichtPdfData buildPostfachNachrichtPdfData(PostfachMail postfachNachricht, - Map<FileId, String> ozgFileIdOzgFileMap) { - return PostfachNachrichtPdfData.builder() - .createdAt(postfachNachricht.getCreatedAt()) - .user(getUser(postfachNachricht)) - .direction(postfachNachricht.getDirection()) - .mailBody(postfachNachricht.getMailBody()) - .subject(postfachNachricht.getSubject()) - .attachmentNames(postfachNachricht.getAttachments().stream().map(ozgFileIdOzgFileMap::get).toList()) - .build(); - } - - UserProfile getUser(PostfachMail postfachNachricht) { - var createdBy = postfachNachricht.getCreatedBy(); - if (UserManagerUrlProvider.SENT_BY_CLIENT_USER.test(postfachNachricht)) { - return userService.getById(createdBy); - } - return Optional.ofNullable(createdBy) - .map(created -> UserProfile.builder().id(created).build()) - .orElseGet(() -> null); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtComparator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtComparator.java deleted file mode 100644 index 72db3e699930c8cc0ae08cc6c63da3077c352f43..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtComparator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Comparator; -import java.util.Objects; - -class PostfachNachrichtComparator implements Comparator<PostfachMail> { - - @Override - public int compare(PostfachMail o1, PostfachMail o2) { - var comp1 = Objects.isNull(o1.getSentAt()) ? o1.getCreatedAt() : o1.getSentAt(); - var comp2 = Objects.isNull(o2.getSentAt()) ? o2.getCreatedAt() : o2.getSentAt(); - return comp1.compareTo(comp2); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtHelper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtHelper.java deleted file mode 100644 index ab78c954d0c0ccf046f8cc3a6b27f4547185fb5b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtHelper.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.command.CommandBody; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; - -@Component -class PostfachNachrichtHelper { - - static final String SERVICEKONTO_TYPE_FIELD = "serviceKontoType"; - - @Autowired - private PostfachMailMapper mapper; - - public CommandBody addPostfachAddressToBody(PostfachMail nachricht, VorgangWithEingang vorgang) { - return addPostfachAddress(nachricht, createPostfachAddressForPostfachMail(vorgang)); - } - - private PostfachMail addPostfachAddress(PostfachMail nachricht, Map<String, Object> postfachAddress) { - return nachricht.toBuilder().postfachAddress(postfachAddress).build(); - } - - private Map<String, Object> createPostfachAddressForPostfachMail(VorgangWithEingang vorgang) { - Map<String, Object> postfachAddressForPostfachMail = new HashMap<>(mapper.mapPostfachAddressToMap(getPostfachAddress(vorgang))); - postfachAddressForPostfachMail.put(SERVICEKONTO_TYPE_FIELD, getServiceKontoType(vorgang)); - return Collections.unmodifiableMap(postfachAddressForPostfachMail); - } - - private PostfachAddress getPostfachAddress(VorgangWithEingang vorgang) { - return vorgang.getHeader().getServiceKonto().getPostfachAddresses().get(0); - } - - private String getServiceKontoType(VorgangWithEingang vorgang) { - return vorgang.getHeader().getServiceKonto().getType(); - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtId.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtId.java deleted file mode 100644 index e7cb7a54639c4a4ea1c55b7b640d61de617fd792..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtId.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -public class PostfachNachrichtId extends StringBasedValue { - - private static final long serialVersionUID = 1L; - - public PostfachNachrichtId(String nachrichtId) { - super(nachrichtId); - } - - public static PostfachNachrichtId from(String nachrichtId) { - return new PostfachNachrichtId(nachrichtId); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfData.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfData.java deleted file mode 100644 index 92aebff08686f26a3c81d970b6b5713c2ea7ffed..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfData.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.time.ZonedDateTime; -import java.util.List; - -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Builder -class PostfachNachrichtPdfData { - - private ZonedDateTime createdAt; - private UserProfile user; - - private String subject; - private String mailBody; - private Direction direction; - - private List<String> attachmentNames; - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfModel.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfModel.java deleted file mode 100644 index fefb10ab35b1af1b02e1f21c23538504213c451a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfModel.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -import jakarta.xml.bind.annotation.XmlElement; -import jakarta.xml.bind.annotation.XmlElementWrapper; -import jakarta.xml.bind.annotation.XmlRootElement; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@XmlRootElement -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@NoArgsConstructor(access = AccessLevel.PACKAGE) -class PostfachNachrichtPdfModel { - - @XmlElement - private String vorgangName; - - @XmlElement - private String vorgangNummer; - - @XmlElement - private String antragstellerAnrede; - - @XmlElement - private String antragstellerVorname; - - @XmlElement - private String antragstellerNachname; - - @XmlElement - private String antragstellerStrasse; - - @XmlElement - private String antragstellerHausnummer; - - @XmlElement - private String antragstellerPlz; - - @XmlElement - private String antragstellerOrt; - - @XmlElementWrapper - @XmlElement(name = "nachricht") - private List<Nachricht> nachrichten; - - @Getter - @Builder - static class Nachricht { - - @XmlElement - private boolean isFirst; - - @XmlElement - private String subject; - - @XmlElement - private String mailBody; - - @XmlElement - private String createdBy; - - @XmlElement - private String createdAt; - - @XmlElementWrapper - @XmlElement(name = "attachment") - private List<String> attachments; - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfService.java deleted file mode 100644 index 4709d669f5cc6c33bda8ed4ef43be8ca576e1097..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfService.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GermanDateTimeFormatter; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.ozgcloud.alfa.vorgang.Antragsteller; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.common.pdf.PdfService; - -@Service -class PostfachNachrichtPdfService { - - static final String PDF_TEMPLATE_PATH = "classpath:fop/postfach-nachrichten.xsl"; - - static final String SYSTEM_NACHRICHT_NAME = StringUtils.EMPTY; - static final String FALLBACK_USER_NAME = "Unbekannter Benutzer"; - - static final String FALLBACK_ANTRAGSTELLER_NAME = "Antragsteller"; - - @Autowired - private PdfService pdfService; - - @Autowired - private GermanDateTimeFormatter germanDateTimeFormatter; - - private boolean isFirstNachricht; - - @Value(PostfachNachrichtPdfService.PDF_TEMPLATE_PATH) - private Resource pdfTemplate; - - public OutputStream getAllAsPdf(VorgangWithEingang vorgang, Stream<PostfachNachrichtPdfData> postfachNachrichten, OutputStream out) { - return pdfService.createPdf(getTemplate(), out, buildModel(vorgang, postfachNachrichten)); - } - - InputStream getTemplate() { - try { - return pdfTemplate.getInputStream(); - } catch (IOException e) { - throw new TechnicalException("Pdf Template for postfach nachrichten could not be loaded", e); - } - } - - PostfachNachrichtPdfModel buildModel(VorgangWithEingang vorgang, Stream<PostfachNachrichtPdfData> postfachNachrichten) { - var pdfModelBuilder = PostfachNachrichtPdfModel.builder().vorgangNummer(vorgang.getNummer()).vorgangName(vorgang.getName()); - - Optional.ofNullable(vorgang.getEingang().getAntragsteller()).ifPresent(antragsteller -> mapAntragsteller(pdfModelBuilder, antragsteller)); - - mapNachrichten(pdfModelBuilder, postfachNachrichten, vorgang.getEingang().getAntragsteller()); - - return pdfModelBuilder.build(); - } - - void mapAntragsteller(PostfachNachrichtPdfModel.PostfachNachrichtPdfModelBuilder modelBuilder, Antragsteller antragsteller) { - modelBuilder.antragstellerAnrede(antragsteller.getAnrede()) - .antragstellerVorname(antragsteller.getVorname()) - .antragstellerNachname(antragsteller.getNachname()) - .antragstellerStrasse(antragsteller.getStrasse()) - .antragstellerHausnummer(antragsteller.getHausnummer()) - .antragstellerPlz(antragsteller.getPlz()) - .antragstellerOrt(antragsteller.getOrt()); - } - - private void mapNachrichten(PostfachNachrichtPdfModel.PostfachNachrichtPdfModelBuilder pdfModelBuilder, - Stream<PostfachNachrichtPdfData> postfachNachrichten, Antragsteller antragsteller) { - isFirstNachricht = true; - - pdfModelBuilder.nachrichten(postfachNachrichten.map(nachricht -> mapPostfachNachricht(nachricht, antragsteller)).toList()); - - } - - PostfachNachrichtPdfModel.Nachricht mapPostfachNachricht(PostfachNachrichtPdfData postfachMail, Antragsteller antragsteller) { - return PostfachNachrichtPdfModel.Nachricht.builder() - .isFirst(isFirstNachricht()) - .subject(postfachMail.getSubject()) - .mailBody(postfachMail.getMailBody()) - .createdAt(germanDateTimeFormatter.formatZonedDateTime(postfachMail.getCreatedAt())) - .createdBy(buildAbsenderName(postfachMail, antragsteller)) - .attachments(postfachMail.getAttachmentNames()) - .build(); - } - - private boolean isFirstNachricht() { - if (isFirstNachricht) { - isFirstNachricht = false; - return true; - } - return false; - } - - String buildAbsenderName(PostfachNachrichtPdfData postfachNachrichtPdfData, Antragsteller antragsteller) { - if (postfachNachrichtPdfData.getDirection() == Direction.IN) { - return buildAbsenderForOutgoingNachricht(antragsteller); - } - return buildAbsenderForIncomingNachricht(postfachNachrichtPdfData); - } - - String buildAbsenderForOutgoingNachricht(Antragsteller antragsteller) { - return Optional.ofNullable(antragsteller) - .map(this::formatAntragstellerName) - .orElseGet(() -> FALLBACK_ANTRAGSTELLER_NAME); - } - - String buildAbsenderForIncomingNachricht(PostfachNachrichtPdfData postfachNachrichtPdfData) { - return Optional.ofNullable(postfachNachrichtPdfData.getUser()).map(user -> { - if (Objects.nonNull(user.getId()) && user.toString().startsWith(UserManagerUrlProvider.SYSTEM_USER_IDENTIFIER)) { - return SYSTEM_NACHRICHT_NAME; - } - return formatUserName(postfachNachrichtPdfData.getUser()); - }).orElseGet(() -> FALLBACK_USER_NAME); - } - - private String formatUserName(UserProfile user) { - return formatForPdf(user.getFirstName(), user.getLastName()); - } - - private String formatAntragstellerName(Antragsteller antragsteller) { - return formatForPdf(antragsteller.getVorname(), antragsteller.getNachname()); - } - - private String formatForPdf(String firstName, String lastName) { - return String.format("%s %s", getPdfStringValue(firstName), getPdfStringValue(lastName)).trim(); - } - - private String getPdfStringValue(String value) { - return Optional.ofNullable(StringUtils.trimToNull(value)).orElseGet(() -> StringUtils.EMPTY); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java deleted file mode 100644 index 366716ba3f5849248e8ab9817513117fa2b5da54..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachProperties.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Map; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Configuration -@ConfigurationProperties(prefix = PostfachProperties.PREFIX) -@RefreshScope -@Getter -@Setter -public class PostfachProperties { - - static final String PREFIX = "ozgcloud.postfach"; - - /** - * Signature appended to messages. Configured by administration config server. - */ - private String signatur = ""; - - /** - * Settings that are linked to an Organisationseinheit. Configured by administration config server. - */ - private Map<String, Map<String, Object>> organisationsEinheitSettings = Map.of(); - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettings.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettings.java deleted file mode 100644 index b984db126c8145f28dbf13b228b905e543804ced..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettings.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@AllArgsConstructor -@Builder -class PostfachSettings { - - private Features features; - private Settings settings; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java deleted file mode 100644 index 71d81170a9d3f924be141c3cb85b37e54986d5ed..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachSettingsService.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import org.springframework.cloud.endpoint.RefreshEndpoint; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.FeatureToggleProperties; -import de.ozgcloud.alfa.vorgang.ServiceKonto; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Service -class PostfachSettingsService { - - static final String FIELD_SIGNATUR = "signatur"; - - private PostfachConfigGroup postfachConfigGroup; - - private final PostfachMailRemoteService remoteService; - private final RefreshEndpoint refreshEndpoint; - private final PostfachProperties postfachProperties; - private final FeatureToggleProperties featureToggleProperties; - - public boolean isPostfachConfigured() { - if (Objects.isNull(postfachConfigGroup)) { - postfachConfigGroup = remoteService.getPostfachConfig(); - } - return postfachConfigGroup.isConfigured(); - } - - public PostfachSettings getPostfachSettings(VorgangWithEingang vorgang) { - return PostfachSettings.builder() - .features(Features.builder() - .reply(isReplyToMessageAllowed(vorgang)) - .build()) - .settings(Settings.builder() - .signatur(getSignatur(vorgang.getOrganisationseinheitenID())) - .build()) - .build(); - } - - String getSignatur(String organisationseinheitenID) { - refreshPostfachProperties(); - var settings = getOrganisationsEinheitSettings(organisationseinheitenID); - return settings.map(OrganisationsEinheitSettings::getSignatur).orElseGet(postfachProperties::getSignatur); - } - - void refreshPostfachProperties() { - refreshEndpoint.refresh(); - } - - boolean isReplyToMessageAllowed(VorgangWithEingang vorgang) { - return Optional.ofNullable(vorgang.getHeader().getServiceKonto()) - .map(ServiceKonto::getType) - .map(this::isReplyAllowed) - .orElse(false); - } - - boolean isReplyAllowed(String serviceKontoType) { - if (featureToggleProperties.isReplyAlwaysAllowed()) { - return true; - } - - if (!isPostfachConfigured()) { - return false; - } - - return postfachConfigGroup.getPostfachConfigs().stream() - .filter(postfachConfig -> postfachConfig.getType().equalsIgnoreCase(serviceKontoType)) - .map(PostfachConfig::isReplyAllowed) - .findFirst() - .orElse(false); - } - - Optional<OrganisationsEinheitSettings> getOrganisationsEinheitSettings(String organisationId) { - return Optional.ofNullable(organisationId) - .map(this::getOrganisationsEinheitPostfachSettings) - .map(this::mapOrganisationsEinheitSettings); - } - - OrganisationsEinheitSettings mapOrganisationsEinheitSettings(Map<String, Object> organisationsEinheitSettings) { - var signatur = Optional.ofNullable(organisationsEinheitSettings.get(FIELD_SIGNATUR)).map(Object::toString).orElse(null); - return OrganisationsEinheitSettings.builder().signatur(signatur).build(); - } - - private Map<String, Object> getOrganisationsEinheitPostfachSettings(String organisationId) { - return postfachProperties.getOrganisationsEinheitSettings().get(organisationId); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/ReplyOption.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/ReplyOption.java deleted file mode 100644 index a9c478463d57c2a2b415af4b2d1189baa252d8a9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/ReplyOption.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -enum ReplyOption { - POSSIBLE, MANDATORY, FORBIDDEN; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/Settings.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/Settings.java deleted file mode 100644 index 93c8e5b340e4f0476193cbcd1e8fc09264dab2d8..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/Settings.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class Settings { - - private String signatur; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationByVorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationByVorgangController.java deleted file mode 100644 index fd81c68c0d4c4ac3db1955e9b5bec991c65d47f6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/representation/RepresentationByVorgangController.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.representation; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(RepresentationByVorgangController.PATH) -@RequiredArgsConstructor -public class RepresentationByVorgangController { - static final String PATH = "/api/vorgang/{vorgangId}/representations"; // NOSONAR - - private final OzgFileService fileService; - private final BinaryFileModelAssembler modelAssembler; - - @GetMapping - public CollectionModel<EntityModel<OzgFile>> getAll(@PathVariable String vorgangId) { - return modelAssembler.toCollectionModel(fileService.getRepresentations(vorgangId)); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResource.java b/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResource.java deleted file mode 100644 index 50a47ea6ba11cf9b2a3c98e6ecf628227dbb02fe..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResource.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class OzgcloudResource { - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceController.java deleted file mode 100644 index 2ee4e025b92547b592ae360d3afafdc05615c30a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceController.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import java.util.Collection; -import java.util.Optional; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.RepresentationModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.common.errorhandling.TechnicalException; -import jakarta.validation.constraints.NotBlank; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(OzgcloudResourceController.PATH) -@RequiredArgsConstructor -public class OzgcloudResourceController { - - static final String PATH = "/api/resources"; - static final String PARAM_URI = "uri"; - - private final Collection<OzgcloudResourceURIResolver> resolvers; - private final OzgcloudResourceModelAssembler assembler; - - @GetMapping(params = PARAM_URI) - public RepresentationModel<EntityModel<OzgcloudResource>> getOzgcloudResource(@RequestParam @NotBlank String uri) { - var resourceLink = resolveUri(uri); - if (resourceLink.isEmpty()) { - throw new ResourceNotFoundException(OzgcloudResource.class, uri); - } - return assembler.toModel(new OzgcloudResourceURIResolveResult(uri, resourceLink.get())); - } - - private Optional<Link> resolveUri(String uri) { - return resolvers.stream() - .map(resolver -> resolver.resolve(uri)) - .flatMap(Optional::stream) - .reduce((r1, r2) -> { - throw new TechnicalException("Multiple resolvers accepted uri " + uri); - }); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceModelAssembler.java deleted file mode 100644 index b2ec4165e53e8852ff273536b4f8d56dbfe9d03e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceModelAssembler.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class OzgcloudResourceModelAssembler implements RepresentationModelAssembler<OzgcloudResourceURIResolveResult, EntityModel<OzgcloudResource>> { - - @Override - public EntityModel<OzgcloudResource> toModel(OzgcloudResourceURIResolveResult uriResolveResult) { - return EntityModel.of(new OzgcloudResource()).add(getSelfLink(uriResolveResult.getResourceURI())).add(uriResolveResult.getResourceLink()); - } - - private Link getSelfLink(String uri) { - return linkTo(methodOn(OzgcloudResourceController.class).getOzgcloudResource(uri)).withSelfRel(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceRootProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceRootProcessor.java deleted file mode 100644 index 55ccd4eaddadfcb40250f377b429d553ccf02c26..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceRootProcessor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.Root; - -@Component -class OzgcloudResourceRootProcessor implements RepresentationModelProcessor<EntityModel<Root>> { - - static final String REL_RESOURCE = "resource"; - - @Override - public EntityModel<Root> process(EntityModel<Root> model) { - return model.add(linkTo(methodOn(OzgcloudResourceController.class).getOzgcloudResource(null)).withRel(REL_RESOURCE)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolveResult.java b/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolveResult.java deleted file mode 100644 index 6759573bd17e4795847dfa9145afdbbaf123aafe..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolveResult.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import org.springframework.hateoas.Link; - -import lombok.Builder; -import lombok.Getter; -import lombok.ToString; - -@Builder -@Getter -@ToString -public class OzgcloudResourceURIResolveResult { - private final String resourceURI; - private final Link resourceLink; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolver.java b/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolver.java deleted file mode 100644 index ceedf7716673610ad372938dcc6a95204f30662c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolver.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import java.util.Optional; - -import org.springframework.hateoas.Link; - -public interface OzgcloudResourceURIResolver { - - Optional<Link> resolve(String uri); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/ByStatus.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/ByStatus.java deleted file mode 100644 index 6f0a4929e00ed92387cf4cf0d7394ce698a2dd07..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/ByStatus.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Builder -@Getter -@Setter -class ByStatus { - - private int neu; - private int angenommen; - private int inBearbeitung; - private int beschieden; - private int abgeschlossen; - private int verworfen; - private int zuLoeschen; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java deleted file mode 100644 index cd82cf3b4677e9cb68eac0f6613359b5a5c715a7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Builder(toBuilder = true) -@Getter -@Setter -public class Statistic { - - private ByStatus byStatus; - private int wiedervorlagen; - private boolean existsWiedervorlageOverdue; - private int ungeleseneNachrichten; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticController.java deleted file mode 100644 index 0d44b8a938be8677ba966558f04fd0ba919830ae..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticController.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class StatisticController { - - @Autowired - private StatisticService statisticService; - - public Statistic getVorgaengeStatistic() { - return statisticService.getVorgaengeStatistic(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticMapper.java deleted file mode 100644 index cc8e05c9f7f06f16c392419e75854ca4830a716f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResult; - -@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, - collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -interface StatisticMapper { - - @Mapping(target = "stringValue", source = "resultStringValue") - @Mapping(target = "boolValue", source = "resultBoolValue") - @Mapping(target = "intValue", source = "resultIntValue") - StatisticResult toResult(GrpcVorgangStatisticResult grpcVorgangStatisticResult); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java deleted file mode 100644 index f4b1574bbdd340979dacb1a6e7e51cf09a3d3bc3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.AlfaProperties; -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.vorgang.common.GrpcQueryOperator; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse; -import de.ozgcloud.vorgang.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class StatisticRemoteService { - - static final String COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT = "countVorgangStatus_%s"; - static final String COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME = "countWiedervorlage"; - static final String EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME = "existsWiedervorlageOverdue"; - static final String COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME = "countVorgaengeWithUngeleseneNachrichten"; - - static final String STATUS_PATH = "Vorgang.status"; - static final String WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE = "ClientAttribute.%s.nextWiedervorlageFrist"; - static final String VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH = "ClientAttribute.OzgCloud_NachrichtenManager.hasNewPostfachNachricht"; - - static final String OPERAND_TODAY_DATE = "today()"; - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private StatisticServiceBlockingStub statisticServiceStub; - @Autowired - private StatisticMapper mapper; - @Autowired - private AlfaProperties alfaProperties; - - public Map<String, StatisticResult> getVorgaengeStatistics(List<VorgangStatus> countByVorgangStatus) { - var grpcRequest = GrpcVorgangStatisticRequest.newBuilder() - .addAllQuery(buildCountByStatusQueries(countByVorgangStatus)) - .addQuery(buildCountWiedervorlageNextFristQuery()) - .addQuery(buildExistsWiedervorlageOverdueQuery()) - .addQuery(buildCountVorgaengeWithUngeleseneNachrichtenQuery()) - .build(); - - var grpcResponse = statisticServiceStub.getVorgangStatistic(grpcRequest); - - return buildStatisticResult(grpcResponse); - } - - List<GrpcVorgangStatisticQuery> buildCountByStatusQueries(List<VorgangStatus> countByVorgangStatus) { - return countByVorgangStatus.stream().map(this::buildCountByVorgangStatusQuery).toList(); - } - - GrpcVorgangStatisticQuery buildCountByVorgangStatusQuery(VorgangStatus vorgangStatus) { - return GrpcVorgangStatisticQuery.newBuilder() - .setResultName(buildCountByStatusResultName(vorgangStatus)) - .setPath(STATUS_PATH) - .setGroupMethod(GroupMethod.COUNT) - .setOperator(GrpcQueryOperator.EQUAL) - .setOperandStringValue(vorgangStatus.name()) - .build(); - } - - GrpcVorgangStatisticQuery buildCountWiedervorlageNextFristQuery() { - return GrpcVorgangStatisticQuery.newBuilder() - .setResultName(COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME) - .setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName())) - .setGroupMethod(GroupMethod.COUNT) - .setOperator(GrpcQueryOperator.UNEQUAL) - .build(); - } - - GrpcVorgangStatisticQuery buildExistsWiedervorlageOverdueQuery() { - return GrpcVorgangStatisticQuery.newBuilder() - .setResultName(EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME) - .setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName())) - .setGroupMethod(GroupMethod.EXISTS) - .setOperator(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO) - .setOperandStringValue(OPERAND_TODAY_DATE) - .build(); - } - - public String buildCountByStatusResultName(VorgangStatus vorgangStatus) { - return String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, vorgangStatus.name()); - } - - Map<String, StatisticResult> buildStatisticResult(GrpcVorgangStatisticResponse grpcVorgangStatisticResponse) { - return grpcVorgangStatisticResponse.getResultList() - .stream() - .map(mapper::toResult) - .collect(Collectors.toMap(StatisticResult::getName, Function.identity())); - } - - public GrpcVorgangStatisticQuery buildCountVorgaengeWithUngeleseneNachrichtenQuery() { - return GrpcVorgangStatisticQuery.newBuilder() - .setResultName(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME) - .setPath(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH) - .setGroupMethod(GroupMethod.COUNT) - .setOperator(GrpcQueryOperator.EQUAL) - .setOperandBoolValue(true) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticResult.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticResult.java deleted file mode 100644 index 2824d157ba5df2287645e2374af4b4495fd8fbc7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticResult.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -class StatisticResult { - - private String name; - private Boolean boolValue; - private Integer intValue; - private String stringValue; - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java deleted file mode 100644 index 9e8cbd8c31459b379a51b42b5334c9babb2bcf07..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -@Service -class StatisticService { - - static final List<VorgangStatus> COUNT_BY_VORGANG_STATUS_VERWALTUNG_USER = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, - VorgangStatus.IN_BEARBEITUNG, VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN); - static final List<VorgangStatus> COUNT_BY_VORGANG_STATUS_POSTSTELLE_USER = Collections.emptyList(); - static final List<VorgangStatus> COUNT_BY_VORGANG_EINHEITLICHER_ANSPRECHPARTNER = Collections.emptyList(); - - @Autowired - private StatisticRemoteService remoteService; - - @Autowired - private CurrentUserService currentUserService; - - public Statistic getVorgaengeStatistic() { - var response = remoteService.getVorgaengeStatistics(getCountByVorgangStatusList()); - return buildGetVorgaengeStatisticResult(response); - } - - List<VorgangStatus> getCountByVorgangStatusList() { - if (currentUserService.hasRole(UserRole.VERWALTUNG_USER)) { - return COUNT_BY_VORGANG_STATUS_VERWALTUNG_USER; - } - if (currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) { - return COUNT_BY_VORGANG_STATUS_POSTSTELLE_USER; - } - if (currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) { - return COUNT_BY_VORGANG_EINHEITLICHER_ANSPRECHPARTNER; - } - return Collections.emptyList(); - } - - Statistic buildGetVorgaengeStatisticResult(Map<String, StatisticResult> response) { - return Statistic.builder() - .existsWiedervorlageOverdue(getBooleanResult(response, StatisticRemoteService.EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME)) - .wiedervorlagen(getIntResult(response, StatisticRemoteService.COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME)) - .ungeleseneNachrichten(getIntResult(response, StatisticRemoteService.COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME)) - .byStatus(ByStatus.builder() - .neu(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.NEU))) - .abgeschlossen(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.ABGESCHLOSSEN))) - .angenommen(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.ANGENOMMEN))) - .beschieden(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.BESCHIEDEN))) - .verworfen(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.VERWORFEN))) - .inBearbeitung(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.IN_BEARBEITUNG))) - .zuLoeschen(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.ZU_LOESCHEN))) - .build()) - .build(); - } - - private int getIntResult(Map<String, StatisticResult> response, String resultName) { - return Optional.ofNullable(response.get(resultName)).map(StatisticResult::getIntValue).orElse(0); - } - - private boolean getBooleanResult(Map<String, StatisticResult> response, String resultName) { - return Optional.ofNullable(response.get(resultName)).map(StatisticResult::getBoolValue).orElse(false); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/system/RemoteSystemStatusMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/system/RemoteSystemStatusMapper.java deleted file mode 100644 index 7c75ae4abbbc30fd3dd7a450634e154f8a61653e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/system/RemoteSystemStatusMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import org.mapstruct.Mapper; - -import de.ozgcloud.vorgang.system.GrpcGetSystemStatusResponse; - -@Mapper -interface RemoteSystemStatusMapper { - - VorgangManagerSystemStatus fromGrpc(GrpcGetSystemStatusResponse systemStatusResponse); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/system/SystemStatusRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/system/SystemStatusRemoteService.java deleted file mode 100644 index b905ccbad78586a58eab4f02f7f1c54d629bff5b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/system/SystemStatusRemoteService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.vorgang.system.GrpcGetSystemStatusRequest; -import de.ozgcloud.vorgang.system.SystemStatusServiceGrpc.SystemStatusServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class SystemStatusRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private SystemStatusServiceBlockingStub systemStatusBlockingStub; - @Autowired - private RemoteSystemStatusMapper remoteSystemStatusMapper; - - public VorgangManagerSystemStatus getSystemStatus() { - var systemStatusResponse = systemStatusBlockingStub.getSystemStatus(GrpcGetSystemStatusRequest.newBuilder().build()); - return remoteSystemStatusMapper.fromGrpc(systemStatusResponse); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/system/SystemStatusService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/system/SystemStatusService.java deleted file mode 100644 index 4dc759f3f060383d016ee3bb63e118ab613862c7..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/system/SystemStatusService.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -public class SystemStatusService { - - @Autowired - private SystemStatusRemoteService systemStatusRemoteService; - - public boolean isSearchServerAvailable() { - try { - return systemStatusRemoteService.getSystemStatus().isSearchServerAvailable(); - } catch (RuntimeException e) { - LOG.warn("Cannot check system status.", e); - return false; - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/system/VorgangManagerSystemStatus.java b/alfa-service/src/main/java/de/ozgcloud/alfa/system/VorgangManagerSystemStatus.java deleted file mode 100644 index 9130d54933c53539cec398b01f5f28956ed150c6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/system/VorgangManagerSystemStatus.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import lombok.Builder; - -@Builder -public record VorgangManagerSystemStatus(boolean isSearchServerAvailable, String javaVersion, String buildVersion) { -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Antragsteller.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Antragsteller.java deleted file mode 100644 index db863f1e551ffe823f9f562761de88d5ccd1772b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Antragsteller.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class Antragsteller { - - @JsonIgnore - private String postfachId; - - private String anrede; - private String nachname; - private String vorname; - private String geburtsdatum; - private String geburtsort; - private String geburtsname; - private String email; - private String telefon; - private String strasse; - private String hausnummer; - private String plz; - private String ort; - private String firmaName; - - private Map<String, Object> otherData; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/AntragstellerMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/AntragstellerMapper.java deleted file mode 100644 index 7ceeaf456b09b1eab581db6ee933f8073babfeea..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/AntragstellerMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import org.mapstruct.Mapper; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.NullValueMappingStrategy; -import org.mapstruct.NullValuePropertyMappingStrategy; - -import de.ozgcloud.alfa.common.StringToNullMapper; -import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; -import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller; - -@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL, // - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // - nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT, // - uses = { StringToNullMapper.class, GrpcFormDataMapper.class }) -interface AntragstellerMapper { - - Antragsteller toAntragsteller(GrpcAntragsteller antragsteller); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/AssignUserCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/AssignUserCommandBody.java deleted file mode 100644 index 14e55034d9dd31cb7e393c678371da4fb0e810b9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/AssignUserCommandBody.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.command.CommandBody; -import de.ozgcloud.alfa.common.user.UserId; -import lombok.Getter; - -@Getter -public class AssignUserCommandBody implements CommandBody { - - @LinkedUserProfileResource - private UserId assignedTo; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Eingang.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Eingang.java deleted file mode 100644 index 5ed176167c4c239eced91f21b958ab10392fb10b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Eingang.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Map; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Getter -@Builder -@ToString -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -public class Eingang { - - private String id; - - private int numberOfAttachments; - private int numberOfRepresentations; - - private ZustaendigeStelle zustaendigeStelle; - private Antragsteller antragsteller; - private EingangHeader header; - - @ToString.Exclude - private Map<String, Object> formData; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java deleted file mode 100644 index c7f494f0e702473407595c33441e8d650b8b7f90..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.ZonedDateTime; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class EingangHeader { - - private String requestId; - private ZonedDateTime createdAt; - private String formId; - private String formName; - private String sender; - private String customer; - private String customerId; - private String client; - private String clientId; - private String formEngineName; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapper.java deleted file mode 100644 index c4a332cdf7071f1843d5c3590592f7ba2028e2b0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.ZonedDateTime; - -import org.mapstruct.Mapper; - -import de.ozgcloud.vorgang.vorgang.GrpcEingangHeader; - -@Mapper -interface EingangHeaderMapper { - - EingangHeader toEingangHeader(GrpcEingangHeader header); - - public static ZonedDateTime mapDateStrToZonedDateTime(String zdtStr) { - return ZonedDateTime.parse(zdtStr); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangMapper.java deleted file mode 100644 index 23acbe922cc88e7152ae1295b08cf72eb7a8caa3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.NullValueMappingStrategy; -import org.mapstruct.NullValuePropertyMappingStrategy; - -import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; - -@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL, // - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // - nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT, // - uses = { AntragstellerMapper.class, EingangHeaderMapper.class, ZustaendigeStelleMapper.class, GrpcFormDataMapper.class, }) -interface EingangMapper { - - @Mapping(target = "formData", source = "formData") - public abstract Eingang fromGrpc(GrpcEingang eingang); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EnhancedVorgang.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EnhancedVorgang.java deleted file mode 100644 index 0c4767d8675ecddf79c28d032ef575ae3a42b59c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EnhancedVorgang.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.statistic.Statistic; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Builder -@Setter -@Getter -class EnhancedVorgang { - - private Statistic statistic; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java deleted file mode 100644 index 897b59c64311a57f8a29d4d65be56fc1c70db25d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Collection; -import java.util.Collections; -import java.util.Optional; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder(toBuilder = true) -class FilterCriteria { - - private boolean filterByOrganisationseinheitenId; - @Builder.Default - private Collection<String> organisationsEinheitenId = Collections.emptyList(); - @Builder.Default - private Optional<VorgangStatus> status = Optional.empty(); - private boolean filterByAssignedTo; - @Builder.Default - private Optional<UserId> assignedTo = Optional.empty(); - private boolean hasNextWiedervorlageFrist; - private boolean hasUngeleseneNachrichten; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FindVorgaengeHeaderRequestCriteria.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FindVorgaengeHeaderRequestCriteria.java deleted file mode 100644 index 17883280036517435be97d7a3472b8ec62c50ec9..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FindVorgaengeHeaderRequestCriteria.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Optional; - -import lombok.Builder; -import lombok.Getter; - -@Builder(toBuilder = true) -@Getter -class FindVorgaengeHeaderRequestCriteria { - - private int page; - private int limit; - @Builder.Default - private Optional<String> searchBy = Optional.empty(); - private OrderBy orderBy; - @Builder.Default - private FilterCriteria filterCriteria = FilterCriteria.builder().build(); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/OrderBy.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/OrderBy.java deleted file mode 100644 index 050040109b8b5b74886d5a40bef70a6fe3b72a68..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/OrderBy.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -enum OrderBy { - PRIORITY, - EA_PRIORITY, - CREATED_AT_DESC, - NEXT_WIEDERVORLAGE_FRIST -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ProcessVorgangBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ProcessVorgangBody.java deleted file mode 100644 index 837dfc33d93f5a1d8af65218a5d815565ca3f47d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ProcessVorgangBody.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.ArrayList; - -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.Getter; - -@Getter -public class ProcessVorgangBody implements CommandBody { - - private ArrayList<String> processorNames; - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResetNewPostfachNachrichtBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResetNewPostfachNachrichtBody.java deleted file mode 100644 index 70ec293220e4217bec94d7da43727e48306bad85..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResetNewPostfachNachrichtBody.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class ResetNewPostfachNachrichtBody { - - private boolean hasNewPostfachNachricht; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ServiceKonto.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ServiceKonto.java deleted file mode 100644 index 1aede15058991f2b4c4c27964246dc03962e0898..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ServiceKonto.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; - -import de.ozgcloud.alfa.postfach.PostfachAddress; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; -import lombok.Singular; - -@Getter -@Builder -@Setter -public class ServiceKonto { - - private String type; - @Singular - private List<PostfachAddress> postfachAddresses; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ServiceKontoMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ServiceKontoMapper.java deleted file mode 100644 index 1bef02557c17fb87ac4329f2265d7aa630db7086..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ServiceKontoMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueMappingStrategy; - -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; - -@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, // - nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL, // - uses = GrpcObjectMapper.class) -interface ServiceKontoMapper { - - @Mapping(target = "postfachAddress", ignore = true) - @Mapping(target = "postfachAddresses", source = "postfachAddressesList") - public ServiceKonto fromServiceKonto(GrpcServiceKonto serviceKonto); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgaengeHeaderResponse.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgaengeHeaderResponse.java deleted file mode 100644 index 354f8564ff4d2423d9ef9db97787044148a09ee6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgaengeHeaderResponse.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -class VorgaengeHeaderResponse { - - private List<VorgangHeader> vorgaengeHeader; - private long total; - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Vorgang.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Vorgang.java deleted file mode 100644 index 283e43bb02da6cce929019a0021d858a1a8aa86e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/Vorgang.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import de.ozgcloud.alfa.common.user.UserRole; - -public interface Vorgang { - - enum VorgangStatus { - NEU, ANGENOMMEN, VERWORFEN, IN_BEARBEITUNG, BESCHIEDEN, ABGESCHLOSSEN, WEITERGELEITET, ZU_LOESCHEN; - - private final Map<String, Set<VorgangStatus>> allowedFollowStatusByRole = new HashMap<>(); - - static { - NEU.allowedFollowStatusByRole.put(UserRole.EINHEITLICHER_ANSPRECHPARTNER, Set.of(WEITERGELEITET, VERWORFEN)); - IN_BEARBEITUNG.allowedFollowStatusByRole.put(UserRole.EINHEITLICHER_ANSPRECHPARTNER, Set.of(ABGESCHLOSSEN, WEITERGELEITET)); - VERWORFEN.allowedFollowStatusByRole.put(UserRole.EINHEITLICHER_ANSPRECHPARTNER, Set.of(NEU)); - ABGESCHLOSSEN.allowedFollowStatusByRole.put(UserRole.EINHEITLICHER_ANSPRECHPARTNER, Set.of(IN_BEARBEITUNG)); - - NEU.allowedFollowStatusByRole.put(UserRole.VERWALTUNG_USER, Set.of(ANGENOMMEN, VERWORFEN)); - VERWORFEN.allowedFollowStatusByRole.put(UserRole.VERWALTUNG_USER, Set.of(NEU)); - ANGENOMMEN.allowedFollowStatusByRole.put(UserRole.VERWALTUNG_USER, Set.of(IN_BEARBEITUNG)); - IN_BEARBEITUNG.allowedFollowStatusByRole.put(UserRole.VERWALTUNG_USER, Set.of(BESCHIEDEN, ANGENOMMEN, ABGESCHLOSSEN)); - BESCHIEDEN.allowedFollowStatusByRole.put(UserRole.VERWALTUNG_USER, Set.of(ABGESCHLOSSEN, IN_BEARBEITUNG)); - ABGESCHLOSSEN.allowedFollowStatusByRole.put(UserRole.VERWALTUNG_USER, Set.of(IN_BEARBEITUNG)); - } - - public boolean isTransactionAllowed(String userRole, VorgangStatus newStatus) { - if (Objects.isNull(allowedFollowStatusByRole.get(userRole))) { - return false; - } - return allowedFollowStatusByRole.get(userRole).contains(newStatus); - } - } - - String getId(); - - long getVersion(); - - VorgangStatus getStatus(); - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangAuthorizationService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangAuthorizationService.java deleted file mode 100644 index 4fe0e63ae6566eeda041b9dbf2e81d29375dbb16..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangAuthorizationService.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -@Service -class VorgangAuthorizationService { - - static final String VERIFY_BY_USER_ROLE = "@vorgangAuthorizationService.verifyByUserRole(returnObject.getContent())"; - - @Autowired - private CurrentUserService userService; - - public boolean verifyByUserRole(VorgangWithEingang vorgang) { - if (userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) { - return vorgang.getStatus() == VorgangStatus.NEU; - } - return true; - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java deleted file mode 100644 index 3b6facda1bdca1ad3dd53fa54f250e4df2cbda93..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.RepresentationModel; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.security.access.prepost.PostAuthorize; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.clientattribute.ClientAttributeService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.statistic.StatisticController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import jakarta.servlet.http.HttpServletResponse; - -@RestController -@RequestMapping(VorgangController.PATH) -public class VorgangController { - - static final String PATH = "/api/vorgangs"; // NOSONAR - static final String PARAM_SEARCH = "searchBy"; - static final String PARAM_PAGE = "page"; - static final String PARAM_LIMIT = "limit"; - static final String PARAM_ASSIGNED_TO = "assignedTo"; - static final String PARAM_STATUS = "status"; - static final String PARAM_NEXT_WIEDERVORLAGE_FRIST = "nextFrist"; - static final String PARAM_NACHRICHTEN = "nachrichten"; - - public static final String PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS = "exists"; - public static final String PARAM_NACHRICHTEN_UNGELESENE = "ungelesene"; - - @Autowired - private VorgangService vorgangService; - @Autowired - private VorgangModelAssembler modelAssembler; - - @Autowired - private ClientAttributeService clientAttributeService; - - @Autowired - private StatisticController statisticController; - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAll(@RequestParam int page, @RequestParam Integer limit) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit).build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_STATUS }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByStatus(@RequestParam int page, @RequestParam Integer limit, - @RequestParam VorgangStatus status) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder().status(Optional.of(status)).build()).build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_SEARCH }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllBySearchBy(@RequestParam int page, @RequestParam Integer limit, - @RequestParam String searchBy) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit).searchBy(Optional.of(searchBy)).build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedTo(@RequestParam int page, @RequestParam Integer limit, - @RequestParam UserId assignedTo) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder().filterByAssignedTo(true).assignedTo(asOptional(assignedTo)).build()).build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO, PARAM_SEARCH }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedToAndSearchBy(@RequestParam int page, @RequestParam Integer limit, - @RequestParam UserId assignedTo, @RequestParam String searchBy) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder().filterByAssignedTo(true).assignedTo(asOptional(assignedTo)).build()) - .searchBy(Optional.of(searchBy)) - .build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO, PARAM_STATUS }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedToAndStatus(@RequestParam int page, @RequestParam Integer limit, - @RequestParam UserId assignedTo, @RequestParam VorgangStatus status) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder() - .status(Optional.of(status)) - .filterByAssignedTo(true).assignedTo(asOptional(assignedTo)).build()) - .build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_NEXT_WIEDERVORLAGE_FRIST }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByHasNextWiedervorlageFrist(@RequestParam int page, @RequestParam Integer limit, - @RequestParam String nextFrist) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder() - .hasNextWiedervorlageFrist(existNextWiedervorlageFrist(nextFrist)).build()) - .build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO, PARAM_NEXT_WIEDERVORLAGE_FRIST }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedToAndHasNextWiedervorlageFrist(@RequestParam int page, - @RequestParam Integer limit, - @RequestParam UserId assignedTo, @RequestParam String nextFrist) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder() - .filterByAssignedTo(true).assignedTo(asOptional(assignedTo)) - .hasNextWiedervorlageFrist(existNextWiedervorlageFrist(nextFrist)) - .build()) - .build(); - - return handleGetAllRequest(requestCriteria); - } - - boolean existNextWiedervorlageFrist(String nextWiedervorlageFrist) { - return StringUtils.equals(nextWiedervorlageFrist, PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS); - } - - Optional<UserId> asOptional(UserId userId) { - return StringUtils.isEmpty(userId.toString()) ? Optional.empty() : Optional.of(userId); - } - - RepresentationModel<EntityModel<EnhancedVorgang>> handleGetAllRequest(FindVorgaengeHeaderRequestCriteria requestCriteria) { - var vorgaengeHeaderResponse = vorgangService.findVorgaengeHeader(requestCriteria); - - return modelAssembler.toCollectionModel(vorgaengeHeaderResponse.getVorgaengeHeader().stream(), vorgaengeHeaderResponse, requestCriteria, - statisticController.getVorgaengeStatistic()); - } - - @PostAuthorize(VorgangAuthorizationService.VERIFY_BY_USER_ROLE) - @GetMapping("/{vorgangId}") - public EntityModel<Vorgang> getVorgangWithEingang(@PathVariable String vorgangId) { - return modelAssembler.toModel(getVorgang(vorgangId)); - } - - public VorgangWithEingang getVorgang(String vorgangId) { - return vorgangService.findVorgangWithEingang(vorgangId); - } - - @PutMapping(path = "/{vorgangId}/hasNewPostfachNachricht", consumes = MediaType.APPLICATION_JSON_VALUE) - public void resetNewPostfachNachricht(@PathVariable String vorgangId, @RequestBody ResetNewPostfachNachrichtBody body, - HttpServletResponse response) { - if (body.isHasNewPostfachNachricht()) { - response.setStatus(HttpStatus.UNPROCESSABLE_ENTITY.value()); - return; - } - - clientAttributeService.resetPostfachNachricht(vorgangId); - response.setStatus(HttpStatus.NO_CONTENT.value()); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_NACHRICHTEN }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByUngeleseneNachrichten(@RequestParam int page, @RequestParam Integer limit, - @RequestParam String nachrichten) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder().hasUngeleseneNachrichten(PARAM_NACHRICHTEN_UNGELESENE.equals(nachrichten)).build()) - .build(); - - return handleGetAllRequest(requestCriteria); - } - - @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO, PARAM_NACHRICHTEN }) - public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedToAndUngeleseneNachrichten(@RequestParam int page, - @RequestParam Integer limit, @RequestParam UserId assignedTo, @RequestParam String nachrichten) { - var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) - .filterCriteria(FilterCriteria.builder() - .filterByAssignedTo(true).assignedTo(asOptional(assignedTo)) - .hasUngeleseneNachrichten(PARAM_NACHRICHTEN_UNGELESENE.equals(nachrichten)) - .build()) - .build(); - - return handleGetAllRequest(requestCriteria); - } - - public boolean isEditable(Vorgang vorgang) { - return vorgangService.isVorgangEditable(vorgang); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHead.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHead.java deleted file mode 100644 index 8cd2afc524e3fd7f24c9335823e6e1b57f44f8d0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHead.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class VorgangHead { - - private ServiceKonto serviceKonto; - private boolean locked; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHeader.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHeader.java deleted file mode 100644 index 095dfd131f3aeb751d197df5422efb18c32f5088..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHeader.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.LocalDate; -import java.time.ZonedDateTime; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonProperty.Access; - -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.user.UserId; -import lombok.Builder; -import lombok.Getter; -import lombok.With; - -@Getter -@Builder -class VorgangHeader implements Vorgang { - - @JsonIgnore - private String id; - @JsonIgnore - private long version; - - @LinkedUserProfileResource - private UserId assignedTo; - - private String name; - private VorgangStatus status; - private ZonedDateTime createdAt; - private String aktenzeichen; - private String nummer; - - @With - @JsonProperty(access = Access.READ_ONLY) - private LocalDate nextFrist; - - private boolean hasPostfachNachricht; - - private boolean hasNewPostfachNachricht; - - private Boolean antragBewilligt; - - private boolean archiving; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHeaderMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHeaderMapper.java deleted file mode 100644 index c7d0b102c241d120e654ac9bb77cb4566ae296eb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangHeaderMapper.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.LocalDate; -import java.util.List; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.alfa.common.clientattribute.ClientAttribute; -import de.ozgcloud.alfa.common.clientattribute.ClientAttributeUtils; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; - -@Mapper(uses = UserIdMapper.class, unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, imports = ClientAttribute.class) -interface VorgangHeaderMapper { - - @Mapping(target = "nextFrist", source = "clientAttributesList") - @Mapping(target = "antragBewilligt", source = "clientAttributesList") - @Mapping(target = "hasPostfachNachricht", expression = "java(mapBoolClientAttribute(vorgangHeader.getClientAttributesList(), ClientAttribute.HAS_POSTFACH_NACHRICHT))") - @Mapping(target = "hasNewPostfachNachricht", expression = "java(mapBoolClientAttribute(vorgangHeader.getClientAttributesList(), ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT))") - @Mapping(target = "archiving", expression = "java(mapBoolClientAttribute(vorgangHeader.getClientAttributesList(), ClientAttribute.ARCHIVING))") - VorgangHeader toVorgangHeader(GrpcVorgangHeader vorgangHeader); - - default LocalDate mapNextFrist(List<GrpcClientAttribute> clientAttributes) { - return ClientAttributeUtils.findGrpcValue(ClientAttribute.WIEDERVORLAGE_NEXT_FRIST, clientAttributes) - .map(GrpcClientAttributeValue::getStringValue) - .map(LocalDate::parse).orElse(null); - } - - default boolean mapBoolClientAttribute(List<GrpcClientAttribute> grpcClientAttributes, ClientAttribute clientAttribute) { - return ClientAttributeUtils.findGrpcValue(clientAttribute, grpcClientAttributes) - .map(GrpcClientAttributeValue::getBoolValue) - .orElse(false); - } - - default Boolean mapAntragBewilligt(List<GrpcClientAttribute> grpcClientAttributes) { - return ClientAttributeUtils.findGrpcValue(ClientAttribute.ANTRAG_BEWILLIGT, grpcClientAttributes) - .map(GrpcClientAttributeValue::getBoolValue) - .orElse(null); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java deleted file mode 100644 index 47c76b1574946937db404c0342d93411f029cc6d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.RepresentationModel; -import org.springframework.hateoas.mediatype.hal.HalModelBuilder; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; -import org.springframework.web.util.UriComponentsBuilder; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.statistic.Statistic; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, EntityModel<Vorgang>> { - - static final String REL_NEXT = "next"; - static final String REL_PREVIOUS = "previous"; - static final String REL_VORGANG_MIT_EINGANG = "vorgang-mit-eingang"; - static final String REL_WIEDERVORLAGEN = "wiedervorlagen"; - static final String REL_VORGANG_ASSIGN = "assign"; - - private final CurrentUserService userService; - private final VorgangService vorgangService; - - public RepresentationModel<EntityModel<EnhancedVorgang>> toCollectionModel(Stream<VorgangHeader> entities, VorgaengeHeaderResponse response, - FindVorgaengeHeaderRequestCriteria requestCriteria, Statistic statistic) { - var model = initModel(entities, statistic); - - getPreviousPage(requestCriteria.getPage()).map(page -> buildPageLink(page, REL_PREVIOUS, requestCriteria)).ifPresent(model::add); - getNextPage(response, requestCriteria).map(page -> buildPageLink(page, REL_NEXT, requestCriteria)).ifPresent(model::add); - - return model; - } - - RepresentationModel<EntityModel<EnhancedVorgang>> initModel(Stream<VorgangHeader> entities, Statistic statistic) { - return HalModelBuilder.halModelOf(EnhancedVorgang.builder().statistic(statistic).build()) - .link(linkTo(VorgangController.class).withSelfRel()) - .embed(entities.map(this::toModel).toList()) - .build(); - } - - Optional<Integer> getPreviousPage(int currentPage) { - return isFirstPage(currentPage) ? Optional.empty() : Optional.of(currentPage - 1); - } - - Optional<Integer> getNextPage(VorgaengeHeaderResponse response, FindVorgaengeHeaderRequestCriteria requestCriteria) { - return Optional.of(getLastEntryIndex(requestCriteria, response.getVorgaengeHeader().size())) - .filter(index -> response.getTotal() > index) - .map(index -> requestCriteria.getPage() + 1); - } - - int getLastEntryIndex(FindVorgaengeHeaderRequestCriteria requestCriteria, int currentPageSize) { - if (isFirstPage(requestCriteria.getPage())) { - return currentPageSize; - } - return currentPageSize + (requestCriteria.getPage() * requestCriteria.getLimit()); - } - - private boolean isFirstPage(int currentPage) { - return currentPage == 0; - } - - Link buildPageLink(int page, String linkRel, FindVorgaengeHeaderRequestCriteria requestCriteria) { - var uriBuilder = createVorgangUriBuilder(page, requestCriteria); - - requestCriteria.getSearchBy().ifPresent(searchBy -> uriBuilder.queryParam(VorgangController.PARAM_SEARCH, searchBy)); - handleAssignedTo(uriBuilder, requestCriteria); - requestCriteria.getFilterCriteria().getStatus().ifPresent(status -> uriBuilder.queryParam(VorgangController.PARAM_STATUS, status)); - handleNextWiedevorlageFrist(uriBuilder, requestCriteria); - - return Link.of(uriBuilder.build().toUri().toASCIIString()).withRel(linkRel); - } - - private void handleAssignedTo(UriComponentsBuilder uriBuilder, FindVorgaengeHeaderRequestCriteria requestCriteria) { - if (requestCriteria.getFilterCriteria().isFilterByAssignedTo()) { - uriBuilder.queryParam(VorgangController.PARAM_ASSIGNED_TO, getAssignedToValue(requestCriteria.getFilterCriteria())); - } - } - - private void handleNextWiedevorlageFrist(UriComponentsBuilder uriBuilder, FindVorgaengeHeaderRequestCriteria requestCriteria) { - if (requestCriteria.getFilterCriteria().isHasNextWiedervorlageFrist()) { - uriBuilder.queryParam(VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST, VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS); - } - } - - UriComponentsBuilder createVorgangUriBuilder(int page, FindVorgaengeHeaderRequestCriteria requestCriteria) { - return linkTo(VorgangController.class).toUriComponentsBuilder() - .queryParam(VorgangController.PARAM_PAGE, page) - .queryParam(VorgangController.PARAM_LIMIT, requestCriteria.getLimit()); - } - - String getAssignedToValue(FilterCriteria filterCriteria) { - return filterCriteria.getAssignedTo().map(UserId::toString).orElse(StringUtils.EMPTY); - } - - @Override - public EntityModel<Vorgang> toModel(Vorgang vorgang) { - var selfLinkBuilder = linkTo(VorgangController.class).slash(vorgang.getId()); - var assignLink = linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), - vorgang.getVersion(), null)).withRel(REL_VORGANG_ASSIGN); - var wiedervorlagenLink = linkTo(methodOn(WiedervorlageController.class).findByVorgang(vorgang.getId())).withRel(REL_WIEDERVORLAGEN); - - return ModelBuilder.fromEntity(vorgang) - .addLink(selfLinkBuilder.withSelfRel()) - .addLink(selfLinkBuilder.withRel(REL_VORGANG_MIT_EINGANG)) - .ifMatch(() -> isAssigneable(vorgang)) - .addLink(assignLink) - .ifMatch(() -> userService.hasRole(UserRole.VERWALTUNG_USER)).addLink(wiedervorlagenLink) - .buildModel(); - } - - boolean isAssigneable(Vorgang vorgang) { - return (userService.hasRole(UserRole.VERWALTUNG_USER) || userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) - && vorgangService.isVorgangEditable(vorgang); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProcessorProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProcessorProperties.java deleted file mode 100644 index 662a1602ab1d17dc98b9bcfff6f558b64357c1b3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProcessorProperties.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Collections; -import java.util.List; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.vorgang") -public class VorgangProcessorProperties { - - /** - * Matching condition for processing based on vorgang#formId and vorgang#formEngineName. - */ - private List<VorgangProperty> processor = Collections.emptyList(); - - /** - * Name of used processor. - */ - private List<String> processorNames = Collections.emptyList(); - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java deleted file mode 100644 index 700ace1b4ca05848b025503ea7046bd6899f4fd1..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangProperties.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Collections; -import java.util.List; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.vorgang") -public class VorgangProperties { - - /** - * List of Vorgänge for which notices can be issued. - */ - private List<VorgangProperty> bescheid = Collections.emptyList(); - - @Builder - @Setter - @Getter - public static class VorgangProperty { - - /** - * ID of the received formular - */ - private String formId; - /** - * Name of the form engine providing the used formular - */ - private String formEngineName; - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java deleted file mode 100644 index c693187e0ad13beaab53a06145eaf65d94f4b23e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.vorgang.common.GrpcQueryOperator; -import de.ozgcloud.vorgang.vorgang.GrpcFilterBy; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse; -import de.ozgcloud.vorgang.vorgang.GrpcQuery; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression; -import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class VorgangRemoteService { - - static final String VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH = "ClientAttribute.OzgCloud_NachrichtenManager.hasNewPostfachNachricht"; - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private VorgangServiceBlockingStub vorgangServiceStub; - @Autowired - private VorgangHeaderMapper vorgangHeaderMapper; - @Autowired - private VorgangWithEingangMapper vorgangWithEingangMapper; - - public VorgaengeHeaderResponse findVorgaengeHeader(FindVorgaengeHeaderRequestCriteria requestCriteria, FilterCriteria filterCriteria) { - var request = buildFindVorgangRequest(requestCriteria, filterCriteria); - - var response = vorgangServiceStub.findVorgang(request); - - return buildVorgaengeHeaderResponse(response); - } - - GrpcFindVorgangRequest buildFindVorgangRequest(FindVorgaengeHeaderRequestCriteria requestCriteria, FilterCriteria filterCriteria) { - var requestBuilder = createFindVorgangRequestBuilder(requestCriteria, filterCriteria); - - requestCriteria.getSearchBy().ifPresent(requestBuilder::setSearchBy); - - return requestBuilder.build(); - } - - private GrpcFindVorgangRequest.Builder createFindVorgangRequestBuilder(FindVorgaengeHeaderRequestCriteria requestCriteria, - FilterCriteria filterCriteria) { - return GrpcFindVorgangRequest.newBuilder() - .setOrderBy(GrpcOrderBy.valueOf(requestCriteria.getOrderBy().name())) - .setLimit(requestCriteria.getLimit()) - .setOffset(requestCriteria.getPage() * requestCriteria.getLimit()) - .setQuery(createQuery(filterCriteria)) - .setFilterBy(createFilterBy(filterCriteria)); - } - - GrpcQuery createQuery(FilterCriteria filterCriteria) { - var queryBuilder = GrpcQuery.newBuilder(); - if (filterCriteria.isHasUngeleseneNachrichten()) { - addUngeleseneNachrichtenExpression(queryBuilder); - } - return queryBuilder.build(); - } - - private void addUngeleseneNachrichtenExpression(GrpcQuery.Builder queryBuilder) { - queryBuilder.addExpressions(GrpcVorgangQueryExpression.newBuilder() - .setPath(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH) - .setOperator(GrpcQueryOperator.EQUAL) - .setOperandBoolValue(true) - .build()); - } - - VorgaengeHeaderResponse buildVorgaengeHeaderResponse(GrpcFindVorgangResponse response) { - return VorgaengeHeaderResponse.builder().total(response.getTotal()).vorgaengeHeader(getVorgaengeHeaderFromResponse(response)).build(); - } - - private List<VorgangHeader> getVorgaengeHeaderFromResponse(GrpcFindVorgangResponse response) { - return response.getVorgangList().stream().map(vorgangHeaderMapper::toVorgangHeader).toList(); - } - - public VorgangWithEingang findVorgangWithEingang(String vorgangId, FilterCriteria filterCriteria) { - var request = buildFindVorgangWithEingangRequest(vorgangId, filterCriteria); - - var response = vorgangServiceStub.findVorgangWithEingang(request); - - return buildVorgangWithEingangResponse(response); - } - - GrpcFindVorgangWithEingangRequest buildFindVorgangWithEingangRequest(String vorgangId, FilterCriteria filterCriteria) { - return GrpcFindVorgangWithEingangRequest.newBuilder().setId(vorgangId).setFilterBy(createFilterBy(filterCriteria)).build(); - } - - GrpcFilterBy createFilterBy(FilterCriteria filterCriteria) { - var filterCriteriaBuilder = GrpcFilterBy.newBuilder() - .setFilterByAssignedTo(filterCriteria.isFilterByAssignedTo()) - .setFilterByOrganisationseinheitenId(filterCriteria.isFilterByOrganisationseinheitenId()) - .addAllOrganisationseinheitId(filterCriteria.getOrganisationsEinheitenId()) - .setHasNextWiedervorlageFrist(filterCriteria.isHasNextWiedervorlageFrist()); - - filterCriteria.getAssignedTo().ifPresent(assignedTo -> filterCriteriaBuilder.setAssignedTo(assignedTo.toString())); - filterCriteria.getStatus().ifPresent(status -> filterCriteriaBuilder.addStatus(status.toString())); - - return filterCriteriaBuilder.build(); - } - - private VorgangWithEingang buildVorgangWithEingangResponse(GrpcFindVorgangWithEingangResponse response) { - return vorgangWithEingangMapper.toVorgangWithEingang(response.getVorgangWithEingang()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java deleted file mode 100644 index cb9bb12fbd8121227543a03eb95a7b38b4b2e0e0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Collection; -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -@Service -class VorgangService { - - @Autowired - private VorgangRemoteService remoteService; - @Autowired - private CurrentUserService userService; - - public VorgaengeHeaderResponse findVorgaengeHeader(FindVorgaengeHeaderRequestCriteria requestCriteria) { - requestCriteria = setOrderBy(requestCriteria); - - return remoteService.findVorgaengeHeader(requestCriteria, buildFilterCriteria(requestCriteria.getFilterCriteria())); - } - - FindVorgaengeHeaderRequestCriteria setOrderBy(FindVorgaengeHeaderRequestCriteria requestCriteria) { - if (userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) { - return requestCriteria.toBuilder().orderBy(OrderBy.EA_PRIORITY).build(); - } - if (userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) { - return requestCriteria.toBuilder().orderBy(OrderBy.PRIORITY).build(); - } - return setOrderByForVerwaltungUser(requestCriteria); - } - - private FindVorgaengeHeaderRequestCriteria setOrderByForVerwaltungUser(FindVorgaengeHeaderRequestCriteria requestCriteria) { - if (requestCriteria.getFilterCriteria().getStatus().isPresent()) { - return requestCriteria.toBuilder().orderBy(OrderBy.CREATED_AT_DESC).build(); - } - if (requestCriteria.getFilterCriteria().isHasNextWiedervorlageFrist()) { - return requestCriteria.toBuilder().orderBy(OrderBy.NEXT_WIEDERVORLAGE_FRIST).build(); - } - return requestCriteria.toBuilder().orderBy(OrderBy.PRIORITY).build(); - } - - public VorgangWithEingang findVorgangWithEingang(String vorgangId) { - return remoteService.findVorgangWithEingang(vorgangId, buildFilterCriteria(FilterCriteria.builder().build())); - } - - FilterCriteria buildFilterCriteria(FilterCriteria filterCriteria) { - if (userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) { - return buildFilterByForPoststelle(filterCriteria); - } - if (userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) { - return buildFilterByForEa(filterCriteria); - } - return buildFilterByForOtherRoles(filterCriteria); - } - - private FilterCriteria buildFilterByForPoststelle(FilterCriteria filterCriteria) { - return filterCriteria.toBuilder().filterByOrganisationseinheitenId(false).status(Optional.of(VorgangStatus.NEU)).build(); - } - - private FilterCriteria buildFilterByForEa(FilterCriteria filterCriteria) { - return filterCriteria.toBuilder().filterByOrganisationseinheitenId(false).build(); - } - - private FilterCriteria buildFilterByForOtherRoles(FilterCriteria filterCriteria) { - return filterCriteria.toBuilder().filterByOrganisationseinheitenId(true).organisationsEinheitenId(getOrganisationseinheitenIdsFromUser()) - .build(); - } - - private Collection<String> getOrganisationseinheitenIdsFromUser() { - return userService.getUser().getOrganisationseinheitIds(); - } - - public boolean isVorgangEditable(Vorgang vorgang) { - var vorgangWithEingang = vorgang instanceof VorgangWithEingang ? - (VorgangWithEingang) vorgang : - findVorgangWithEingang(vorgang.getId()); - return isVorgangWithEingangEditable(vorgangWithEingang); - } - - boolean isVorgangWithEingangEditable(VorgangWithEingang vorgang) { - return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN && (vorgang.getHeader() == null || !vorgang.getHeader().isLocked()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java deleted file mode 100644 index 45496925eaebd1b28aacb558acb55ba824855013..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangURIResolver.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Optional; -import java.util.regex.Pattern; - -import org.springframework.hateoas.Link; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.resource.OzgcloudResourceURIResolver; - -@Component -class VorgangURIResolver implements OzgcloudResourceURIResolver { - - static final String REL_NAME = "vorgang"; - - private final Pattern pattern = Pattern.compile(".+/vorgangs/([^/]+)"); - - @Override - public Optional<Link> resolve(String uri) { - var matcher = pattern.matcher(uri); - if (!matcher.matches()) { - return Optional.empty(); - } - var vorgangId = matcher.group(1); - return Optional.of(linkTo(VorgangController.class).slash(vorgangId).withRel(REL_NAME)); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingang.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingang.java deleted file mode 100644 index 7282f013f7d686ce4ea854079365ba808760371f..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingang.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import jakarta.annotation.Nullable; -import java.time.ZonedDateTime; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.user.UserId; -import java.util.Optional; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Builder -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -public class VorgangWithEingang implements Vorgang { - - @JsonIgnore - private String id; - @JsonIgnore - private long version; - - @LinkedUserProfileResource - private UserId assignedTo; - - private String name; - private VorgangStatus status; - private ZonedDateTime createdAt; - private String aktenzeichen; - private String nummer; - private boolean hasNewPostfachNachricht; - - private VorgangHead header; - - private Eingang eingang; - - @JsonIgnore - @Nullable - public String getOrganisationseinheitenID() { - return Optional.ofNullable(getEingang()) - .map(Eingang::getZustaendigeStelle) - .map(ZustaendigeStelle::getOrganisationseinheitenId) - .orElse(null); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapper.java deleted file mode 100644 index ba60698fca8bc039d34a7202a1b6b0ba3038751d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapper.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -import de.ozgcloud.alfa.common.BaseTypesMapper; -import de.ozgcloud.alfa.common.clientattribute.ClientAttribute; -import de.ozgcloud.alfa.common.clientattribute.ClientAttributeUtils; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHead; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang; - -@Mapper(uses = { EingangMapper.class, UserIdMapper.class, BaseTypesMapper.class, ServiceKontoMapper.class }) -interface VorgangWithEingangMapper { - - @Mapping(target = "hasNewPostfachNachricht", source = "clientAttributesList") - VorgangWithEingang toVorgangWithEingang(GrpcVorgangWithEingang vorgangMitEingang); - - default boolean mapHasNewPostfachNachricht(List<GrpcClientAttribute> clientAttributes) { - return ClientAttributeUtils - .findGrpcValue(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, clientAttributes) - .map(GrpcClientAttributeValue::getBoolValue) - .orElse(false); - } - - @Mapping(target = "locked", expression = "java(vorgangHead.hasLock())") - VorgangHead toVorgangHead(GrpcVorgangHead vorgangHead); -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java deleted file mode 100644 index 38e6b3c7e13f35faeab1684111fc787a69361da3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.attachment.AttachmentByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.historie.HistorieController; -import de.ozgcloud.alfa.kommentar.KommentarController.KommentarByVorgangController; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.representation.RepresentationByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class VorgangWithEingangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - - static final LinkRelation REL_KOMMENTARE = LinkRelation.of("kommentare"); - static final LinkRelation REL_ATTACHMENTS = LinkRelation.of("attachments"); - static final LinkRelation REL_DOWNLOAD_ATTACHMENTS = LinkRelation.of("downloadAttachments"); - static final LinkRelation REL_REPRESENTATIONS = LinkRelation.of("representations"); - static final LinkRelation REL_POSTFACH_MAILS = LinkRelation.of("postfachMails"); - static final LinkRelation REL_VORGANG_FORWARDING = LinkRelation.of("forwarding"); - static final LinkRelation REL_HISTORIE = LinkRelation.of("historie"); - static final LinkRelation REL_PROCESS_VORGANG = LinkRelation.of("processVorgang"); - - static final String REL_SEARCH_USER = "search-user-profiles"; - static final String USER_PROFILE_SEARCH_DELETED_PARAM = "deleted"; - static final String USER_PROFILE_SEARCH_ORGANISATIONS_EINHEIT_ID_PARAM = "organisationsEinheitId"; - - private final PostfachMailController postfachMailController; - private final CurrentUserService userService; - private final UserManagerUrlProvider userManagerUrlProvider; - - private final VorgangProcessorProperties vorgangProcessorProperties; - - private static final Predicate<VorgangWithEingang> HAS_ATTACHMENTS = vorgangWithEingang -> vorgangWithEingang.getEingang() - .getNumberOfAttachments() > 0; - - private static final Predicate<VorgangWithEingang> HAS_REPRESENTATIONS = vorgangWithEingang -> vorgangWithEingang.getEingang() - .getNumberOfRepresentations() > 0; - - @Override - public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { - var vorgang = model.getContent(); - - if (Objects.isNull(vorgang)) { - return model; - } - - return ModelBuilder.fromModel(model) - .addLink(linkTo(KommentarByVorgangController.class).slash(vorgang.getId()).slash("kommentars").withRel(REL_KOMMENTARE)) - .ifMatch(HAS_ATTACHMENTS) - .addLinks(linkTo(methodOn(AttachmentByVorgangController.class).getAllByVorgang(vorgang.getId())) - .withRel(REL_ATTACHMENTS), - linkTo(methodOn(AttachmentByVorgangController.class).download(vorgang.getId())) - .withRel(REL_DOWNLOAD_ATTACHMENTS)) - .ifMatch(HAS_REPRESENTATIONS) - .addLink(linkTo(methodOn(RepresentationByVorgangController.class).getAll(vorgang.getId())) - .withRel(REL_REPRESENTATIONS)) - .ifMatch(this::isPostfachConfigured) - .addLink(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withRel(REL_POSTFACH_MAILS)) - .ifMatch(this::isEinheitlicherAnsprechpartner) - .addLink(linkTo(methodOn(ForwardingController.class).findByVorgangId(vorgang.getId())).withRel(REL_VORGANG_FORWARDING)) - .addLink(linkTo(methodOn(HistorieController.class).getAll(vorgang.getId())).withRel(REL_HISTORIE)) - .ifMatch(() -> userManagerUrlProvider.isConfiguredForSearchUserProfile() && hasOrganisationsEinheitId(vorgang)) - .addLink(this::buildSearchUserProfilesLink) - .ifMatch(this::isProcessable) - .addLink( - () -> linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), - null)).withRel(REL_PROCESS_VORGANG)) - .buildModel(); - } - - private boolean isPostfachConfigured(VorgangWithEingang vorgang) { - return postfachMailController.isPostfachConfigured(); - } - - private boolean isEinheitlicherAnsprechpartner(VorgangWithEingang vorgang) { - return userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); - } - - private Link buildSearchUserProfilesLink(VorgangWithEingang vorgang) { - return Link.of(userManagerUrlProvider.getSearchUserProfilesTemplate() - .queryParam(USER_PROFILE_SEARCH_DELETED_PARAM, false) - .queryParam(USER_PROFILE_SEARCH_ORGANISATIONS_EINHEIT_ID_PARAM, getOrganisationsEinheitId(vorgang)) - .build(false).toUriString(), REL_SEARCH_USER); - } - - private boolean hasOrganisationsEinheitId(VorgangWithEingang vorgang) { - return Optional.of(vorgang.getEingang()).map(Eingang::getZustaendigeStelle).map(ZustaendigeStelle::getOrganisationseinheitenId).isPresent(); - } - - private String getOrganisationsEinheitId(VorgangWithEingang vorgang) { - return vorgang.getEingang().getZustaendigeStelle().getOrganisationseinheitenId(); - } - - private boolean isProcessable(VorgangWithEingang vorgang) { - return isAnyFormIdAndFormEngineNameMatching(vorgang.getEingang().getHeader(), vorgangProcessorProperties.getProcessor()); - } - - private boolean isAnyFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, List<VorgangProperty> properties) { - return properties.stream().anyMatch(prop -> isFormIdAndFormEngineNameMatching(eingangHeader, prop)); - } - - private boolean isFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, VorgangProperty property) { - return property.getFormId().equals(eingangHeader.getFormId()) && property.getFormEngineName().equals(eingangHeader.getFormEngineName()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangResponse.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangResponse.java deleted file mode 100644 index 927ebda877b6b11ecce90754381e799a1dfe4e61..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangResponse.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class VorgangWithEingangResponse { - private VorgangWithEingang vorgangWithEingang; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelle.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelle.java deleted file mode 100644 index 6b243016cc3e058df28b979e9779e4422d51a598..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelle.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class ZustaendigeStelle { - - private String organisationseinheitenId; - private String email; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleMapper.java deleted file mode 100644 index f0127e386af7ff4865aa8bac62b27a55630f82f1..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import org.mapstruct.Mapper; - -import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; - -@Mapper -interface ZustaendigeStelleMapper { - - ZustaendigeStelle mapToZustaendigeStelle(GrpcZustaendigeStelle grpcZustaendigeStelle); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java deleted file mode 100644 index 75b537da45bf69aaafece14961ba5db974837cfd..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang.command; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; - -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.RequiredArgsConstructor; - -@Component -@RequiredArgsConstructor -class VorgangCommandProcessor implements RepresentationModelProcessor<EntityModel<? extends Vorgang>> { - - static final LinkRelation REL_VORGANG_ANNEHMEN = LinkRelation.of("annehmen"); - static final LinkRelation REL_VORGANG_VERWERFEN = LinkRelation.of("verwerfen"); - static final LinkRelation REL_VORGANG_ZURUECKHOLEN = LinkRelation.of("zurueckholen"); - static final LinkRelation REL_VORGANG_BEARBEITEN = LinkRelation.of("bearbeiten"); - static final LinkRelation REL_VORGANG_BESCHEIDEN = LinkRelation.of("bescheiden"); - static final LinkRelation REL_VORGANG_ZURUECKSTELLEN = LinkRelation.of("zurueckstellen"); - static final LinkRelation REL_VORGANG_ABSCHLIESSEN = LinkRelation.of("abschliessen"); - static final LinkRelation REL_VORGANG_WIEDEREROEFFNEN = LinkRelation.of("wiedereroeffnen"); - - private final CurrentUserService userService; - private final VorgangController vorgangController; - - @Override - public EntityModel<? extends Vorgang> process(EntityModel<? extends Vorgang> model) { - var vorgang = model.getContent(); - - if (Objects.isNull(vorgang) || !vorgangController.isEditable(vorgang)) { - return model; - } - - addLinkIfTransactionAllowed(VorgangStatus.ANGENOMMEN, getRelationForAngenommenByStatus(vorgang), vorgang, model); - addLinkIfTransactionAllowed(VorgangStatus.VERWORFEN, REL_VORGANG_VERWERFEN, vorgang, model); - addLinkIfTransactionAllowed(VorgangStatus.NEU, REL_VORGANG_ZURUECKHOLEN, vorgang, model); - addLinkIfTransactionAllowed(VorgangStatus.IN_BEARBEITUNG, getRelationForInBearbeitungByStatus(vorgang), vorgang, model); - addLinkIfTransactionAllowed(VorgangStatus.BESCHIEDEN, REL_VORGANG_BESCHEIDEN, vorgang, model); - addLinkIfTransactionAllowed(VorgangStatus.ABGESCHLOSSEN, REL_VORGANG_ABSCHLIESSEN, vorgang, model); - - return model; - } - - private LinkRelation getRelationForAngenommenByStatus(Vorgang vorgang) { - if (vorgang.getStatus() == VorgangStatus.NEU) { - return REL_VORGANG_ANNEHMEN; - } else { - return REL_VORGANG_ZURUECKSTELLEN; - } - } - - private LinkRelation getRelationForInBearbeitungByStatus(Vorgang vorgang) { - if (vorgang.getStatus() == VorgangStatus.ANGENOMMEN) { - return REL_VORGANG_BEARBEITEN; - } else { - return REL_VORGANG_WIEDEREROEFFNEN; - } - } - - private void addLinkIfTransactionAllowed(VorgangStatus newStatus, LinkRelation relation, Vorgang vorgang, EntityModel<? extends Vorgang> model) { - if (isTransactonAllowed(vorgang, newStatus)) { - addCreateCommandLink(relation, vorgang, model); - } - } - - private void addCreateCommandLink(LinkRelation relation, Vorgang vorgang, EntityModel<? extends Vorgang> model) { - model.add(linkTo(methodOn(CommandByRelationController.class) - .createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null)).withRel(relation)); - } - - private boolean isTransactonAllowed(Vorgang vorgang, VorgangStatus newStatus) { - return vorgang.getStatus().isTransactionAllowed(getUserRole(), newStatus); - } - - String getUserRole() { - String role; - if (userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) { - role = UserRole.EINHEITLICHER_ANSPRECHPARTNER; - } else if (userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) { - role = UserRole.VERWALTUNG_POSTSTELLE; - } else { - role = UserRole.VERWALTUNG_USER; - } - - return role; - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java deleted file mode 100644 index 1a4862869d9de93184e643671e9d1e4c327d8d4a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang.command; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Objects; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelProcessor; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; - -@Component -public class VorgangWithEingangCommandProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - - static final LinkRelation REL_VORGANG_FORWARD = LinkRelation.of("forward"); - static final LinkRelation REL_PENDING_COMMANDS = LinkRelation.of("pending-commands"); - - @Autowired - private CurrentUserService userService; - @Autowired - private ForwardingController forwardingController; - @Autowired - private CommandController commandController; - - @Override - public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { - var vorgang = model.getContent(); - if (Objects.isNull(vorgang)) { - return model; - } - return ModelBuilder.fromModel(model) - .ifMatch(this::isForwardingAllowed) - .addLink(linkTo( - methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), - null)).withRel(REL_VORGANG_FORWARD)) - .ifMatch(this::existsPendingCommands) - .addLink(linkTo(methodOn(CommandController.class).getPendingCommands(true, vorgang.getId())).withRel(REL_PENDING_COMMANDS)) - .buildModel(); - } - - boolean isForwardingAllowed(VorgangWithEingang vorgang) { - return userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER) - && (vorgang.getStatus() == VorgangStatus.NEU - || (vorgang.getStatus() == VorgangStatus.IN_BEARBEITUNG - && hasForwardingFailed(vorgang))); - } - - private boolean hasForwardingFailed(VorgangWithEingang vorgang) { - return !forwardingController.findFailedForwardings(vorgang.getId()).isEmpty(); - } - - private boolean existsPendingCommands(VorgangWithEingang vorgang) { - return commandController.existsPendingCommands(vorgang.getId()); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/Forwarding.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/Forwarding.java deleted file mode 100644 index 8bce269cf11e84e986cba4edbd1333eb066a186a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/Forwarding.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.time.ZonedDateTime; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class Forwarding { - - public enum Status { - NEW, SENT, SUCCESSFULL, SEND_ERROR, FAILED - } - - @JsonIgnore - private String id; - @JsonIgnore - private String vorgangId; - @JsonIgnore - private Status status; - - private String zustaendigeStelle; - - private ZonedDateTime createdAt; - private String createdBy; - private String createdByName; - - private ZonedDateTime sentAt; - - private String errorMessage; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingController.java deleted file mode 100644 index 62447cc7c136cee398917a79c4cf04d2af0081d2..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingController.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.vorgang.forwarding.Forwarding.Status; - -@RestController -@RequestMapping(ForwardingController.LIST_PATH) -public class ForwardingController { - - static final String LIST_PATH = "/api/forwardings"; // NOSONAR - - static final String PARAM_VORGANG_ID = "vorgangId"; - - static final Predicate<Forwarding> IS_FAILED_FORWARDING = forwarding -> forwarding.getStatus() == Status.FAILED - || forwarding.getStatus() == Status.SEND_ERROR; - - @Autowired - private ForwardingService service; - @Autowired - private ForwardingModelAssembler modelAssembler; - - @GetMapping(params = { PARAM_VORGANG_ID }) - public CollectionModel<EntityModel<Forwarding>> findByVorgangId(@RequestParam String vorgangId) { - return modelAssembler.toCollectionModel(findByVorgang(vorgangId)); - } - - public List<Forwarding> findFailedForwardings(String vorgangId) { - return findByVorgang(vorgangId).filter(IS_FAILED_FORWARDING).toList(); - } - - public Stream<Forwarding> findByVorgang(String vorgangId) { - return service.findByVorgang(vorgangId); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoService.java deleted file mode 100644 index 7eb50c08577e8293e2306e6ee986406f3787ed17..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoService.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.util.Collections; -import java.util.Objects; -import java.util.Set; - -import jakarta.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -class ForwardingLandesnetzInfoService { - - @Autowired(required = false) - private LandesnetzInfoReadService readService; - - private Set<String> landesnetzInfo = Collections.emptySet(); - - @PostConstruct - private void initLandesnetzList() { - if (Objects.isNull(readService)) { - LOG.info("Landesnetz-Info not configured."); - return; - } - - readService.readLandesnetzInfo().thenAccept(this::assingInfos); - } - - private void assingInfos(Set<String> lnInfos) { - this.landesnetzInfo = lnInfos; - LOG.info("{} Landesnetz-Infos entries read.", landesnetzInfo.size()); - } - - public boolean isEmailInLandesnetz(String email) { - return isLandesnetzIncludingDomain(getDomain(email)); - } - - private String getDomain(String email) { - return email.substring(email.lastIndexOf('@') + 1); - } - - private boolean isLandesnetzIncludingDomain(String emailDomain) { - return landesnetzInfo.contains(emailDomain) || - landesnetzInfo.stream().anyMatch(lnInfo -> isDomainMatching(lnInfo, emailDomain)); - } - - private boolean isDomainMatching(String netzDomain, String emailDomain) { - return emailDomain.endsWith(netzDomain); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingMapper.java deleted file mode 100644 index c8e7a4af92ff6d7177040e3c7050d9213781c50e..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import org.mapstruct.Mapper; - -import de.ozgcloud.alfa.common.TimeMapper; -import de.ozgcloud.vorgang.forwarding.GrpcForwarding; - -@Mapper(uses = TimeMapper.class) -public interface ForwardingMapper { - - Forwarding fromGrpc(GrpcForwarding forwarding); -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssembler.java deleted file mode 100644 index 8a4d1bb8c7c0f7c2133acbd6f67ffe7a13a84624..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssembler.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.vorgang.forwarding.Forwarding.Status; - -@Component -class ForwardingModelAssembler implements RepresentationModelAssembler<Forwarding, EntityModel<Forwarding>> { - - static final LinkRelation REL_MARK_AS_SUCCESS = LinkRelation.of("mark-as-success"); - static final LinkRelation REL_MARK_AS_FAIL = LinkRelation.of("mark-as-fail"); - - static final LinkRelation REL_SUCCESSFULL = LinkRelation.of("successfull"); - static final LinkRelation REL_FAILED = LinkRelation.of("failed"); - - static final LinkRelation REL_ERROR = LinkRelation.of("error"); - - static final Predicate<Forwarding> IS_SENT = forwarding -> forwarding.getStatus() == Status.SENT; - static final Predicate<Forwarding> IS_SUCCESSFULL = forwarding -> forwarding.getStatus() == Status.SUCCESSFULL; - static final Predicate<Forwarding> IS_SENT_OR_SUCCESSFULL = forwarding -> forwarding.getStatus() == Status.SENT - || forwarding.getStatus() == Status.SUCCESSFULL; - static final Predicate<Forwarding> IS_FAILED = forwarding -> forwarding.getStatus() == Status.FAILED; - static final Predicate<Forwarding> IS_SEND_ERROR = forwarding -> forwarding.getStatus() == Status.SEND_ERROR; - - @Override - public EntityModel<Forwarding> toModel(Forwarding entity) { - var selfLink = linkTo(ForwardingController.class).slash(entity.getId()); - - return ModelBuilder.fromEntity(entity) - .addLink(linkTo(ForwardingController.class).slash(entity.getId()).withSelfRel()) - .ifMatch(IS_SENT) - .addLinks(buildMarkAsSuccessLink(entity)) - .ifMatch(IS_SENT_OR_SUCCESSFULL) - .addLinks(buildMarkAsFailLink(entity)) - .ifMatch(IS_FAILED) - .addLink(selfLink.withRel(REL_FAILED)) - .ifMatch(IS_SUCCESSFULL) - .addLink(selfLink.withRel(REL_SUCCESSFULL)) - .ifMatch(IS_SEND_ERROR) - .addLink(selfLink.withRel(REL_ERROR)) - .buildModel(); - } - - public CollectionModel<EntityModel<Forwarding>> toCollectionModel(Stream<Forwarding> entities) { - return CollectionModel.of(entities.map(this::toModel).toList(), linkTo(ForwardingController.class).withSelfRel()); - } - - public Link buildMarkAsSuccessLink(Forwarding forwarding) { - return buildLinkWithLinkRel(forwarding, REL_MARK_AS_SUCCESS); - } - - public Link buildMarkAsFailLink(Forwarding forwarding) { - return buildLinkWithLinkRel(forwarding, REL_MARK_AS_FAIL); - } - - private Link buildLinkWithLinkRel(Forwarding forwarding, LinkRelation linkRel) { - return linkTo(methodOn(CommandByRelationController.class).createCommand(forwarding.getVorgangId(), forwarding.getId(), -1, null)) - .withRel(linkRel); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordSizeConstraint.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordSizeConstraint.java deleted file mode 100644 index 11fec98c49d8e183569257701ddee46a7e9d432d..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordSizeConstraint.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.*; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import jakarta.validation.Constraint; -import jakarta.validation.Payload; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; - -@Retention(RUNTIME) -@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE }) -@Constraint(validatedBy = { ForwardingPasswordValidator.class }) -@Documented -public @interface ForwardingPasswordSizeConstraint { - String message() default ValidationMessageCodes.FIELD_SIZE; - - Class<?>[] groups() default {}; - - Class<? extends Payload>[] payload() default {}; - - int max() default 40; - - int min() default 8; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidator.java deleted file mode 100644 index 1c6a82af0f9256a1373ae927cfa0ada3a21f163b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidator.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import jakarta.validation.ConstraintValidator; -import jakarta.validation.ConstraintValidatorContext; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; - -class ForwardingPasswordValidator implements ConstraintValidator<ForwardingPasswordSizeConstraint, RedirectRequest> { - - @Autowired - private ForwardingLandesnetzInfoService landesnetzInfoService; - - @Override - public boolean isValid(RedirectRequest request, ConstraintValidatorContext context) { - if (StringUtils.isNotBlank(request.getEmail()) && isNotInLandesnetz(request.getEmail())) { - prepareConstraint(context); - - return isValidPassword(request); - } - return true; - } - - private boolean isNotInLandesnetz(String email) { - return !landesnetzInfoService.isEmailInLandesnetz(email); - } - - boolean isValidPassword(RedirectRequest request) { - var password = request.getPassword(); - var constraint = request.getClass().getAnnotation(ForwardingPasswordSizeConstraint.class); - - return ArrayUtils.isNotEmpty(password) && password.length >= constraint.min() && password.length <= constraint.max(); - } - - void prepareConstraint(ConstraintValidatorContext context) { - context.disableDefaultConstraintViolation(); - context.buildConstraintViolationWithTemplate(ValidationMessageCodes.FIELD_SIZE) - .addPropertyNode("password").addConstraintViolation(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteService.java deleted file mode 100644 index 85ca4d49cb0aec55df057dfc245bfb07364b4e0c..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.vorgang.forwarding.ForwardingServiceGrpc.ForwardingServiceBlockingStub; -import de.ozgcloud.vorgang.forwarding.GrpcFindForwardingsRequest; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class ForwardingRemoteService { - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private ForwardingServiceBlockingStub serviceStub; - - @Autowired - private ForwardingMapper mapper; - - @Autowired - private ContextService contextService; - - public Stream<Forwarding> findForwardings(String vorgangId) { - var response = serviceStub.findForwardings(buildFindForwardingsRequest(vorgangId)); - - return response.getForwardingsList().stream().map(mapper::fromGrpc); - } - - private GrpcFindForwardingsRequest buildFindForwardingsRequest(String vorgangId) { - return GrpcFindForwardingsRequest.newBuilder() - .setContext(contextService.createCallContext()) - .setVorgangId(vorgangId) - .build(); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingService.java deleted file mode 100644 index abd68ad81cff15f504bd1853839bafd05223d148..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -class ForwardingService { - - @Autowired - private ForwardingRemoteService remoteService; - - public Stream<Forwarding> findByVorgang(String vorgangId) { - return remoteService.findForwardings(vorgangId); - } -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoProperties.java deleted file mode 100644 index 010b4798226e61d67d2f7579e289e8cd09b41904..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoProperties.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = LandesnetzInfoProperties.LNINFO_CONFIG_PREFIX) -public class LandesnetzInfoProperties { - - static final String LNINFO_CONFIG_PREFIX = "ozgcloud.forwarding.lninfo"; - - /** - * Url of LandesnetzInfo html/file location. - */ - private Resource url; -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadService.java deleted file mode 100644 index 24e63abf3ec8079d2e4bbad6869621409c949d43..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadService.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.Collections; -import java.util.HashSet; -import java.util.Optional; -import java.util.Scanner; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.regex.Pattern; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@Service -@ConditionalOnProperty(prefix = LandesnetzInfoProperties.LNINFO_CONFIG_PREFIX, name = { "url" }) -class LandesnetzInfoReadService { - - static final Pattern SH_SECTION_START = Pattern.compile(".*Beginn Schleswig-Holstein.*", Pattern.CASE_INSENSITIVE); - static final Pattern SH_SECTION_END = Pattern.compile(".*Ende Schleswig-Holstein.*", Pattern.CASE_INSENSITIVE); - - @Autowired - private LandesnetzInfoProperties properties; - - @Async - public CompletableFuture<Set<String>> readLandesnetzInfo() { - try { - return getInputStream() - .map(this::readFile) - .map(CompletableFuture::completedFuture) - .orElseGet(() -> { - LOG.warn("No Landesnetz-Information found"); - return CompletableFuture.completedFuture(Collections.emptySet()); - }); - } catch (RuntimeException e) { - LOG.error("Error on reading Landesnetz-Infos.", e); - } - return CompletableFuture.completedFuture(Collections.emptySet()); - } - - private Optional<InputStream> getInputStream() { - try { - return Optional.ofNullable(properties.getUrl().getInputStream()); - } catch (IOException e) { - throw new TechnicalException("Error on reading Landesnetz-Infos", e); - } - } - - Set<String> readFile(InputStream fileInputStream) { - try(var fileScanner = new Scanner(fileInputStream, StandardCharsets.UTF_8)){ - while (fileScanner.hasNextLine()) { - var line = fileScanner.nextLine(); - if (isStartOfSection(line)) { - return readSection(fileScanner); - } - } - } - return Collections.emptySet(); - } - - boolean isStartOfSection(String line) { - return SH_SECTION_START.matcher(line).matches(); - } - - Set<String> readSection(Scanner sectionScanner) { - var result = new HashSet<String>(); - while (sectionScanner.hasNextLine()) { - var line = sectionScanner.nextLine(); - if (isEndOfSection(line)) { - return Collections.unmodifiableSet(result); - } - if (isCommentedLine(line)) { - continue; - } - getFirstColumn(line).ifPresent(result::add); - } - - return Collections.emptySet(); - } - - boolean isEndOfSection(String line) { - return SH_SECTION_END.matcher(line).matches(); - } - - boolean isCommentedLine(String line) { - return line.startsWith("#"); - } - - Optional<String> getFirstColumn(String line) { - return Optional.of(line.split("\\s+")[0]).filter(StringUtils::isNoneBlank); - } - -} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/RedirectRequest.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/RedirectRequest.java deleted file mode 100644 index e07009c3843824afbcdeeae985e0b4837becc700..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/RedirectRequest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotEmpty; - -import org.springframework.validation.annotation.Validated; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonProperty.Access; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Builder -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PUBLIC) -@ToString -@ForwardingPasswordSizeConstraint -@Validated -public class RedirectRequest { - - @NotEmpty(message = FIELD_IS_EMPTY) - @Email(message = FIELD_INVALID) - private String email; - - @JsonProperty(access = Access.WRITE_ONLY) - private char[] password; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/Wiedervorlage.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/Wiedervorlage.java deleted file mode 100644 index 17a5b768078490208d32005e7ec4236eaea11fe8..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/Wiedervorlage.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.util.List; - -import jakarta.validation.constraints.FutureOrPresent; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonProperty.Access; - -import de.ozgcloud.alfa.common.LinkedResource; -import de.ozgcloud.alfa.common.LinkedUserProfileResource; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandBody; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Singular; -import lombok.ToString; - -@Getter -@Builder(toBuilder = true) -@NoArgsConstructor(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PACKAGE) -@ToString -public class Wiedervorlage implements CommandBody { - - public static final String DONE_FIELD = "done"; - - @JsonIgnore - private String id; - - @JsonIgnore - private String vorgangId; - @JsonIgnore - private long version; - - @JsonProperty(access = Access.READ_ONLY) - private boolean done; - - @JsonIgnore - @LinkedUserProfileResource - private String createdBy; - @JsonProperty(access = Access.READ_ONLY) - private ZonedDateTime createdAt; - - @NotNull(message = FIELD_IS_EMPTY) - @Size(min = 3, max = 40, message = FIELD_SIZE) - private String betreff; - private String beschreibung; - - @NotNull(message = FIELD_IS_EMPTY) - @FutureOrPresent(message = FIELD_DATE_PAST) - private LocalDate frist; - - @LinkedResource(controllerClass = BinaryFileController.class) - @Singular - private List<FileId> attachments; -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java deleted file mode 100644 index e402945ef695e2567bc0e8170ba16a0deed123bb..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandController.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; - -@RestController -@RequestMapping(WiedervorlageCommandController.WIEDERVORLAGE_COMMANDS) -@RequiredArgsConstructor -public class WiedervorlageCommandController { - - static final String WIEDERVORLAGE_COMMANDS = "/api/wiedervorlages/{wiedervorlageId}/{wiedervorlageVersion}/commands"; - - private final WiedervorlageService service; - - @PostMapping - public ResponseEntity<Void> updateWiedervorlage(@RequestBody CreateCommand command, @PathVariable String wiedervorlageId, - @PathVariable long wiedervorlageVersion) { - var wiedervorlage = service.getById(wiedervorlageId); - var createdCommand = createCommand(wiedervorlage, command); - - return ResponseEntity.created(linkTo(CommandController.class).slash(createdCommand.getId()).toUri()).build(); - } - - Command createCommand(Wiedervorlage wiedervorlage, CreateCommand command) { - switch (command.getOrder()) { - case LegacyOrder.WIEDERVORLAGE_ERLEDIGEN: { - var changed = wiedervorlage.toBuilder().done(true).build(); - service.updateNextFrist(wiedervorlage.getVorgangId(), changed); - return service.erledigen(changed); - } - case LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN: { - var changed = wiedervorlage.toBuilder().done(false).build(); - service.updateNextFrist(wiedervorlage.getVorgangId(), changed); - return service.wiedereroeffnen(changed); - } - case LegacyOrder.EDIT_WIEDERVORLAGE: { - var changed = updateWiedervorlageByCommand(wiedervorlage, (Wiedervorlage) command.getBody()); - service.updateNextFrist(wiedervorlage.getVorgangId(), changed); - return service.editWiedervorlage(changed, wiedervorlage.getId(), wiedervorlage.getVersion()); - } - default: - throw new TechnicalException("Unsupported order " + command.getOrder()); - } - } - - Wiedervorlage updateWiedervorlageByCommand(Wiedervorlage wiedervorlage, Wiedervorlage requestBody) { - return wiedervorlage.toBuilder() - .clearAttachments().attachments(requestBody.getAttachments()) - .betreff(requestBody.getBetreff()) - .beschreibung(requestBody.getBeschreibung()) - .frist(requestBody.getFrist()).build(); - } - - @RestController - @RequestMapping(WiedervorlageCommandByVorgangController.WIEDERVORLAGE_COMMANDS_BY_VORGANG) - @RequiredArgsConstructor - public static class WiedervorlageCommandByVorgangController { - - static final String WIEDERVORLAGE_COMMANDS_BY_VORGANG = "/api/vorgangs/{vorgangId}/wiedervorlageCommands"; - - private final WiedervorlageService service; - - @PostMapping - public ResponseEntity<Void> createWiedervorlage(@RequestBody CreateCommand command, @PathVariable String vorgangId) { - var wiedervorlage = (Wiedervorlage) command.getBody(); - var createdCommand = service.createWiedervorlage(wiedervorlage, vorgangId); - - service.updateNextFrist(vorgangId, wiedervorlage); - - return ResponseEntity.created(linkTo(CommandController.class).slash(createdCommand.getId()).toUri()).build(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageController.java deleted file mode 100644 index 08e2b32b890037eee7aa204c387a1af695f198c0..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageController.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.user.CurrentUserService; - -@RestController -@RequestMapping(WiedervorlageController.WIEDERVORLAGE_PATH) -public class WiedervorlageController { - - static final String WIEDERVORLAGE_PATH = "/api/wiedervorlages"; // NOSONAR - static final String PARAM_VORGANG_ID = "vorgangId"; - - @Autowired - private WiedervorlageService service; - @Autowired - private WiedervorlageModelAssembler modelAssembler; - - @PreAuthorize(CurrentUserService.VERIFY_HAS_ROLE_VERWALTUNG_USER) - @GetMapping("/{wiedervorlageId}") - public EntityModel<Wiedervorlage> getById(@PathVariable String wiedervorlageId) { - return modelAssembler.toModel(service.getById(wiedervorlageId)); - } - - @GetMapping(params = PARAM_VORGANG_ID) - public CollectionModel<EntityModel<Wiedervorlage>> findByVorgang(@RequestParam String vorgangId) { - return modelAssembler.toCollectionModel(service.findByVorgangId(vorgangId), vorgangId); - } - - @RestController - @RequestMapping(AttachmentsByWiedervorlageController.PATH) - static class AttachmentsByWiedervorlageController { - - static final String PATH = "/api/wiedervorlages/{wiedervorlageId}"; // NOSONAR - - @Autowired - private BinaryFileController binaryFileController; - @Autowired - private WiedervorlageService service; - - @GetMapping("/attachments") - public CollectionModel<EntityModel<OzgFile>> getAttachments(@PathVariable String wiedervorlageId) { - var wiedervorlage = service.getById(wiedervorlageId); - - return binaryFileController.getFiles(wiedervorlage.getAttachments()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageMapper.java deleted file mode 100644 index 31b4d284d017ec88fc89b1ac30f3ae66c226e90a..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageMapper.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.util.Map; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; -import org.springframework.beans.factory.annotation.Autowired; - -import de.ozgcloud.alfa.attachment.AttachmentMapper; -import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; - -@Mapper(uses = { FileIdMapper.class }, unmappedTargetPolicy = ReportingPolicy.WARN, // - unmappedSourcePolicy = ReportingPolicy.WARN, // - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // - collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) -abstract class WiedervorlageMapper { - - @Autowired - private GrpcObjectMapper grpcObjectMapper; - - static final String ID = "id"; - static final String DONE = "done"; - static final String CREATED_BY = "createdBy"; - static final String CREATED_BY_NAME = "createdByName"; - static final String CREATED_AT = "createdAt"; - static final String BETREFF = "betreff"; - static final String BESCHREIBUNG = "beschreibung"; - static final String FRIST = "frist"; - static final String ATTACHMENTS = "attachments"; - - public Wiedervorlage fromItem(GrpcVorgangAttachedItem item) { - return fromItemMap(grpcObjectMapper.mapFromGrpc(item.getItem()), item.getVersion()); - } - - Wiedervorlage fromItemMap(Map<String, Object> itemMap, long version) { - return Wiedervorlage.builder() - .id((String) itemMap.get(ID)) - .version(version) - .done(Boolean.valueOf((String) itemMap.get(DONE))) - .createdBy((String) itemMap.get(CREATED_BY)) - .createdAt(ZonedDateTime.parse((String) itemMap.get(CREATED_AT))) - .betreff((String) itemMap.get(BETREFF)) - .beschreibung((String) itemMap.get(BESCHREIBUNG)) - .frist(LocalDate.parse((String) itemMap.get(FRIST))) - .attachments(AttachmentMapper.mapAttachments(itemMap.get(ATTACHMENTS))) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java deleted file mode 100644 index 2a94ca0fcd0a618ed77ae80988c4b61821489e70..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.function.Predicate; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.server.RepresentationModelAssembler; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.CollectionModelBuilder; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageCommandController.WiedervorlageCommandByVorgangController; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController.AttachmentsByWiedervorlageController; - -@Component -class WiedervorlageModelAssembler implements RepresentationModelAssembler<Wiedervorlage, EntityModel<Wiedervorlage>> { - - static final String REL_EDIT = "edit"; - static final String REL_ERLEDIGEN = "erledigen"; - static final String REL_WIEDEREROEFFNEN = "wiedereroeffnen"; - static final String REL_ATTACHMENTS = "attachments"; - - static final String REL_CREATE = "create-wiedervorlage"; - static final String REL_UPLOAD_FILE = "uploadFile"; - - private static final Predicate<Wiedervorlage> ALLOW_ERLEDIGEN = wiedervorlage -> !wiedervorlage.isDone(); - private static final Predicate<Wiedervorlage> ALLOW_WIEDEREROEFFNEN = Wiedervorlage::isDone; - private static final Predicate<Wiedervorlage> HAS_ATTACHMENTS = wiedervorlage -> !wiedervorlage.getAttachments().isEmpty(); - public static final String WIEDERVORLAGE_ATTACHMENT_PATH = "wiedervorlageAttachment"; - public static final String FILE_PATH = "file"; - - @Autowired - private VorgangController vorgangController; - - @Override - public EntityModel<Wiedervorlage> toModel(Wiedervorlage wiedervorlage) { - var vorgang = vorgangController.getVorgang(wiedervorlage.getVorgangId()); - return buildModel(wiedervorlage, vorgang); - } - - EntityModel<Wiedervorlage> buildModel(Wiedervorlage wiedervorlage, VorgangWithEingang vorgang) { - var selfLink = linkTo(WiedervorlageController.class).slash(wiedervorlage.getId()); - var commandLink = linkTo( - methodOn(WiedervorlageCommandController.class).updateWiedervorlage(null, wiedervorlage.getId(), wiedervorlage.getVersion())); - - return ModelBuilder.fromEntity(wiedervorlage).addLink(selfLink.withSelfRel()) - .ifMatch(() -> vorgangController.isEditable(vorgang)) - .addLink(commandLink.withRel(REL_EDIT)) - .ifMatch(ALLOW_ERLEDIGEN).addLink(commandLink.withRel(REL_ERLEDIGEN)) - .ifMatch(ALLOW_WIEDEREROEFFNEN).addLink(commandLink.withRel(REL_WIEDEREROEFFNEN)) - .ifMatch(HAS_ATTACHMENTS) - .addLink(linkTo(methodOn(AttachmentsByWiedervorlageController.class).getAttachments(wiedervorlage.getId())).withRel(REL_ATTACHMENTS)) - .buildModel(); - } - - public CollectionModel<EntityModel<Wiedervorlage>> toCollectionModel(Stream<Wiedervorlage> entities, String vorgangId) { - var vorgang = vorgangController.getVorgang(vorgangId); - - return CollectionModelBuilder.fromEntities(entities.map(wiedervorlage -> buildModel(wiedervorlage, vorgang))) - .addLink(linkTo(WiedervorlageController.class).withSelfRel()) - .ifMatch(wiedervorlagenModel -> vorgangController.isEditable(vorgang)) - .addLink(linkTo(methodOn(WiedervorlageCommandByVorgangController.class).createWiedervorlage(null, vorgangId)) - .withRel(REL_CREATE)) - .addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash(WIEDERVORLAGE_ATTACHMENT_PATH).slash(FILE_PATH) - .withRel(REL_UPLOAD_FILE)) - .buildModel(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageRemoteService.java deleted file mode 100644 index 9ecc912ae131e54ef4bfe4639fd5c7f1c2ba700b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageRemoteService.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.Optional; -import java.util.stream.Stream; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Service; - -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcDeleteClientAttributeRequest; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -public class WiedervorlageRemoteService { - - static final String CLIENT_ATTRIBUTE_NEXT_WIEDERVORLAGE_FRIST = "nextWiedervorlageFrist"; - static final String ITEM_NAME = "Wiedervorlage"; - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; - - @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private ClientAttributeServiceBlockingStub clientAttributeServiceStub; - - @Autowired - private WiedervorlageMapper mapper; - @Autowired - private ApplicationContext context; - - public Stream<Wiedervorlage> findByVorgangId(String vorgangId) { - var response = vorgangAttachedItemServiceStub.find(buildFindRequest(vorgangId)); - - return response.getVorgangAttachedItemsList().stream().map(mapper::fromItem); - } - - GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) { - return GrpcFindVorgangAttachedItemRequest.newBuilder() - .setVorgangId(vorgangId) - .setItemName(ITEM_NAME) - .build(); - } - - public Wiedervorlage getById(String wiedervorlageId) { - var response = vorgangAttachedItemServiceStub.getById(GrpcVorgangAttachedItemRequest.newBuilder().setId(wiedervorlageId).build()); - - return mapper.fromItem(response.getVorgangAttachedItem()).toBuilder().vorgangId(response.getVorgangAttachedItem().getVorgangId()).build(); - } - - public void updateNextFrist(String vorgangId, Optional<LocalDate> nextFrist) { - nextFrist.ifPresentOrElse(frist -> setNextFrist(vorgangId, frist), () -> deleteNextFrist(vorgangId)); - } - - void deleteNextFrist(String vorgangId) { - clientAttributeServiceStub.delete(GrpcDeleteClientAttributeRequest.newBuilder() - .setVorgangId(vorgangId) - .setClientName(context.getId()) - .setAttributeName(CLIENT_ATTRIBUTE_NEXT_WIEDERVORLAGE_FRIST) - .build()); - } - - void setNextFrist(String vorgangId, LocalDate nextFrist) { - clientAttributeServiceStub.set(buildUpdateNextFristRequest(vorgangId, nextFrist)); - } - - private GrpcSetClientAttributeRequest buildUpdateNextFristRequest(String vorgangId, LocalDate nextFrist) { - return GrpcSetClientAttributeRequest.newBuilder() - .setVorgangId(vorgangId) - .setAttribute(GrpcClientAttribute.newBuilder() - .setAccess(GrpcAccessPermission.READ_ONLY) - .setAttributeName(CLIENT_ATTRIBUTE_NEXT_WIEDERVORLAGE_FRIST) - .setValue(GrpcClientAttributeValue.newBuilder().setStringValue(nextFrist.format(DateTimeFormatter.ISO_DATE))) - .build()) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java deleted file mode 100644 index a56a61a999ef35ec2e87e160fa75f3548d9365a6..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageService.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.util.Comparator; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import jakarta.validation.Valid; - -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@Validated -@Service -class WiedervorlageService { - - private static final Predicate<Wiedervorlage> IS_NOT_DONE = wiedervorlage -> !wiedervorlage.isDone(); - - private final WiedervorlageRemoteService remoteService; - private final VorgangAttachedItemService vorgangAttachedItemService; - private final CurrentUserService currentUserService; - - public Command createWiedervorlage(@Valid Wiedervorlage wiedervorlage, String vorgangId) { - return vorgangAttachedItemService.createNewWiedervorlage(addCreated(wiedervorlage), vorgangId); - } - - Wiedervorlage addCreated(Wiedervorlage wiedervorlage) { - return wiedervorlage.toBuilder() - .createdAt(ZonedDateTime.now().withNano(0)) - .createdBy(currentUserService.getUserId().toString()) - .build(); - } - - public Command editWiedervorlage(@Valid Wiedervorlage wiedervorlage, String wiedervorlageId, long version) { - return vorgangAttachedItemService.editWiedervorlage(wiedervorlage, wiedervorlageId, version); - } - - public Wiedervorlage getById(String wiedervorlageId) { - return remoteService.getById(wiedervorlageId); - } - - @Async - public void updateNextFrist(String vorgangId, Wiedervorlage changedOrNewWiedervorlage) { - var persistedWiedervorlagen = findByVorgangId(vorgangId); - var persistedWiedervorlagenExcludingChanged = persistedWiedervorlagen.filter( - wiedervorlage -> !wiedervorlage.getId().equals(changedOrNewWiedervorlage.getId())); - - var wiedervorlagen = Stream.concat(persistedWiedervorlagenExcludingChanged, Stream.of(changedOrNewWiedervorlage)); - remoteService.updateNextFrist(vorgangId, calculateNextFrist(wiedervorlagen)); - } - - Optional<LocalDate> calculateNextFrist(Stream<Wiedervorlage> wiedervorlagen) { - return wiedervorlagen - .filter(Objects::nonNull) - .filter(IS_NOT_DONE) - .sorted(Comparator.comparing(Wiedervorlage::getFrist)) - .map(Wiedervorlage::getFrist) - .findFirst(); - } - - public Stream<Wiedervorlage> findByVorgangId(String vorgangId) { - return remoteService.findByVorgangId(vorgangId); - } - - public Command erledigen(Wiedervorlage wiedervorlage) { - return vorgangAttachedItemService.setWiedervorlageDone(wiedervorlage, true); - } - - public Command wiedereroeffnen(Wiedervorlage wiedervorlage) { - return vorgangAttachedItemService.setWiedervorlageDone(wiedervorlage, false); - } - -} \ No newline at end of file diff --git a/alfa-service/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/alfa-service/src/main/resources/META-INF/additional-spring-configuration-metadata.json deleted file mode 100644 index 8b996c6207d544d30d16e840e708210b8dbd2ff3..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{"properties": [ - { - "name": "ozgcloud.production", - "type": "java.lang.Boolean", - "description": "Enables/Disables the Angular production mode. (default: true)" - }, - { - "name": "ozgcloud.stage.production", - "type": "java.lang.String", - "description": "Enables/Disables production environment hint. (default: true)" - } -]} \ No newline at end of file diff --git a/alfa-service/src/main/resources/files/LandesnetzInfo.html b/alfa-service/src/main/resources/files/LandesnetzInfo.html deleted file mode 100644 index 34c9d390e7818594faee980f0ff6162dee6cc108..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/resources/files/LandesnetzInfo.html +++ /dev/null @@ -1,178 +0,0 @@ -<!DOCTYPE html> -<!-- saved from url=(0054)https://lninfo.landsh.de/emaildomain/LNmailkunden.html --> -<html lang="de"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - - <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Mailrouting-Tabelle für E-Mail in SH</title> - <style> - * { - box-sizing: border-box; - font-family: Arial, Verdana, sans-serif; - } - - .clearfix::before, - .clearfix::after { - content: " "; - display: table; - } - - .clearfix::after { - clear:both; - } - - #outer_wrapper { - width:85%; - max-width: 1200px; - margin: 0 auto; - - } - - #einleitung { - font-size: 14px; - margin-bottom: 30px; - } - - #header_logo {float:left;} - #header_logo img { - width:200px; padding:10px; - } - #header h1 { - font-size: 24px; - } - #header #ueberschrift { - padding:15px 0 0 220px; - } - - #einleitung table { - margin: -15px 0 20px 15px; - } - - #einleitung td.kuerzel { - font-weight: bold; - padding-right: 10px; - - } - - - #InputSuche { - background-repeat: no-repeat; - width: 100%; - font-size: 16px; - padding: 12px 20px 12px 12px; - border: 1px solid #ddd; - margin-bottom: 12px; - } - - #tbl_domains { - border-collapse: collapse; - width: 100%; - border: 1px solid #ddd; - font-size: 16px; - } - - #tbl_domains th, - #tbl_domains td { - text-align: left; - padding: 6px; - } - - #tbl_domains tr { - border-bottom: 1px solid #ddd; - } - - #tbl_domains tr.header, - #tbl_domains tr:hover { - background-color: #f1f1f1; - } - - #letzte_aktualisierung { - margin:25px 0; - font-size:14px; - } - - </style> -<script src="chrome-extension://mooikfkahbdckldjjndioackbalphokd/assets/prompt.js"></script></head> - -<body> - - <div id="outer_wrapper"> - <div id="header"> - <div id="header_logo"><img src="./Mailrouting-Tabelle für E-Mail in SH_files/dataport_logo.png" alt="Dataport Logo"></div> - <div id="ueberschrift"><h1>Mailroutingtabelle für E-Mail SH Kunden (Fullmail)</h1></div> - <div class="clearfix"></div> - </div> - <div id="einleitung"> - <p> - In der nachfolgenden Tabelle sind Domänen gelistet, welche bei Verwendung des Dataport Mailrelays für - das LNSH (E-Mail SH) über interne Wege geroutet werden.<br> - Zu jeder Zieldomain ist ersichtlich, über welche Infrastruktur die E-Mail geroutet wird. Bei Mehrfachnennung gilt die nachfolgende Reihenfolge:<br><br> - </p> - <table> - <tbody><tr> - <td class="kuerzel">LNSH</td> - <td>Die E-Mail wird über das Landesnetz Schleswig-Holstein zum Empfänger geroutet.</td> - </tr> - <tr> - <td class="kuerzel">NdB</td> - <td>Die E-Mail wird über die Netze des Bundes zum Empfänger geroutet.</td> - </tr> - </tbody></table> - - <p> - E-Mails an Ziele, welche nicht in dieser Übersicht vorhanden sind, werden über das Internet - geroutet.</p> - <p> - <i><strong>Hinweis: </strong>Durch die Nennung einer Domäne in dieser Liste wird keine Aussage oder - Empfehlung darüber - gegeben, - welche Art von E-Mail Inhalten übertragen werden dürfen<br> - und ob diese vor dem Versand verschlüsselt werden sollten. - Bitte beachten Sie die für Ihre Organisation gültigen Regelungen. - </i> - </p> - </div> - - <input type="text" id="InputSuche" onkeyup="myFunction()" placeholder="Suche nach Domainnamen.." title="Geben Sie einen Domainnamen ein"> - - <table id="tbl_domains"> - <tbody><tr class="header"> - <th style="width:60%;">Domainame</th> - <th style="width:40%;">wird geroutet via</th> - </tr> - <tr> <td>.ndb.de</td> <td>Netz des Bundes</td></tr> - <tr> <td>ndb.de</td> <td>Netz des Bundes</td></tr> - <tr> <td>.itvsh.de</td> <td>LNSH</td></tr> - <tr> <td>itvsh.de</td> <td>LNSH</td></tr> - <tr> <td>.itvsh.old.de</td> <td>LNSH Altumgebung</td></tr> - <tr> <td>itvsh.old.de</td> <td>LNSH Altumgebung</td></tr> - <tr> <td>dataport.de</td> <td>LNSH</td></tr> - <tr> <td>ozg-sh.de</td> <td>LNSH</td></tr> - </tbody></table> - <div id="letzte_aktualisierung">Letzte Aktualisierung: 01.06.2021 14:42 Uhr - Alle Angaben ohne Gewähr.</div> - - <script> - function myFunction() { - var input, filter, table, tr, td, i, txtValue; - input = document.getElementById("InputSuche"); - filter = input.value.toUpperCase(); - table = document.getElementById("tbl_domains"); - tr = table.getElementsByTagName("tr"); - for (i = 0; i < tr.length; i++) { - td = tr[i].getElementsByTagName("td")[0]; - if (td) { - txtValue = td.textContent || td.innerText; - if (txtValue.toUpperCase().indexOf(filter) > -1) { - tr[i].style.display = ""; - } else { - tr[i].style.display = "none"; - } - } - } - } - </script> - - </div> - - - -</body></html> diff --git a/alfa-service/src/main/resources/files/mailertable.txt b/alfa-service/src/main/resources/files/mailertable.txt deleted file mode 100644 index 7358aae2d522f9792ba60289e7dde9e75e56556b..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/resources/files/mailertable.txt +++ /dev/null @@ -1,68 +0,0 @@ -##### Beginn ZSP ################################ -# -# Die Kenntnis dieser IP-Adressen ist den Nutzern des E-Maildienstes im NdB-VN vorbehalten. -# Diese Adressen sind Dritten nicht zugñnglich zu machen. -# 192.168.253.20 ESMTP:[mailrelay.zsp.testa-de.net] -# -##### Ende ZSP ################################## -# -############################## Beginn Berlin (ITDZ) ###################################### -# Koslakowicz, Monika -# Telefon: 030 90222 6515 -########################################################################################## -seninnds.berlin.de esmtp:[mail.berlin.testa-de.net] -schulbau.berlin.de esmtp:[mail.berlin.testa-de.net] -wahlen.berlin.de esmtp:[mail.berlin.testa-de.net] -lea.berlin.de esmtp:[mail.berlin.testa-de.net] -vhs-servicezentrum.berlin.de esmtp:[mail.berlin.testa-de.net] -# -############################## Ende Berlin ######################################## -# -# -############################## Beginn Schleswig-Holstein ########################## -# DOI Dataport Altenholz -# Korth, Lennart -# Telefon: 0431-3295 6667 -################################################################################# -mgm-cp.com esmtp:[mx.landsh.doi-de.net] -mgm-tp.com esmtp:[mx.landsh.doi-de.net] -dataport.de esmtp:[mx.landsh.doi-de.net] -# -############################## Ende Schleswig-Holstein ########################### -# -# -############################## Beginn Dataport Hamburg ########################### -# DOI Dataport Hamburg -# Ackermann, Stefan -# Telefon: 040 -428 46 2573 -################################################################################## -driveport.de esmtp:[mail.hamburg.testa-de.net] -meinuk.de esmtp:[mail.hamburg.testa-de.net] -meinuk-integration.de esmtp:[mail.hamburg.testa-de.net] -dataport-kommunal.de esmtp:[mail.hamburg.testa-de.net] -li.hamburg.de esmtp:[mail.hamburg.testa-de.net] -# -############################## Ende Dataport Hamburg ############################## -# -############################## Deutsche Bahn VS ###################################### -# -# Team SeCDocS (DB Systel) 069 265 14925 (9-17 Uhr) secdocs@deutschebahn.com -# Jan-Peter Krause (DB Systel) 030 297 16042 -# -##################################################################################### -vs-nfd.deutschebahn.com esmtp:vs-nfd.deutschebahn.testa-de.net -# -############################# Ende Deutsche Bahn VS ################################## -# -############################## Beginn ZSP ######################################### -# -#zsp.testa-de.net esmtp:[sts03mr1.zsp.testa-de.net] -#.zsp.testa-de.net esmtp:[sts03mr1.zsp.testa-de.net] -.zsp.testa-de.net local: -zsp.testa-de.net local: -zsp.doi-de.net local: -# -# -############################## Ende ZSP ############################################# -# -# \ No newline at end of file diff --git a/alfa-service/src/main/resources/fop/postfach-nachrichten.xsl b/alfa-service/src/main/resources/fop/postfach-nachrichten.xsl deleted file mode 100644 index 7442f94c340789ee9a8929ce29d935df370fcac8..0000000000000000000000000000000000000000 --- a/alfa-service/src/main/resources/fop/postfach-nachrichten.xsl +++ /dev/null @@ -1,140 +0,0 @@ -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.1"> - - <xsl:template name="functional-template" match="/testModel"> - <fo:flow flow-name="xsl-region-body"> - - <fo:block font-size="14pt"> - <fo:table> - <fo:table-column column-width="50mm" /> - <fo:table-column column-width="125mm"/> - <fo:table-body> - <fo:table-row> - <fo:table-cell> - <fo:block>Vorgangsname</fo:block> - </fo:table-cell> - <fo:table-cell> - <fo:block><xsl:value-of select="postfachNachrichtPdfModel/vorgangName" /></fo:block> - </fo:table-cell> - </fo:table-row> - - <fo:table-row> - <fo:table-cell> - <fo:block>Vorgangsnummer</fo:block> - </fo:table-cell> - <fo:table-cell> - <fo:block><xsl:value-of select="postfachNachrichtPdfModel/vorgangNummer" /></fo:block> - </fo:table-cell> - </fo:table-row> - </fo:table-body> - </fo:table> - </fo:block> - - <fo:block font-size="11pt" margin-top="30px"> - <fo:table> - <fo:table-column column-width="50mm" /> - <fo:table-column column-width="125mm"/> - <fo:table-body> - <fo:table-row> - <fo:table-cell> - <fo:block>Antragsteller</fo:block> - </fo:table-cell> - <fo:table-cell> - <fo:block> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerAnrede" /> - <xsl:text> </xsl:text> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerVorname" /> - <xsl:text> </xsl:text> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerNachname" /> - </fo:block> - <fo:block> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerStrasse" /> - <xsl:text> </xsl:text> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerHausnummer" /> - </fo:block> - <fo:block> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerPlz" /> - <xsl:text> </xsl:text> - <xsl:value-of select="postfachNachrichtPdfModel/antragstellerOrt" /> - </fo:block> - </fo:table-cell> - </fo:table-row> - - </fo:table-body> - </fo:table> - </fo:block> - - <fo:block-container font-size="11pt" margin-top="1cm"> - <fo:block font-size="14pt" margin-bottom="3mm">Nachrichten</fo:block> - - <xsl:for-each select="postfachNachrichtPdfModel/nachrichten/nachricht"> - <xsl:call-template name="nachricht"/> - </xsl:for-each> - </fo:block-container> - </fo:flow> - </xsl:template> - - <xsl:template name="nachricht"> - - <fo:block font-size="11pt" margin-bottom="2mm" linefeed-treatment="preserve"> - <xsl:if test="isFirst='false'"> - <fo:leader leader-pattern="rule" leader-length="175mm" rule-style="solid" rule-thickness="1pt"/> - </xsl:if> - <fo:table> - <fo:table-column column-width="30mm" /> - <fo:table-column column-width="145mm"/> - <fo:table-body> - <fo:table-row> - <fo:table-cell padding="3px"> - <fo:block>Absender</fo:block> - </fo:table-cell> - <fo:table-cell padding="3px"> - <fo:block><xsl:value-of select="createdBy" /></fo:block> - </fo:table-cell> - </fo:table-row> - - <fo:table-row> - <fo:table-cell padding="3px"> - <fo:block>Datum</fo:block> - </fo:table-cell> - <fo:table-cell padding="3px"> - <fo:block><xsl:value-of select="createdAt" /></fo:block> - </fo:table-cell> - </fo:table-row> - - <fo:table-row> - <fo:table-cell padding="3px"> - <fo:block>Betreff</fo:block> - </fo:table-cell> - <fo:table-cell padding="3px"> - <fo:block><xsl:value-of select="subject" /></fo:block> - </fo:table-cell> - </fo:table-row> - - <fo:table-row> - <fo:table-cell padding="3px"> - <fo:block>Text</fo:block> - </fo:table-cell> - <fo:table-cell padding="3px"> - <fo:block><xsl:value-of select="mailBody" /></fo:block> - </fo:table-cell> - </fo:table-row> - - <fo:table-row> - <fo:table-cell padding="3px"> - <fo:block>Anhänge</fo:block> - </fo:table-cell> - <xsl:if test="attachments/attachment"> - <fo:table-cell padding="3px"> - <xsl:for-each select="attachments/attachment"> - <fo:block><xsl:value-of select="."/></fo:block> - </xsl:for-each> - </fo:table-cell> - </xsl:if> - </fo:table-row> - </fo:table-body> - </fo:table> - </fo:block> - - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/AlfaServerApplication.java b/alfa-service/src/test/java/de/ozgcloud/alfa/AlfaServerApplication.java deleted file mode 100644 index 39b0a70aaf70e26f312514abe9e5dbf1139cd65f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/AlfaServerApplication.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.TimeZone; - -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.security.concurrent.DelegatingSecurityContextRunnable; -import org.springframework.web.filter.ForwardedHeaderFilter; - -@SpringBootApplication -@EnableAsync -@EnableAspectJAutoProxy(proxyTargetClass = true) -@ComponentScan({ "de.ozgcloud.*" }) -public class AlfaServerApplication { - - public static void main(String[] args) { - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - SpringApplication.run(AlfaServerApplication.class, args); - } - - @Bean - public FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() { - FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>(); - bean.setFilter(new ForwardedHeaderFilter()); - return bean; - } - - @Bean - public ThreadPoolTaskExecutor threadPoolTaskExecutor() { - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - - executor.setThreadNamePrefix("async-"); - executor.setTaskDecorator(DelegatingSecurityContextRunnable::new); - return executor; - } - - @Bean - public CallScope callScope() { - return new CallScope(); - } - - @Bean - public BeanFactoryPostProcessor beanFactoryPostProcessor(CallScope callScope) { - return new CallBeanFactoryPostProcessor(callScope); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/AlfaServerApplicationTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/AlfaServerApplicationTest.java deleted file mode 100644 index 4c6057853dd41fcce167850fff4c159390bec622..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/AlfaServerApplicationTest.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class AlfaServerApplicationTest { - - @Test - void contextLoads() { // NOSONAR - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/ApplicationTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/ApplicationTestFactory.java deleted file mode 100644 index 3ee821a315d78949fe05cf9d5f5a74e87ecf0f7c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/ApplicationTestFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import com.thedeanda.lorem.LoremIpsum; - -public class ApplicationTestFactory { - - public static final String CONTEXT_ID = LoremIpsum.getInstance().getWords(1); -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/EnvironmentControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/EnvironmentControllerTest.java deleted file mode 100644 index ded788339288603e18152161f7f3242ed578ecf5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/EnvironmentControllerTest.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.vorgang.VorgangProcessorProperties; -import lombok.SneakyThrows; - -class EnvironmentControllerTest { - - @InjectMocks - private EnvironmentController controller; - @Mock - private OAuth2Properties oAuth2Properties; - @Mock - private ProductionProperties productionProperties; - @Mock - private VorgangProcessorProperties vorgangProcessorProperties; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("Get environment") - @Nested - class TestGetEnvironment { - - private static final String CLIENT = LoremIpsum.getInstance().getFirstName() + "Client"; - private static final boolean PRODUCTION = true; - private static final String PROCESSOR_NAME = "dummyProcessorName"; - - @BeforeEach - void init() { - when(productionProperties.isProduction()).thenReturn(PRODUCTION); - when(oAuth2Properties.getResource()).thenReturn(CLIENT); - when(vorgangProcessorProperties.getProcessorNames()).thenReturn(List.of(PROCESSOR_NAME)); - } - - @SneakyThrows - @Test - void shouldReturnOk() { - var response = doRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldHaveProductionTrueAsDefault() { - var response = doRequest(); - - response.andExpect(jsonPath("$.production").value(PRODUCTION)); - } - - @SneakyThrows - @Test - void shouldHaveClientId() { - var response = doRequest(); - - response.andExpect(jsonPath("$.clientId").value(CLIENT)); - } - - @SneakyThrows - @Test - void shouldHaveProcessorNames() { - var response = doRequest(); - - response.andExpect(jsonPath("$.processorNames").value(PROCESSOR_NAME)); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform(get(EnvironmentController.BASE_PATH)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/JwtAuthConverterTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/JwtAuthConverterTest.java deleted file mode 100644 index e33159e9af7fa2db11ca06f4891c5d864b2ef720..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/JwtAuthConverterTest.java +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtClaimNames; -import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; - -import com.thedeanda.lorem.LoremIpsum; - -class JwtAuthConverterTest { - - @Spy - @InjectMocks - private final JwtAuthConverter converter = new JwtAuthConverter(); - @Mock - private OAuth2Properties oAuth2Properties; - - @DisplayName("Convert") - @Nested - class TestConvert { - - @Mock - private Jwt jwt; - - @BeforeEach - void mock() { - doReturn(StringUtils.EMPTY).when(converter).getPrincipleClaimName(any()); - doReturn(Collections.emptySet()).when(converter).getAuthorities(any()); - } - - @Test - void shouldGetAuthrorities() { - converter.convert(jwt); - - verify(converter).getAuthorities(jwt); - } - - @Test - void shouldGetPrincipleClaimName() { - converter.convert(jwt); - - verify(converter).getPrincipleClaimName(jwt); - } - - @Test - void shouldReturnJwtAuthenticationToken() { - var token = converter.convert(jwt); - - assertThat(token).isInstanceOf(JwtAuthenticationToken.class); - } - } - - @DisplayName("Get principle claim name") - @Nested - class TestGetPrincipleClaimName { - - private final String subClaimValue = LoremIpsum.getInstance().getWords(1); - private final String principleClaimKey = LoremIpsum.getInstance().getWords(1); - private final String principleClaimValue = LoremIpsum.getInstance().getWords(1); - private final Map<String, Object> claimMap = Map.of(JwtClaimNames.SUB, subClaimValue, principleClaimKey, principleClaimValue); - private final Jwt jwt = JwtTestFactory.create(claimMap); - - @DisplayName("if principle attribute is set") - @Nested - class TestIfPrincipleAttributeIsSet { - - @BeforeEach - void mock() { - when(oAuth2Properties.getPrincipleAttribute()).thenReturn(null); - } - - @Test - void shouleReturnPrincipleAttributeClaimValue() { - var principleClaimName = converter.getPrincipleClaimName(jwt); - - assertThat(principleClaimName).isEqualTo(subClaimValue); - } - } - - @DisplayName("if principle attribute is not set") - @Nested - class TestIfPrincipleAttributeNotSet { - - @BeforeEach - void mock() { - when(oAuth2Properties.getPrincipleAttribute()).thenReturn(principleClaimKey); - } - - @Test - void shouldReturnSubClaimValue() { - var principleClaimName = converter.getPrincipleClaimName(jwt); - - assertThat(principleClaimName).isEqualTo(principleClaimValue); - } - } - } - - @DisplayName("Get authorities") - @Nested - class TestGetAuthorities { - - private final static String SCOPE_CLAIM_KEY = "scope"; - private final static String SCOPE_CLAIM_VALUE = "dummyClaimValue"; - private final Jwt jwt = JwtTestFactory.create(Map.of(SCOPE_CLAIM_KEY, SCOPE_CLAIM_VALUE)); - - @BeforeEach - void mock() { - doReturn(Collections.emptyList()).when(converter).extractResourceRoles(any()); - } - - @Test - void shouldConvertJwt() { - var authorities = converter.getAuthorities(jwt); - - assertThat(authorities).extracting(GrantedAuthority::toString) - .contains(String.format("%s_%s", SCOPE_CLAIM_KEY.toUpperCase(), SCOPE_CLAIM_VALUE)); - } - - @Test - void shouldExtractRoles() { - converter.getAuthorities(jwt); - - verify(converter).extractResourceRoles(jwt); - } - } - - @DisplayName("Extract resource roles") - @Nested - class TestExtractResourceRoles { - - private final Map<String, Object> claimsMap = Map.of(JwtAuthConverter.RESOURCE_ACCESS_KEY, Map.of("dummyKey", "dummyValue")); - private final Jwt jwt = JwtTestFactory.create(claimsMap); - - @Test - void shouldReturnEmptySetOnMissingResourceAccess() { - var claimsMap = Map.<String, Object>of(JwtAuthConverter.RESOURCE_ACCESS_KEY, Collections.emptyMap()); - var jwt = JwtTestFactory.create(claimsMap); - - var resourceRoles = converter.extractResourceRoles(jwt); - - assertThat(resourceRoles).isEmpty(); - } - - @DisplayName("on existing resource access") - @Nested - class TestOnExistingResourceAccess { - - @Test - void shouldCallProperties() { - converter.extractResourceRoles(jwt); - - verify(oAuth2Properties).getResource(); - } - - @Test - void shouldReturnEmptySetOnMissingResourceId() { - when(oAuth2Properties.getResource()).thenReturn(null); - - var resourceRoles = converter.extractResourceRoles(jwt); - - assertThat(resourceRoles).isEmpty(); - } - - @DisplayName("and existing resourceId") - @Nested - class TestAndExistingResourceId { - - private final static String RESOURCE_ID = "dummyResourceId"; - private final Map<String, Object> authoritiesMap = Map.of(JwtAuthConverter.RESOURCE_ACCESS_KEY, - Map.of(RESOURCE_ID, Collections.emptyMap())); - private final Jwt jwt = JwtTestFactory.create(authoritiesMap); - - @BeforeEach - void mock() { - doReturn(Collections.emptySet()).when(converter).extractRoles(any()); - when(oAuth2Properties.getResource()).thenReturn(RESOURCE_ID); - } - - @Test - void shouldExtractRoles() { - converter.extractResourceRoles(jwt); - - verify(converter).extractRoles(any()); - } - } - - } - } - - @DisplayName("Extract roles") - @Nested - class TestExtractRoles { - - @Test - void shouldReturnMappedRoleIfRolesExist() { - var authorities = converter.extractRoles(Map.of(JwtAuthConverter.ROLES_KEY, List.of("dummy"))); - - assertThat(authorities).extracting(SimpleGrantedAuthority::toString).containsExactly("ROLE_dummy"); - } - - @Test - void shouldReturnEmptySetIfNoRoleExists() { - var authorities = converter.extractRoles(Map.of(JwtAuthConverter.ROLES_KEY, Collections.emptyList())); - - assertThat(authorities).isEmpty(); - } - - @Test - void shouldReturnEmptySetIfRolesEntryNotExists() { - var authorities = converter.extractRoles(Collections.emptyMap()); - - assertThat(authorities).isEmpty(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/JwtTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/JwtTestFactory.java deleted file mode 100644 index 5971defdf9d52f565c88c5d99e6c94f83ee8d092..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/JwtTestFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.time.Instant; -import java.util.Map; - -import org.springframework.security.oauth2.jwt.Jwt; - -import com.thedeanda.lorem.LoremIpsum; - -public class JwtTestFactory { - - public static final String TOKEN_VALUE = LoremIpsum.getInstance().getWords(1); - private static final Instant ISSUE_AT = Instant.now(); - private static final Instant EXPIRES_AT = ISSUE_AT.plusMillis(5000); - - public static final String DUMMY_HEADER_KEY = "dummyHeaderKey"; - private static final String DUMMY_HEADER_VALUE = "dummyHeaderValue"; - private static final Map<String, Object> HEADERS = Map.of(DUMMY_HEADER_KEY, DUMMY_HEADER_VALUE); - - public static Jwt create(Map<String, Object> claims) { - return new Jwt(TOKEN_VALUE, ISSUE_AT, EXPIRES_AT, HEADERS, claims); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/JwtTokenUtilTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/JwtTokenUtilTest.java deleted file mode 100644 index 4497357a5fd5859713af1fe99d79cf4ce9d26f1f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/JwtTokenUtilTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.auth0.jwt.exceptions.JWTVerificationException; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenProperties; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; - -class JwtTokenUtilTest { - - @Spy - @InjectMocks - private JwtTokenUtil jwtTokenUtil; - @Mock - private DownloadTokenProperties downloadTokenProperties; - - private static final String TOKEN_SECRET = "t0pS3cr3t".repeat(8); - private static final int TOKEN_VALIDITY = 60000; - - @BeforeEach - public void initTest() throws Exception { - when(downloadTokenProperties.getSecret()).thenReturn(TOKEN_SECRET); - } - - @Nested - @DisplayName("Verify token generation") - class TestGenerateToken { - - private String generatedToken; - - @BeforeEach - void initTest() { - when(downloadTokenProperties.getSecret()).thenReturn(TOKEN_SECRET); - when(downloadTokenProperties.getValidity()).thenReturn(TOKEN_VALIDITY); - - generatedToken = jwtTokenUtil.generateToken(FileId.createNew(), UserProfileTestFactory.create()); - } - - @Test - void userId() { - var userId = getParsedBody().getSubject(); - - assertThat(userId).isEqualTo(SecurityTestFactory.SUBJECT.toString()); - } - - @Test - void expirationDate() { - var before = new Date(); - var expirationDate = getParsedBody().getExpiration(); - var after = new Date(System.currentTimeMillis() + 900000); - - assertThat(expirationDate).isAfter(before).isBefore(after); - } - - @Test - void organisationseinheitIds() { - var organisationseinheitIds = jwtTokenUtil.getOrganisationseinheitIdsFromToken(generatedToken); - - assertThat(organisationseinheitIds).isEqualTo(List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID)); - } - - private Claims getParsedBody() { - return Jwts.parser().setSigningKey(TOKEN_SECRET.getBytes()).build().parseSignedClaims(generatedToken).getPayload(); - } - } - - @Nested - class TestVerifyToken { - - @Test - void shouldDoNotThrowExcepionOnValidToken() { - var token = buildToken(UUID.randomUUID().toString(), TOKEN_SECRET, TOKEN_VALIDITY); - - jwtTokenUtil.verifyToken(token); - } - - @Test - void shouldThrowExceptionOnInvalidToken() { - var token = buildToken(UUID.randomUUID().toString(), "invalid_token".repeat(5), TOKEN_VALIDITY); - - assertThrows(JWTVerificationException.class, () -> jwtTokenUtil.verifyToken(token)); - } - - @Test - void shouldThrowExceptionOnTimeExpired() { - var token = buildToken(UUID.randomUUID().toString(), TOKEN_SECRET, -1000); - - assertThrows(JWTVerificationException.class, () -> jwtTokenUtil.verifyToken(token)); - } - - private String buildToken(String subject, String token, int expiredTime) { - Map<String, Object> claims = new HashMap<>(); - claims.put(JwtTokenUtil.FIRSTNAME_CLAIM, SecurityTestFactory.USER_FIRSTNAME); - claims.put(JwtTokenUtil.LASTNAME_CLAIM, SecurityTestFactory.USER_LASTNAME); - claims.put(JwtTokenUtil.ROLE_CLAIM, SecurityTestFactory.AUTHORITIES); - claims.put(JwtTokenUtil.FILEID_CLAIM, FileId.createNew()); - claims.put(JwtTokenUtil.ORGANSIATIONSEINHEIT_IDS_CLAIM, SecurityTestFactory.ORGANSIATIONSEINHEIT_IDS); - - return Jwts.builder() - .setClaims(claims) - .setSubject(subject) - .setHeaderParam(JwtTokenUtil.TOKEN_TYP_KEY, JwtTokenUtil.TOKEN_TYPE) - .setIssuer(JwtTokenUtil.TOKEN_ISSUER).setIssuedAt(new Date(System.currentTimeMillis())) - .setExpiration(new Date(System.currentTimeMillis() + expiredTime)) - .setAudience(JwtTokenUtil.TOKEN_AUDIENCE) - .signWith(SignatureAlgorithm.HS512, token.getBytes()) - .compact(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RequestAttributesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RequestAttributesTestFactory.java deleted file mode 100644 index 2abb97662c326dc906e6dceae185c57662902ce4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RequestAttributesTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.UUID; - -public class RequestAttributesTestFactory { - - public static final String REQUEST_ID = UUID.randomUUID().toString(); - - public static RequestAttributes create() { - return createBuilder().build(); - } - - public static RequestAttributes.RequestAttributesBuilder createBuilder() { - return RequestAttributes.builder() - .requestId(REQUEST_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RequestIdFilterITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RequestIdFilterITCase.java deleted file mode 100644 index d43c3c1bcaf999f231f29ca37ce974ca6721bee3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RequestIdFilterITCase.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; - -@SpringBootTest -@AutoConfigureMockMvc -@WithMockUser -class RequestIdFilterITCase { - - @SpyBean - private RequestIdFilter filter; - - @Autowired - private MockMvc mockMvc; - - @Test - void shouldCallFilterMethod() throws Exception { - mockMvc.perform(get("/")); - - verify(filter).doFilterInternal(any(), any(), any()); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RequestIdFilterTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RequestIdFilterTest.java deleted file mode 100644 index 41d02d4f4ed5a1d6a0fa0c220ec5960bde87f3b0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RequestIdFilterTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -class RequestIdFilterTest { - - @InjectMocks - private RequestIdFilter filter; - @Mock - private FilterChain filterChain; - @Mock - private HttpServletRequest request; - @Mock - private HttpServletResponse response; - @Mock - private CallScope callScope; - - @Spy - private RequestAttributes attributes; - - @Test - void shouldContinueFilterChain() throws IOException, ServletException { - callDoFilterInternal(); - - verify(filterChain).doFilter(request, response); - } - - @Test - void shouldStartCallScope() { - callDoFilterInternal(); - - verify(callScope).startScope(); - } - - @Test - void shouldEndCallScopeAfterException() throws IOException, ServletException { - doThrow(RuntimeException.class).when(filterChain).doFilter(any(), any()); - - assertThrows(RuntimeException.class, this::callDoFilterInternal); - - verify(callScope).endScope(); - } - - private void callDoFilterInternal() { - try { - filter.doFilterInternal(request, response, filterChain); - } catch (ServletException | IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootControllerITCase.java deleted file mode 100644 index 34b881f160df4f5e74979d50f106f9f51a759fa3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootControllerITCase.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.hamcrest.core.StringEndsWith; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class RootControllerITCase { - - @MockBean - private CurrentUserService currentUserService; - - @Autowired - private MockMvc mockMvc; - - @BeforeEach - void init() { - when(currentUserService.getUser()).thenReturn(UserProfileTestFactory.create()); - } - - @Nested - class TestProcess { - - @Test - void shouldAddResourceLink() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath("$._links.resource.href").value(StringEndsWith.endsWith("/api/resources?uri={uri}"))); - } - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(RootController.PATH)).andExpect(status().isOk()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootControllerTest.java deleted file mode 100644 index d5a33f093432974751ff02c0b0803b5e6cec00dd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootControllerTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.time.LocalDateTime; -import java.time.ZoneOffset; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.boot.info.BuildProperties; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import lombok.SneakyThrows; - -class RootControllerTest { - - @Spy - @InjectMocks - private RootController controller; - @Mock - private BuildProperties properties; - @Mock - private RootModelAssembler modelAssembler; - @Mock - private RootProperties rootProperties; - - private MockMvc mockMvc; - - @BeforeEach - void mock() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - - when(modelAssembler.toModel(any())).thenAnswer(i -> EntityModel.of(i.getArguments()[0])); - when(rootProperties.getBarrierefreiheitUrl()).thenReturn(RootTestFactory.BARRIEREFREIHEIT_URL); - } - - @DisplayName("Root") - @Nested - class TestRoot { - - @SneakyThrows - @Test - void shouldHaveJavaVersion() { - doRequest().andExpect(jsonPath("$.javaVersion").exists()); - } - - @SneakyThrows - @Test - void shouldHaveVersion() { - when(properties.getVersion()).thenReturn("42"); - - doRequest().andExpect(jsonPath("$.version").value("42")); - } - - @SneakyThrows - @Test - void shouldHaveBuildTime() { - when(properties.getTime()).thenReturn(LocalDateTime.parse("2021-04-01T10:30").toInstant(ZoneOffset.UTC)); - - doRequest().andExpect(jsonPath("$.buildTime").exists()); - } - - @SneakyThrows - @Test - void shouldHaveProduction() { - doRequest().andExpect(jsonPath("$.production").exists()); - } - - @SneakyThrows - @Test - void shouldHaveBarrierefreiheitUrl() { - doRequest().andExpect(jsonPath("$.barrierefreiheitUrl").value(RootTestFactory.BARRIEREFREIHEIT_URL)); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(RootController.PATH)).andExpect(status().isOk()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootModelAssemblerTest.java deleted file mode 100644 index ebdd8bb4d4461195166315635220275d7eb5884c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootModelAssemblerTest.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.system.SystemStatusService; - -class RootModelAssemblerTest { - - @Spy - @InjectMocks - private RootModelAssembler modelAssembler; - @Mock - private CurrentUserService currentUserService; - @Mock - private SystemStatusService systemStatusService; - @Mock - private UserManagerUrlProvider userManagerUrlProvider; - @Mock - private RootViewLinkHandler viewLinkHandler; - - private Root root = RootTestFactory.create(); - - @DisplayName("Links for user") - @Nested - class TestLinks { - - @DisplayName("with role " + UserRole.VERWALTUNG_USER) - @Nested - class TestWithVerwaltungRole { - - @BeforeEach - void mockCurrentUserService() { - doReturn(true).when(modelAssembler).hasVerwaltungRole(); - } - - @Test - void shouldHaveSelfLink() { - var model = modelAssembler.toModel(root); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent(); - } - - @Test - void shouldHaveDownloadTokenLink() { - var model = modelAssembler.toModel(root); - - assertThat(model.getLink(RootModelAssembler.REL_DOWNLOAD_TOKEN)).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/downloadtoken"); - } - } - - @DisplayName("with no role") - @Nested - class TestWithNoRole { - - @BeforeEach - void mockCurrentUserService() { - when(currentUserService.hasRole(anyString())).thenReturn(false); - } - - @Test - void shouldHaveNoLinkAtAll() { - var model = modelAssembler.toModel(root); - - assertThat(model.getLinks()).isEmpty(); - } - } - - @DisplayName("current user") - @Nested - class CurrentUser { - - @DisplayName("when usermanager url is configured") - @Nested - class UsermanagerUrlConfigured { - - private String userProfileTemplate = "UserProfileTemplate/%s"; - - @BeforeEach - void mock() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(true); - when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(userProfileTemplate); - when(currentUserService.findUserId()).thenReturn(Optional.of(UserProfileTestFactory.ID)); - } - - @Test - void shouldHaveCurrentUserLinkWithUserId() { - var model = modelAssembler.toModel(root); - - assertThat(model.getLink(RootModelAssembler.REL_CURRENT_USER)) - .isPresent().get().extracting(Link::getHref) - .isEqualTo("UserProfileTemplate/" + UserProfileTestFactory.ID); - } - - } - - @DisplayName("when usermanager url is not configured") - @Nested - class UsermanagerUrlNotConfigured { - - @BeforeEach - void mock() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(false); - } - - @Test - void shouldNotHaveCurrentUserLink() { - var model = modelAssembler.toModel(root); - - assertThat(model.getLink(RootModelAssembler.REL_CURRENT_USER)).isNotPresent(); - } - } - } - } - - @DisplayName("Test user assistance documentation link") - @Nested - class TestDocumentationLink { - - private static final String DOCUMENTATION_URL = "http://alfa-docs"; - - @Test - void shouldNotHaveLinkForUndefinedUrl() { - var link = modelAssembler.toModel(root); - - assertThat(link.getLink(RootModelAssembler.REL_DOCUMENTATIONS)).isEmpty(); - } - - @Test - void shouldHaveLinkForDefinedUrl() { - ReflectionTestUtils.setField(modelAssembler, "documentationUrl", DOCUMENTATION_URL); - - var link = modelAssembler.toModel(root); - - assertThat(link.getLink(RootModelAssembler.REL_DOCUMENTATIONS)) - .isPresent() - .map(Link::getHref) - .hasValue(DOCUMENTATION_URL); - } - - @Test - void shouldNotHaveLinkForEmptyStringUrl() { - ReflectionTestUtils.setField(modelAssembler, "documentationUrl", ""); - - var link = modelAssembler.toModel(root); - - assertThat(link.getLink(RootModelAssembler.REL_DOCUMENTATIONS)).isEmpty(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootTestFactory.java deleted file mode 100644 index 858aa28e9cbf3cf9991ee5e687eec0a0caef9d39..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -public class RootTestFactory { - - public static final String BARRIEREFREIHEIT_URL = "https://barrierefreiheit.de/"; - - public static Root create() { - return createBuilder().build(); - } - - public static Root.RootBuilder createBuilder() { - return Root.builder().barrierefreiheitUrl(BARRIEREFREIHEIT_URL); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java deleted file mode 100644 index c626a7ad29a639313e4d30a6c07bb59ea223112f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java +++ /dev/null @@ -1,745 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.system.SystemStatusService; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -class RootViewLinkHandlerTest { - - @Spy - @InjectMocks - private RootViewLinkHandler viewLinkHandler; - @Mock - private CurrentUserService currentUserService; - @Mock - private SystemStatusService systemStatusService; - - @DisplayName("Add view links") - @Nested - class TestAddViewLinks { - - @Mock - private Root rootResource; - - private Optional<UserId> emptyUserId = Optional.empty(); - - @Test - void shouldAddVorgaengeAllLink() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinks(modelBuilder, emptyUserId); - - assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.ALL_VORGAENGE_REL)) - .get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100"); - } - - @Test - void shouldCallAddSearchAllVorgaengeLink() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinks(modelBuilder, emptyUserId); - - verify(viewLinkHandler).addSearchAllVorgaengeLink(modelBuilder); - } - - @Test - void shouldAddLinksForVerwaltungPoststelle() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinks(modelBuilder, emptyUserId); - - verify(viewLinkHandler).addViewLinksForVerwaltungPoststelle(modelBuilder, emptyUserId); - } - - @Test - void shouldAddLinksForVerwaltungUser() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinks(modelBuilder, emptyUserId); - - verify(viewLinkHandler).addViewLinksForVerwaltungUser(modelBuilder, emptyUserId); - } - - @DisplayName("for " + UserRole.VERWALTUNG_POSTSTELLE) - @Nested - class TestVerwaltungPoststelle { - - private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource); - - @Test - void shouldCallBuildMyVorgaengeLink() { - viewLinkHandler.addViewLinksForVerwaltungPoststelle(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildMyVorgaengeLink(UserProfileTestFactory.ID); - } - - @DisplayName("search my vorgaenge") - @Nested - class TestSearchMyVorgaenge { - - @DisplayName("on configured search server") - @Nested - class TestOnConfiguredSearchServer { - - @Test - void shouldCallBuildSearchMyVorgaengeLink() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(true); - - viewLinkHandler.addViewLinksForVerwaltungPoststelle(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildSearchMyVorgaengeLink(UserProfileTestFactory.ID); - } - } - - @DisplayName("on not configured search server") - @Nested - class TestOnNotConfiguredSearchServer { - - @Test - void shouldNotCallBuildSearchMyVorgaengeLink() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(false); - - viewLinkHandler.addViewLinksForVerwaltungPoststelle(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler, never()).buildSearchMyVorgaengeLink(any()); - } - } - } - } - - @DisplayName("for " + UserRole.VERWALTUNG_USER) - @Nested - class TestVerwaltungUser { - - private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource); - - @Test - void shouldCallAddUnassignedVorgaengeLink() { - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildGetAllUnassignedVorgaengeLink(); - } - - @Test - void shouldCallAddMyVorgaengeLink() { - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildMyVorgaengeLink(UserProfileTestFactory.ID); - } - - @DisplayName("search my vorgaenge") - @Nested - class TestSearchMy { - - @DisplayName("on configured search server") - @Nested - class TestOnConfiguredSearchServer { - - @Test - void shouldCallBuildSearchMyVorgaengeLink() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(true); - - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildSearchMyVorgaengeLink(UserProfileTestFactory.ID); - } - } - - @DisplayName("on not configured search server") - @Nested - class TestOnNotConfiguredSearchServer { - - @Test - void shouldNotCallBuildSearchMyVorgaengeLink() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(false); - - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler, never()).buildSearchMyVorgaengeLink(any()); - } - } - } - - @Test - void shouldCallAddVorgangStatusLinks() { - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).addAllVorgangStatusLinks(modelBuilder); - } - - @Test - void shouldCallAddMyVorgaengeStatusLinks() { - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildMyVorgaengeStatusLinks(UserProfileTestFactory.ID); - } - - @Test - void shouldCallAddUnassignedVorgaengeStatusLinks() { - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildUnassignedVorgaengeStatusLinks(); - } - - @DisplayName("search unassigned vorgaenge") - @Nested - class TestSearchUnassignedVorgaengeLink { - - @DisplayName("with configured search server") - @Nested - class TestWithConfiguredSearchServer { - - @Test - void shouldCallBuildSearchUnassignedVorgaengeLink() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(true); - - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildSearchUnassignedVorgaengeLink(); - } - } - - @DisplayName("with not configured search server") - @Nested - class TestWithNotConfiguredSearchServer { - - @Test - void shouldNotCallBuildSearchUnassignedVorgaengeLink() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(false); - - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler, never()).buildSearchUnassignedVorgaengeLink(); - } - } - } - - @DisplayName("vorgaenge with open wiedervorlagen") - @Nested - class TestVorgaengeWithOpenWiedervorlagen { - - @Test - void shouldAddAllLink() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.ALL_WIEDERVORLAGEN_REL)) - .get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100&nextFrist=exists"); - } - - @DisplayName("considering user") - @Nested - class TestConsideringUser { - - @Test - void shouldAddAssignedLinkIfExists() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.MY_WIEDERVORLAGEN_REL)) - .get().extracting(Link::getHref) - .isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID + "&nextFrist=exists"); - } - - @Test - void shoulNotAddAssignedLinkIfNotExists() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.empty()); - - assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.MY_WIEDERVORLAGEN_REL)).isNotPresent(); - } - } - - @Test - void shouldAddUnassignedLink() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.UNASSIGNED_WIEDERVORLAGEN_REL)) - .get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=&nextFrist=exists"); - } - } - - @Test - void shouldAddLinksForUngeleseneNachrichten() { - viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - } - } - - @DisplayName("search all vorgaenge") - @Nested - class TestSearchAllVorgaenge { - - @Test - void shouldBeAddedIfSearchServerIsAvailable() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(true); - - var modelBuilder = ModelBuilder.fromEntity(rootResource); - viewLinkHandler.addSearchAllVorgaengeLink(modelBuilder); - - assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.SEARCH_ALL_REL)) - .get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100&searchBy={searchBy}"); - } - - @Test - void shouldNotBeAddedIfSearchServerIsUnavailable() { - when(systemStatusService.isSearchServerAvailable()).thenReturn(false); - - var modelBuilder = spy(ModelBuilder.fromEntity(rootResource)); - viewLinkHandler.addSearchAllVorgaengeLink(modelBuilder); - - verify(modelBuilder, never()).addLink(any(Link.class)); - } - } - - @DisplayName("my vorgaenge") - @Nested - class TestAddMyLink { - - @Test - void shouldBeAddedIfUserIsPresent() { - var link = viewLinkHandler.buildMyVorgaengeLink(UserProfileTestFactory.ID); - - assertThat(link.getHref()).isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID); - } - } - - @DisplayName("search my vorgaenge") - @Nested - class TestSearchMyVorgaengeLink { - - @Test - void shouldCallBuild() { - viewLinkHandler.buildSearchMyVorgaengeLink(UserProfileTestFactory.ID); - - verify(viewLinkHandler).buildGetAllVorgaengeByAssignedToAndSearchByLink(UserProfileTestFactory.ID); - } - - @Test - void shouldBuildLinkWithMyVorgaengeRel() { - var link = viewLinkHandler.buildSearchMyVorgaengeLink(UserProfileTestFactory.ID); - - assertThat(link.getRel()).extracting(LinkRelation::value).isEqualTo(RootViewLinkHandler.SEARCH_MY_VORGEANGE_REL); - } - } - - @DisplayName("search unassigned vorgaenge") - @Nested - class TestSearchUnassignedVorgaenge { - - @Test - void shouldBuildLink() { - var link = viewLinkHandler.buildSearchUnassignedVorgaengeLink(); - - assertThat(link.getHref()).isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=&searchBy={searchBy}"); - assertThat(link.getRel().value()).isEqualTo(RootViewLinkHandler.SEARCH_UNASSIGNED_VORGEANGE_REL); - } - } - - @DisplayName("search all vorgaenge by assignedTo") - @Nested - class TestBuildGetAllVorgaengeByAssigendToAndSearchLink { - - @Test - void shouldBuildLink() { - var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndSearchByLink(UserProfileTestFactory.ID).withSelfRel(); - - assertThat(link).extracting(Link::getHref) - .isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID.toString() + "&searchBy={searchBy}"); - } - } - - @DisplayName("all vorgang status") - @Nested - class TestAddAllVorgangStatusLinks { - - private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource); - - @Test - void shouldCallAddVorgangStatusLinks() { - viewLinkHandler.addAllVorgangStatusLinks(modelBuilder); - - verify(viewLinkHandler).addVorgangStatusLinks(modelBuilder, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE); - } - } - - @DisplayName("my vorgang status") - @Nested - class TestAddMyVorgangStatusLinks { - - @Test - void shouldCallAddVorgangStatusLink() { - viewLinkHandler.buildMyVorgaengeStatusLinks(UserProfileTestFactory.ID); - - verify(viewLinkHandler).buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, UserProfileTestFactory.ID); - } - - } - - @DisplayName("vorgang status") - @Nested - class TestBuildVorgangStatusLinks { - - private final UserId userId = UserProfileTestFactory.ID; - - @Test - void shouldCallBuildVorgangListByPageLink() { - viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); - - verify(viewLinkHandler, times(7)).buildGetAllVorgaengeByAssignedToAndStatus( - any(VorgangStatus.class), - eq(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE), - eq(userId)); - } - - @Test - void shouldCallFormatLinkRelTemplate() { - viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); - - verify(viewLinkHandler, times(7)).formatLinkRelTemplate(eq(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE), any(VorgangStatus.class)); - } - - @Test - void shouldBuildLinks() { - var links = viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); - - assertThat(links).hasSize(7); - } - } - - @DisplayName("format linkrel template") - @Nested - class TestFormatLinkRelTemplate { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldCallFormatLinkRelTemplateWithAllVorgaengeTemplate(VorgangStatus status) { - var linkRel = viewLinkHandler.formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, status); - - assertThat(linkRel).isEqualTo("vorgaenge_" + status.toString().toLowerCase() + "_all"); - } - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldCallFormatLinkRelTemplateWithMyVorgaengeTemplate(VorgangStatus status) { - var linkRel = viewLinkHandler.formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, status); - - assertThat(linkRel).isEqualTo("vorgaenge_" + status.toString().toLowerCase() + "_my"); - } - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldCallFormatLinkRelTemplateWithUnassignedVorgaengeTemplate(VorgangStatus status) { - var linkRel = viewLinkHandler.formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_UNASSIGNED_REL_TEMPLATE, status); - - assertThat(linkRel).isEqualTo("vorgaenge_" + status.toString().toLowerCase() + "_unassigned"); - } - } - - @DisplayName("build get all vorgaenge by status") - @Nested - class TestBuildGetAllByStatus { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldAddByStatus(VorgangStatus status) { - var link = viewLinkHandler.buildGetAllVorgaengeByStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE); - - assertThat(link.getHref()).isEqualTo("/api/vorgangs?page=0&limit=100&status=" + status.toString()); - } - - } - - @DisplayName("build get all vorgaenge by assignedTo and status") - @Nested - class TestBuildGetAllVorgaengeByAssignedToAndStatus { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldAddByAssignedToAndStatus(VorgangStatus status) { - var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, - UserProfileTestFactory.ID); - - assertThat(link.getHref()).isEqualTo( - "/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID.toString() + "&status=" + status.toString()); - } - } - - @DisplayName("build get all unassigned vorgaenge by status") - @Nested - class TestBuildGetAllUnassignedVorgaengeByStatus { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldAddByUnassignedToAndStatus(VorgangStatus status) { - var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, - UserId.empty()); - - assertThat(link.getHref()).isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=&status=" + status.toString()); - } - } - } - - @Nested - class TestBuildGelAllByUngeleseneNachrichtenLink { - - @Test - void shouldHaveLinkHref() { - var link = viewLinkHandler.buildGelAllByUngeleseneNachrichtenLink(); - - assertThat(link) - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs?page=0&limit=100&nachrichten=ungelesene"); - } - - @Test - void shouldHaveLinkRel() { - var link = viewLinkHandler.buildGelAllByUngeleseneNachrichtenLink(); - - assertThat(link) - .extracting(Link::getRel) - .extracting(LinkRelation::value) - .isEqualTo(RootViewLinkHandler.ALL_UNGELESENE_NACHRICHTEN_REL); - } - } - - @Nested - class TestBuildGetAllByAssignedToAndUngeleseneNachrichten { - - @Nested - class AssignTo { - - @Test - void shouldHaveLink() { - var link = viewLinkHandler.buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID, - RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL); - - assertThat(link) - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID + "&nachrichten=ungelesene"); - } - - @Test - void shouldHaveLinkRel() { - var link = viewLinkHandler.buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID, - RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL); - - assertThat(link) - .extracting(Link::getRel) - .extracting(LinkRelation::value) - .isEqualTo(RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL); - } - } - - @Nested - class Unassigned { - - @Test - void shouldHaveLink() { - var link = viewLinkHandler.buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), - RootViewLinkHandler.UNASSIGNED_UNGELESENE_NACHRICHTEN_REL); - - assertThat(link) - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=&nachrichten=ungelesene"); - } - - @Test - void shouldHaveLinkRel() { - var link = viewLinkHandler.buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), - RootViewLinkHandler.UNASSIGNED_UNGELESENE_NACHRICHTEN_REL); - - assertThat(link) - .extracting(Link::getRel) - .extracting(LinkRelation::value) - .isEqualTo(RootViewLinkHandler.UNASSIGNED_UNGELESENE_NACHRICHTEN_REL); - } - - } - - } - - @Nested - class TestAddGetByUngeleseneNachrichtenLinks { - - @Mock - private Root rootResource; - private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource); - private final Link linkAllUngeleseneNachrichten = Link.of(LoremIpsum.getInstance().getUrl()); - private final Link linkMyUngeleseneNachrichten = Link.of(LoremIpsum.getInstance().getUrl()); - private final Link linkUnassignedUngeleseneNachrichten = Link.of(LoremIpsum.getInstance().getUrl()); - - @BeforeEach - void setUp() { - doReturn(linkAllUngeleseneNachrichten).when(viewLinkHandler).buildGelAllByUngeleseneNachrichtenLink(); - doReturn(linkUnassignedUngeleseneNachrichten).when(viewLinkHandler) - .buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), RootViewLinkHandler.UNASSIGNED_UNGELESENE_NACHRICHTEN_REL); - } - - @Test - void shouldBuildLinkForUngeleseneNachrichten() { - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildGelAllByUngeleseneNachrichtenLink(); - } - - @Test - void shouldAddLinkForUngeleseneNachrichten() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - assertThat(modelBuilder.buildModel().getLinks()).contains(linkAllUngeleseneNachrichten); - } - - @Test - void shouldBuildLinkForUnassignedUngeleseneNachrichten() { - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.empty()); - - verify(viewLinkHandler).buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), - RootViewLinkHandler.UNASSIGNED_UNGELESENE_NACHRICHTEN_REL); - } - - @Test - void shouldAddLinkForUnassignedUngeleseneNachrichten() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.empty()); - - assertThat(modelBuilder.buildModel().getLinks()).contains(linkUnassignedUngeleseneNachrichten); - } - - @Nested - class UsedIdExists { - - @BeforeEach - void setUp() { - doReturn(linkMyUngeleseneNachrichten).when(viewLinkHandler).buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID, - RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL); - } - - @Test - void shouldBuildLinkForMyUngeleseneNachrichten() { - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - verify(viewLinkHandler).buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID, - RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL); - } - - @Test - void shouldAddLinkForMyUngeleseneNachrichten() { - var modelBuilder = ModelBuilder.fromEntity(rootResource); - - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID)); - - assertThat(modelBuilder.buildModel().getLinks()).contains(linkMyUngeleseneNachrichten); - } - } - - @Nested - class UserIdEmpty { - - @Test - void shouldNotBuildLinkForMyUngeleseneNachrichten() { - viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.empty()); - - verify(viewLinkHandler, never()).buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID, - RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL); - } - } - - } - - // @DisplayName("Test user assistance documentation link") - // @Nested - // class TestDocumentationLink { - // - // private static final String DOCUMENTATION_URL = "http://alfa-docs"; - // - // @Test - // void shouldNotHaveLinkForUndefinedUrl() { - // var link = viewLinkHandler.toModel(root); - // - // assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)).isEmpty(); - // } - // - // @Test - // void shouldHaveLinkForDefinedUrl() { - // ReflectionTestUtils.setField(viewLinkHandler, "documentationUrl", DOCUMENTATION_URL); - // - // var link = viewLinkHandler.toModel(root); - // - // assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)) - // .isPresent() - // .map(Link::getHref) - // .hasValue(DOCUMENTATION_URL); - // } - // - // @Test - // void shouldNotHaveLinkForEmptyStringUrl() { - // ReflectionTestUtils.setField(viewLinkHandler, "documentationUrl", ""); - // - // var link = viewLinkHandler.toModel(root); - // - // assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)).isEmpty(); - // } - // - // } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/SecurityTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/SecurityTestFactory.java deleted file mode 100644 index 9b64325252c99ae3ee0e8f91f371e5609e260b90..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/SecurityTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class SecurityTestFactory { - - static final String SUBJECT = UserProfileTestFactory.ID.toString(); - static final String USER_FIRSTNAME = "Tim"; - static final String USER_LASTNAME = "Tester"; - static final String ROLE = "Testrolle"; - static final List<SimpleGrantedAuthority> AUTHORITIES = Arrays.asList(new SimpleGrantedAuthority(ROLE)); - static final Collection<String> ORGANSIATIONSEINHEIT_IDS = List.of("812546"); -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenModelProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenModelProcessorTest.java deleted file mode 100644 index 98c3b71d19a838674ca853d415457eddd448f783..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/aktenzeichen/AktenzeichenModelProcessorTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.aktenzeichen; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.UriTemplate; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class AktenzeichenModelProcessorTest { - - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @InjectMocks - private AktenzeichenModelProcessor processor; - - @Nested - class TestSetAktenzeichenLink { - - @DisplayName("should not add a link if Vorgang is not present") - @Test - void shouldDoNothing() { - var model = processor.process(mock(EntityModel.class)); - - assertThat(model.hasLinks()).isFalse(); - } - - @ParameterizedTest - @EnumSource(names = { "ANGENOMMEN", "IN_BEARBEITUNG" }, mode = EnumSource.Mode.EXCLUDE) - void shouldNotCreateSetAktenzeichenLink(Vorgang.VorgangStatus vorgangStatus) { - initUserProfileUrlProvider(urlProvider); - - var model = processor.process(buildModelWithVorgangStatus(vorgangStatus)); - - assertThat(model.getLink(AktenzeichenModelProcessor.REL_SET_AKTENZEICHEN)).isEmpty(); - } - - @ParameterizedTest - @EnumSource(names = { "ANGENOMMEN", "IN_BEARBEITUNG" }) - void shouldCreateSetAktenzeichenLink(Vorgang.VorgangStatus vorgangStatus) { - initUserProfileUrlProvider(urlProvider); - - var model = processor.process(buildModelWithVorgangStatus(vorgangStatus)); - - assertThat(model.getLink(AktenzeichenModelProcessor.REL_SET_AKTENZEICHEN)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo(UriTemplate.of(CommandController.CommandByRelationController.COMMAND_BY_RELATION_PATH) - .expand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString() - ); - } - } - - private EntityModel<VorgangWithEingang> buildModelWithVorgangStatus(Vorgang.VorgangStatus vorgangStatus) { - return EntityModel.of(VorgangWithEingangTestFactory.createBuilder().status(vorgangStatus).build()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangControllerTest.java deleted file mode 100644 index a24e03e69012ef646a33ebf16c4a537de56edc05..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentByVorgangControllerTest.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.attachment; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.io.OutputStream; -import java.util.List; -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.zipdownload.ZipDownloadService; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class AttachmentByVorgangControllerTest { - - @Spy - @InjectMocks - private AttachmentByVorgangController controller; - @Mock - private BinaryFileModelAssembler modelAssembler; - @Mock - private OzgFileService fileService; - @Mock - private ZipDownloadService zipDownloadService; - @Mock - private VorgangController vorgangController; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetAttachmentsByVorgang { - - @BeforeEach - void mockFileService() { - when(fileService.getAttachments(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(OzgFileTestFactory.create())); - } - - @SneakyThrows - @Test - void shouldResponseWithStatusOk() { - var result = callEndpoint(); - - result.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldCallModelAssembler() { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<OzgFile>>any()); - } - - @SneakyThrows - private ResultActions callEndpoint() { - return mockMvc.perform( - get(AttachmentByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID)) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)); - } - } - - @DisplayName("Download") - @Nested - class TestDownload { - private final String filename = LoremIpsum.getInstance().getWords(1); - - @BeforeEach - void setUpMock() { - doReturn(filename).when(controller).buildZipName(VorgangHeaderTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldRespondWithStatusOk() { - var response = doRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldBuildZipName() { - doRequest(); - - verify(controller).buildZipName(VorgangHeaderTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldHaveContentDispositonHeader() { - var response = doRequest(); - - response.andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename)); - } - - @SneakyThrows - @Test - void shouldHaveContentType() { - var response = doRequest(); - - response.andExpect(header().string(HttpHeaders.CONTENT_TYPE, AttachmentByVorgangController.APPLICATION_ZIP_VALUE)); - } - - @SneakyThrows - @Test - void shouldWriteZipFile() { - doRequest(); - - verify(controller).createZipFile(any(), eq(VorgangHeaderTestFactory.ID)); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform(asyncDispatch( - mockMvc.perform(get(AttachmentByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID)) - .header(HttpHeaders.ACCEPT, AttachmentByVorgangController.APPLICATION_ZIP_VALUE)) - .andReturn())) - .andExpect(status().isOk()); - } - } - - @Nested - class TestBuildZipName { - private final String vorgangId = UUID.randomUUID().toString(); - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void mockVorgangController() { - when(vorgangController.getVorgang(vorgangId)).thenReturn(vorgang); - } - - @Test - void shouldCallVorgangController() { - callController(); - - verify(vorgangController).getVorgang(vorgangId); - } - - @Test - void shouldReturnFileName() { - var resultFileName = callController(); - - assertThat(resultFileName).isEqualTo(vorgang.getNummer() + "_Anhaenge.zip"); - } - - private String callController() { - return controller.buildZipName(vorgangId); - } - } - - @Nested - class TestCreateZipFile { - @Mock - private OutputStream outputStream; - - @Test - void shouldGetAttachments() { - callController(); - - verify(fileService).getAttachments(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallZipDownloadService() { - var ozgFile = OzgFileTestFactory.create(); - when(fileService.getAttachments(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(ozgFile)); - - callController(); - - verify(zipDownloadService).write(List.of(ozgFile), outputStream); - } - - private void callController() { - controller.createZipFile(outputStream, VorgangHeaderTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentMapperTest.java deleted file mode 100644 index bb3bdbcef5f77ed85b6049c9de170fce70f56e7e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/AttachmentMapperTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.attachment; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -import com.google.common.collect.Lists; - -import de.ozgcloud.alfa.common.binaryfile.FileId; - -class AttachmentMapperTest { - - @Test - void shouldMapAttachmentsToEmptyList() { - var attachments = AttachmentMapper.mapAttachments(null); - - assertThat(attachments).isEmpty(); - } - - @Test - void shouldMapAttachmentsToList() { - var attachments = AttachmentMapper.mapAttachments(Lists.newArrayList("a1", "a2")); - - assertThat(attachments).containsExactly(FileId.from("a1"), FileId.from("a2")); - } - - @Test - void shouldMapOneElementToList() { - var attachments = AttachmentMapper.mapAttachments("a1"); - - assertThat(attachments).containsExactly(FileId.from("a1")); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/GrpcGetAttachmentsResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/GrpcGetAttachmentsResponseTestFactory.java deleted file mode 100644 index f41bac3e3844016b8653c1ea66862b92ccbff7a7..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/attachment/GrpcGetAttachmentsResponseTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.attachment; - -import java.util.Collections; - -import de.ozgcloud.alfa.common.file.GrpcOzgFileTestFactory; -import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsResponse; -import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; - -public class GrpcGetAttachmentsResponseTestFactory { - - private static GrpcOzgFile GRPC_FILE = GrpcOzgFileTestFactory.create(); - - public static GrpcGetAttachmentsResponse create() { - return createBuilder().build(); - } - - public static GrpcGetAttachmentsResponse.Builder createBuilder() { - return GrpcGetAttachmentsResponse.newBuilder() - .addAllFile(Collections.singleton(GRPC_FILE)); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidByBeschiedenAmComparatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidByBeschiedenAmComparatorTest.java deleted file mode 100644 index 00d2595ed975a69e7ab3d536814327d3c11f37f5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidByBeschiedenAmComparatorTest.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; - -class BescheidByBeschiedenAmComparatorTest { - - @Spy - private BescheidByBeschiedenAmComparator comparator; - - @Nested - class TestCompare { - int expectedResult = -1; - private final Bescheid olderBescheid = BescheidTestFactory.create(); - private final Bescheid recentBescheid = BescheidTestFactory.create(); - - @Test - void shouldCompareByStatus() { - compare(); - - verify(comparator).compareByStatus(olderBescheid, recentBescheid); - } - - @Nested - class TestWithDraft { - - @BeforeEach - void setUpMock() { - doReturn(expectedResult).when(comparator).compareByStatus(olderBescheid, recentBescheid); - } - - @Test - void shouldNotCompareByBeschiedenAm() { - compare(); - - verify(comparator, never()).compareByBeschiedenAm(any(), any()); - } - - @Test - void shouldNotCompareBySentAt() { - compare(); - - verify(comparator, never()).compareBySentAt(any(), any()); - } - - @Test - void shouldReturnCompareByStatus() { - var compareResult = compare(); - - assertThat(compareResult).isEqualTo(expectedResult); - } - - } - - @Nested - class TestWithoutDraft { - - @BeforeEach - void mockCompareByStatus() { - doReturn(0).when(comparator).compareByStatus(olderBescheid, recentBescheid); - } - - @Nested - class TestWithDifferentBeschiedenAm { - - @BeforeEach - void setUpMock() { - doReturn(expectedResult).when(comparator).compareByBeschiedenAm(olderBescheid, recentBescheid); - } - - @Test - void shouldCompareByBeschiedenAm() { - compare(); - - verify(comparator).compareByBeschiedenAm(olderBescheid, recentBescheid); - } - - @Test - void shouldNotCompareBySentAt() { - compare(); - - verify(comparator, never()).compareBySentAt(any(), any()); - } - - @Test - void shouldReturnCompareByBeschiedenAmResult() { - var compareResult = compare(); - - assertThat(compareResult).isEqualTo(expectedResult); - } - } - - @Nested - class TestWithSameBeschiedenAm { - @BeforeEach - void setUpMock() { - doReturn(0).when(comparator).compareByBeschiedenAm(olderBescheid, recentBescheid); - } - - @Test - void shouldCompareByBeschiedenAm() { - compare(); - - verify(comparator).compareByBeschiedenAm(olderBescheid, recentBescheid); - } - - @Test - void shouldCompareBySentAt() { - compare(); - - verify(comparator).compareBySentAt(any(), any()); - } - - @Test - void shouldReturnCompareBySentAtResult() { - doReturn(expectedResult).when(comparator).compareBySentAt(olderBescheid, recentBescheid); - - var compareResult = compare(); - - assertThat(compareResult).isEqualTo(expectedResult); - } - } - } - - private int compare() { - return comparator.compare(olderBescheid, recentBescheid); - } - } - - @Nested - class TestCompareByStatus { - private final Bescheid sentBescheid = BescheidTestFactory.createBuilder().status(BescheidStatus.SENT).build(); - private final Bescheid draftBescheid = BescheidTestFactory.createBuilder().status(BescheidStatus.DRAFT).build(); - - @Test - void shouldReturnNegative() { - var result = comparator.compareByStatus(sentBescheid, draftBescheid); - - assertThat(result).isNegative(); - } - - @Test - void shouldReturnPositive() { - var result = comparator.compareByStatus(draftBescheid, sentBescheid); - - assertThat(result).isPositive(); - } - - @Test - void shouldReturnZero() { - var secondSentBescheid = BescheidTestFactory.createBuilder().status(BescheidStatus.SENT).build(); - var result = comparator.compareByStatus(sentBescheid, secondSentBescheid); - - assertThat(result).isZero(); - } - } - - @Nested - class TestCompareByBeschiedenAm { - private final Bescheid olderBescheid = BescheidTestFactory.createBuilder().beschiedenAm("2024-05-26").build(); - private final Bescheid recentBescheid = BescheidTestFactory.createBuilder().beschiedenAm("2024-05-27").build(); - - @Test - void shouldReturnNegative() { - var result = comparator.compareByBeschiedenAm(olderBescheid, recentBescheid); - - assertThat(result).isNegative(); - } - - @Test - void shouldReturnPositive() { - var result = comparator.compareByBeschiedenAm(recentBescheid, olderBescheid); - - assertThat(result).isPositive(); - } - - @Test - void shouldReturnZero() { - var result = comparator.compareByBeschiedenAm(olderBescheid, olderBescheid); - - assertThat(result).isZero(); - } - } - - @Nested - class TestComapreBySentAt { - - private final Bescheid olderBescheid = BescheidTestFactory.createBuilder() - .sentInfo(SentInfoTestFactory.create()) - .build(); - private final Bescheid recentBescheid = BescheidTestFactory.createBuilder() - .sentInfo(SentInfoTestFactory.createBuilder().sentAt(SentInfoTestFactory.SENT_AT.plusHours(1)).build()) - .build(); - - @Test - void shouldReturnNegative() { - var result = comparator.compareBySentAt(olderBescheid, recentBescheid); - - assertThat(result).isNegative(); - } - - @Test - void shouldReturnPositive() { - var result = comparator.compareBySentAt(recentBescheid, olderBescheid); - - assertThat(result).isPositive(); - } - - @Test - void shouldReturnZero() { - var result = comparator.compareBySentAt(olderBescheid, olderBescheid); - - assertThat(result).isZero(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidByVorgangControllerTest.java deleted file mode 100644 index 3611415ad72bfdd523a737fdd35c6869f1ae8bdd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidByVorgangControllerTest.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import lombok.SneakyThrows; - -class BescheidByVorgangControllerTest { - - @InjectMocks - private BescheidByVorgangController controller; - - @Mock - private BescheidService service; - - @Mock - private BescheidModelAssembler modelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void initMockMvc() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetAll { - private final Bescheid bescheid = BescheidTestFactory.create(); - - @BeforeEach - void setUpMock() { - when(service.findByVorgangIdSorted(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(bescheid)); - } - - @Test - @SneakyThrows - void shouldReturnStatusOk() { - var result = callEndpoint(); - - result.andExpect(status().isOk()); - } - - @Test - @SneakyThrows - void shouldCallService() { - callEndpoint(); - - verify(service).findByVorgangIdSorted(VorgangHeaderTestFactory.ID); - } - - @Test - @SneakyThrows - void shouldCallModelAssembler() { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(List.of(bescheid)); - } - - @Test - @SneakyThrows - void shouldReturnCollectionModel() { - CollectionModel<EntityModel<Bescheid>> model = CollectionModel.empty(); - when(modelAssembler.toCollectionModel(List.of(bescheid))).thenReturn(model); - - var result = callEndpoint(); - - assertThat(result.andReturn().getResponse().getContentAsString()).isEqualTo("{\"links\":[],\"content\":[]}"); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(BescheidByVorgangController.BESCHEID_BY_VORGANG_PATH + "/" + VorgangHeaderTestFactory.ID + "/bescheids")); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidCommandITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidCommandITCase.java deleted file mode 100644 index 6b523f3ee12b408ffee620f4174d2c86eb8ab918..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidCommandITCase.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandRemoteService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -public class BescheidCommandITCase { - - @Autowired - private MockMvc mockMvc; - @MockBean - private CommandRemoteService commandRemoteService; - - @WithMockUser - @Nested - class TestCreateCommand { - - @BeforeEach - void init() { - when(commandRemoteService.createCommand(any())).thenReturn(CommandTestFactory.create()); - } - - @Test - void createCommandWithInvalidBeschiedenAm() throws Exception { - String content = createInvalidRequestContent(BescheidTestFactory.createBuilder().beschiedenAm(null).build()); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.body.beschiedenAm")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_DATE_FORMAT_INVALID)); - } - - @ParameterizedTest - @ValueSource(strings = { "01.04.2014", "1.4.2014", "1.4.14" }) - void createCommandWithValidBeschiedenAm(String beschiedenAm) throws Exception { - String content = createValidRequestContent(BescheidTestFactory.createBuilder().beschiedenAm(beschiedenAm).build()); - - doRequest(content).andExpect(status().isCreated()); - } - - private static String createValidRequestContent(Bescheid bescheid) { - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithBescheid.json.tmpl", - CommandOrder.CREATE_BESCHEID.name(), - bescheid.getBeschiedenAm(), - String.valueOf(bescheid.getBewilligt())); - } - - private static String createInvalidRequestContent(Bescheid bescheid) { - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithInvalidBescheid.json.tmpl", - CommandOrder.CREATE_BESCHEID.name(), - String.valueOf(bescheid.getBewilligt())); - } - - private ResultActions doRequest(String content) throws Exception { - return mockMvc.perform( - post(CommandByRelationController.COMMAND_BY_RELATION_PATH, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, - VorgangHeaderTestFactory.VERSION) - .with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java deleted file mode 100644 index 458337f0fe6848e241ab6c7c702e95fe3f1c598b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.Optional; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.SneakyThrows; - -class BescheidControllerTest { - - @Spy - @InjectMocks - private BescheidController controller; - @Mock - private BescheidModelAssembler assembler; - @Mock - private BescheidService bescheidService; - @Mock - private BinaryFileController binaryFileController; - - private MockMvc mockMvc; - - private final Bescheid draft = BescheidTestFactory.create(); - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetDraft { - - @SneakyThrows - @Test - void shouldCallBescheidService() { - doRequest(); - - verify(bescheidService).getBescheidDraft(VorgangHeaderTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldReturnStatusNotFoundIfDraftDoesNotExist() { - when(bescheidService.getBescheidDraft(BescheidTestFactory.VORGANG_ID)).thenReturn(Optional.empty()); - - var response = doRequest(); - - response.andExpect(status().isNotFound()); - } - - @DisplayName("on existing") - @Nested - class TestOnExistingDraft { - - @BeforeEach - void mock() { - when(bescheidService.getBescheidDraft(BescheidTestFactory.VORGANG_ID)).thenReturn(Optional.of(draft)); - } - - @SneakyThrows - @Test - void shouldCallAssembler() { - doRequest(); - - verify(assembler).toModel(draft); - } - - @SneakyThrows - @Test - void shouldReturnValue() { - when(assembler.toModel(draft)).thenReturn(EntityModel.of(draft)); - - doRequest().andExpect(status().isOk()); - } - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform(get(BescheidController.PATH).param("vorgangId", VorgangHeaderTestFactory.ID)); - } - } - - @DisplayName("Get Attachments") - @Nested - class TestGetAttachments { - - @BeforeEach - void mock() { - doReturn(BescheidTestFactory.create()).when(controller).getBescheid(anyString(), anyString()); - } - - @SneakyThrows - @Test - void shouldGetBescheid() { - doRequest(); - - verify(controller).getBescheid(BescheidTestFactory.ID, BescheidTestFactory.VORGANG_ID); - } - - @SneakyThrows - @Test - void shouldCallBinaryFileController() { - doRequest(); - - verify(binaryFileController).getFiles(BescheidTestFactory.ATTACHMENTS); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - var response = doRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform( - get(BescheidController.PATH + "/{bescheidId}/attachments", BescheidTestFactory.ID).param("vorgangId", - BescheidTestFactory.VORGANG_ID)); - } - } - - @DisplayName("Get Bescheid") - @Nested - class TestGetBescheid { - - private final Bescheid matchingBescheid = BescheidTestFactory.create(); - private final Bescheid notMatchingBescheid = BescheidTestFactory.createBuilder().id("NOT_MATCH").build(); - - @BeforeEach - void mock() { - when(bescheidService.findByVorgangId(anyString())).thenReturn(Stream.of(matchingBescheid, notMatchingBescheid)); - } - - @DisplayName("should call service to find all bescheid by vorgang") - @Test - void shouldCallFindByVorgangId() { - controller.getBescheid(BescheidTestFactory.ID, VorgangHeaderTestFactory.ID); - - verify(bescheidService).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnMatchingEntry() { - var bescheid = controller.getBescheid(BescheidTestFactory.ID, VorgangHeaderTestFactory.ID); - - assertThat(bescheid).isEqualTo(matchingBescheid); - } - - @Test - void shouldThrowExceptionIfNoBescheidExists() { - when(bescheidService.findByVorgangId(anyString())).thenReturn(Stream.empty()); - - assertThatThrownBy(() -> controller.getBescheid(BescheidTestFactory.ID, VorgangHeaderTestFactory.ID)) - .isInstanceOf(TechnicalException.class) - .hasMessageContaining("No Bescheid exists for id " + BescheidTestFactory.ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidHistorieProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidHistorieProcessorTest.java deleted file mode 100644 index b6bf0944b34d9f7b1f9d93511ae3fe75bc2cd0cb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidHistorieProcessorTest.java +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; - -class BescheidHistorieProcessorTest { - - @Spy - @InjectMocks - private BescheidHistorieProcessor processor; - @Mock - private VorgangAttachedItemService vorgangAttachedItemService; - - @DisplayName("Process") - @Nested - class TestProcess { - - private final Command command = CommandTestFactory.create(); - private final List<Command> commands = Collections.singletonList(command); - - @BeforeEach - void mock() { - doReturn(commands).when(processor).filterByOrder(commands); - doReturn(commands).when(processor).filterBescheidRelatedCommands(commands); - } - - @Test - void shouldFilterByOrder() { - processor.process(commands); - - verify(processor).filterByOrder(commands); - } - - @Test - void shouldFilterBescheidRelatedCommands() { - processor.process(commands); - - verify(processor).filterBescheidRelatedCommands(commands); - } - - @Test - void shouldReturnCommands() { - var processedCommands = processor.process(commands); - - assertThat(processedCommands).containsExactly(command); - } - } - - @DisplayName("Filter by order") - @Nested - class TestFilterByOrder { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "CREATE_BESCHEID", "DELETE_BESCHEID" }) - void shouldFilterCommandWithOrder(CommandOrder order) { - var command = CommandTestFactory.createBuilder().order(order.name()).build(); - - var commands = processor.filterByOrder(Collections.singletonList(command)); - - assertThat(commands).isEmpty(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "CREATE_BESCHEID", "DELETE_BESCHEID" }) - void shouldKeepCommandWithOrder(CommandOrder order) { - var command = CommandTestFactory.createBuilder().order(order.name()).build(); - - var commands = processor.filterByOrder(Collections.singletonList(command)); - - assertThat(commands).containsExactly(command); - } - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "CREATE_ATTACHED_ITEM", "UPDATE_ATTACHED_ITEM", "PATCH_ATTACHED_ITEM" }) - @DisplayName("should filter bescheid related command") - void shouldFilterAttachedItemCommand(CommandOrder order) { - var command = CommandTestFactory.createBuilder().order(order.name()) - .body(Collections.singletonMap(VorgangAttachedItem.FIELD_ITEM_NAME, BescheidHistorieProcessor.BESCHEID_ITEM_NAME)) - .build(); - - var commands = processor.filterByOrder(Collections.singletonList(command)); - - assertThat(commands).isEmpty(); - } - } - - @DisplayName("Filter bescheid related commands") - @Nested - class TestFilterBescheidRelatedCommands { - - private final Command commandToFilter = CommandTestFactory.createBuilder().id(UUID.randomUUID().toString()).build(); - private final Command command = CommandTestFactory.create(); - private final List<Command> commands = List.of(commandToFilter, command); - - @BeforeEach - void mock() { - doReturn(Collections.singletonList(commandToFilter.getId())).when(processor).getExcludedBescheidRelatedCommandIds(any()); - } - - @Test - void shouldGetBescheidRelatedCommandIdsToFilter() { - processor.filterBescheidRelatedCommands(commands); - - verify(processor).getExcludedBescheidRelatedCommandIds(commands); - } - - @Test - void shouldReturnFilteredList() { - var filteredCommands = processor.filterBescheidRelatedCommands(commands); - - assertThat(filteredCommands).containsExactly(command); - } - } - - @DisplayName("Get bescheid related command ids to filter") - @Nested - class TestGetBescheidRelatedCommandIdsToFilter { - - private final Command sendBescheidCommand = CommandTestFactory.createBuilder() - .id(UUID.randomUUID().toString()) - .relationId(BescheidTestFactory.ID) - .order(CommandOrder.SEND_BESCHEID.name()) - .build(); - private final Command updateBescheidCommand = CommandTestFactory.createBuilder() - .id(UUID.randomUUID().toString()) - .relationId(BescheidTestFactory.ID) - .order(CommandOrder.UPDATE_BESCHEID.name()) - .build(); - private final Command updateBescheidCommandOfBescheidNotSent = CommandTestFactory.createBuilder() - .id(UUID.randomUUID().toString()) - .relationId(UUID.randomUUID().toString()) - .order(CommandOrder.UPDATE_BESCHEID.name()) - .build(); - private final List<Command> commands = List.of(sendBescheidCommand, updateBescheidCommand, updateBescheidCommandOfBescheidNotSent); - - @BeforeEach - void mock() { - doReturn(Collections.singletonList(updateBescheidCommand.getId())).when(processor).getCommandIdsToFilter(any(), any()); - } - - @Test - void shouldGetCommandIdsToFilter() { - processor.getExcludedBescheidRelatedCommandIds(commands); - - verify(processor).getCommandIdsToFilter(sendBescheidCommand, commands); - } - - @Test - void shouldReturnIdsToFilter() { - var commandIds = processor.getExcludedBescheidRelatedCommandIds(commands); - - assertThat(commandIds).containsExactlyInAnyOrder(updateBescheidCommand.getId(), updateBescheidCommandOfBescheidNotSent.getId()); - } - } - - @DisplayName("Get commands to filter") - @Nested - class TestGetCommandsToFilter { - - private final Command sendBescheidCommand = CommandTestFactory.createBuilder() - .id(UUID.randomUUID().toString()) - .relationId(BescheidTestFactory.ID) - .order(CommandOrder.SEND_BESCHEID.name()).build(); - - private final Command relatedUpdateBescheidCommand = CommandTestFactory.createBuilder().id(UUID.randomUUID().toString()) - .createdAt(ZonedDateTime.now()).build(); - private final Command relatedLatestUpdateBescheidCommand = CommandTestFactory.createBuilder().id(UUID.randomUUID().toString()) - .createdAt(ZonedDateTime.now().plusMinutes(10)) - .build(); - private final List<Command> relatedUpdateBescheidCommands = List.of(relatedUpdateBescheidCommand, relatedLatestUpdateBescheidCommand); - - private final Map<String, ?> bescheidItemMap = BescheidTestFactory.createAsMap(); - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.createBuilder().item(bescheidItemMap).build(); - - @BeforeEach - void mock() { - when(vorgangAttachedItemService.getById(anyString())).thenReturn(vorgangAttachedItem); - doReturn(relatedUpdateBescheidCommands).when(processor).getRelatedUpdateBescheidCommands(sendBescheidCommand, - relatedUpdateBescheidCommands); - } - - @Test - void shouldGetRelatedUpdateBescheidCommands() { - processor.getCommandIdsToFilter(sendBescheidCommand, relatedUpdateBescheidCommands); - - verify(processor).getRelatedUpdateBescheidCommands(sendBescheidCommand, relatedUpdateBescheidCommands); - } - - @Test - void shouldGetVorgangAttachedItem() { - processor.getCommandIdsToFilter(sendBescheidCommand, relatedUpdateBescheidCommands); - - verify(processor).getVorgangAttachedItem(sendBescheidCommand.getRelationId()); - } - - @Test - void shouldCheckIfManualSent() { - processor.getCommandIdsToFilter(sendBescheidCommand, relatedUpdateBescheidCommands); - - verify(processor).isManualSent(bescheidItemMap); - } - - @DisplayName("on send by manual") - @Nested - class TestOnSendByManualCommand { - - private final VorgangAttachedItem vorgangAttachedItem = createVorgangAttachedItem(createBescheidMap(SendBy.MANUAL)); - - @BeforeEach - void mock() { - when(vorgangAttachedItemService.getById(anyString())).thenReturn(vorgangAttachedItem); - doReturn(Stream.of(relatedUpdateBescheidCommand.getId())).when(processor).filterLatestByCreatedAt(any()); - } - - @Test - void shouldCallFilterLatestByCreatedAt() { - processor.getCommandIdsToFilter(sendBescheidCommand, relatedUpdateBescheidCommands); - - verify(processor).filterLatestByCreatedAt(relatedUpdateBescheidCommands); - } - - @Test - void shouldReturnRelatedCommandIds() { - var ids = processor.getCommandIdsToFilter(sendBescheidCommand, relatedUpdateBescheidCommands); - - assertThat(ids).containsExactly(sendBescheidCommand.getId(), relatedUpdateBescheidCommand.getId()); - } - } - - @DisplayName("on send by nachricht") - @Nested - class TestOnSendByNachrichtCommand { - - private final VorgangAttachedItem vorgangAttachedItem = createVorgangAttachedItem(createBescheidMap(SendBy.NACHRICHT)); - - @BeforeEach - void mock() { - when(vorgangAttachedItemService.getById(anyString())).thenReturn(vorgangAttachedItem); - } - - @Test - void shouldReturnRelatedCommandIds() { - var ids = processor.getCommandIdsToFilter(sendBescheidCommand, relatedUpdateBescheidCommands); - - assertThat(ids).containsExactly(relatedUpdateBescheidCommand.getId()); - } - } - - private VorgangAttachedItem createVorgangAttachedItem(Map<String, Object> item) { - return VorgangAttachedItemTestFactory.createBuilder() - .id(BescheidTestFactory.ID) - .itemName(BescheidHistorieProcessor.BESCHEID_ITEM_NAME) - .item(item) - .build(); - } - - private Map<String, Object> createBescheidMap(SendBy sendBy) { - var item = BescheidTestFactory.createAsMap(); - item.put(Bescheid.SEND_BY_FIELD, sendBy); - return item; - } - } - - @DisplayName("Get related update bescheid commands") - @Nested - class TestGetRelatedUpdateBescheiCommands { - - private final Command command = CommandTestFactory.create(); - - @Test - void shouldFilterOnMismatchRelationId() { - var commandWithNonMatchingRelationId = CommandTestFactory.createBuilder().relationId(UUID.randomUUID().toString()).build(); - - var relatedCommands = processor.getRelatedUpdateBescheidCommands(command, Collections.singletonList(commandWithNonMatchingRelationId)); - - assertThat(relatedCommands).isEmpty(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "UPDATE_BESCHEID" }) - void shouldKeepUpdateBescheidCommandsOnly(CommandOrder order) { - var commandWithNonMatchingOrder = CommandTestFactory.createBuilder().order(order.name()).build(); - - var relatedCommands = processor.getRelatedUpdateBescheidCommands(command, Collections.singletonList(commandWithNonMatchingOrder)); - - assertThat(relatedCommands).containsExactly(commandWithNonMatchingOrder); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "UPDATE_BESCHEID" }) - void shouldFilterNonUpdateBescheidCommands(CommandOrder order) { - var commandWithNonMatchingOrder = CommandTestFactory.createBuilder().order(order.name()).build(); - - var relatedCommands = processor.getRelatedUpdateBescheidCommands(command, Collections.singletonList(commandWithNonMatchingOrder)); - - assertThat(relatedCommands).isEmpty(); - } - } - - @DisplayName("Get vorgangAttachedItem") - @Nested - class TestGetVorgangAttachedItem { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @BeforeEach - void mock() { - when(vorgangAttachedItemService.getById(anyString())).thenReturn(vorgangAttachedItem); - } - - @Test - void shouldCallService() { - processor.getVorgangAttachedItem(VorgangAttachedItemTestFactory.ID); - - verify(vorgangAttachedItemService).getById(VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldReturn() { - var vorgangAttachedItem = processor.getVorgangAttachedItem(VorgangAttachedItemTestFactory.ID); - - assertThat(vorgangAttachedItem).isNotNull().usingRecursiveComparison().isEqualTo(vorgangAttachedItem); - } - } - - @DisplayName("Is manual sent") - @Nested - class TestIsManualSent { - - @Test - void shouldReturnTrueOnManual() { - var manualSent = processor.isManualSent(Map.of(Bescheid.SEND_BY_FIELD, SendBy.MANUAL)); - - assertThat(manualSent).isTrue(); - } - - @Test - void shouldReturnFalseOnNachricht() { - var manualSent = processor.isManualSent(Map.of(Bescheid.SEND_BY_FIELD, SendBy.NACHRICHT)); - - assertThat(manualSent).isFalse(); - } - - @Test - void shouldThrowOnMissingSendBy() { - var bescheidItemMap = Collections.<String, Object>emptyMap(); - assertThatThrownBy(() -> processor.isManualSent(bescheidItemMap)).isInstanceOf(NullPointerException.class); - } - } - - @DisplayName("Filter latest by createdAt") - @Nested - class TestFilterLatestByCreatedAt { - - private final Command command1 = CommandTestFactory.createBuilder().id(UUID.randomUUID().toString()) - .createdAt(ZonedDateTime.now().minusHours(12)).build(); - private final Command command2 = CommandTestFactory.createBuilder().id(UUID.randomUUID().toString()).createdAt(ZonedDateTime.now()).build(); - private final Command command3 = CommandTestFactory.createBuilder().id(UUID.randomUUID().toString()) - .createdAt(ZonedDateTime.now().plusHours(12)).build(); - - private final List<Command> commands = List.of(command2, command3, command1); - - @Test - void shouldFilterLatestCreatedAtCommand() { - var filteredCommands = processor.filterLatestByCreatedAt(commands); - - assertThat(filteredCommands).containsExactlyInAnyOrder(command1.getId(), command2.getId()); - } - - @Test - void shouldReturnEmptyIfThereAreNoCommands() { - var latestCommandId = processor.filterLatestByCreatedAt(List.of()); - - assertThat(latestCommandId).isEmpty(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java deleted file mode 100644 index 2b93192a54784deb5eb7ea1a98f68f0933cb7924..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class BescheidMapperTest { - - @Mock - private FileIdMapper fileIdMapper; - @Mock - private UserIdMapper userIdMapper; - @InjectMocks - private final BescheidMapper mapper = Mappers.getMapper(BescheidMapper.class); - - @Nested - class TestFromGrpc { - - @Test - void shouldMapId() { - var bescheid = map(); - - assertThat(bescheid.getId()).isEqualTo(GrpcBescheidTestFactory.ID); - } - - @Test - void shouldMapVorgangId() { - var bescheid = map(); - - assertThat(bescheid.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldMapBewilligt() { - var bescheid = map(); - - assertThat(bescheid.getBewilligt()).isEqualTo(GrpcBescheidTestFactory.BEWILLIGT); - } - - @Test - void shouldMapBeschiedenAm() { - var bescheid = map(); - - assertThat(bescheid.getBeschiedenAm()).isEqualTo(GrpcBescheidTestFactory.BESCHIEDEN_AM); - } - - @Test - void shouldMapBescheidDocument() { - var bescheid = map(); - - assertThat(bescheid.getBescheidDocument()).isEqualTo(GrpcBescheidTestFactory.BESCHEID_DOCUMENT); - } - - @Test - void shouldMapAttachments() { - when(fileIdMapper.toFileId(any())).thenCallRealMethod(); - - var bescheid = map(); - - assertThat(bescheid.getAttachments()).containsExactlyInAnyOrderElementsOf(BescheidTestFactory.ATTACHMENTS); - } - - @Test - void shouldMapNachrichtText() { - var bescheid = map(); - - assertThat(bescheid.getNachrichtText()).isEqualTo(GrpcBescheidTestFactory.NACHRICHT_TEXT); - } - - @Test - void shouldMapNachrichtSubject() { - var bescheid = map(); - - assertThat(bescheid.getNachrichtSubject()).isEqualTo(GrpcBescheidTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldMapStatus() { - var bescheid = map(); - - assertThat(bescheid.getStatus()).isEqualTo(BescheidTestFactory.STATUS); - } - - @Nested - class TestMapSentInfo { - private final SentInfo expectedSentInfo = SentInfoTestFactory.createBuilder() - .sentAt(ZonedDateTime.parse(GrpcSentInfoTestFactory.SENT_AT)) - .sentBy(UserId.from(GrpcSentInfoTestFactory.SENT_BY)) - .build(); - - @Test - void shouldMapSentBy() { - when(userIdMapper.fromString(GrpcSentInfoTestFactory.SENT_BY)).thenCallRealMethod(); - - var bescheid = map(); - - assertThat(bescheid.getSentInfo().getSentBy()).isEqualTo(expectedSentInfo.getSentBy()); - } - - @Test - void shouldMapSentAt() { - var bescheid = map(); - - assertThat(bescheid.getSentInfo().getSentAt()).isEqualTo(expectedSentInfo.getSentAt()); - } - } - - private Bescheid map() { - return mapper.fromGrpc(GrpcBescheidTestFactory.create(), VorgangHeaderTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java deleted file mode 100644 index 2db87cf5d2741de5cc3ad649dfb414c8b0e31d1c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static de.ozgcloud.alfa.bescheid.BescheidModelAssembler.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.util.Collections; -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.web.util.UriTemplate; - -import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.vorgang.Eingang; -import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeadTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangProperties; -import de.ozgcloud.alfa.vorgang.VorgangPropertyTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class BescheidModelAssemblerTest { - - @Spy - @InjectMocks - private BescheidModelAssembler assembler; - - @Mock - private BescheidService bescheidService; - - @Mock - private VorgangProperties vorgangProperties; - - @Mock - private VorgangController vorgangController; - @Mock - private PostfachMailController postfachMailController; - - @Nested - class TestToModel { - - private final Bescheid bescheid = BescheidTestFactory.create(); - private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void setUp() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgangWithEingang); - } - - @Test - void shouldHaveSelfLink() { - var model = callToModel(); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref) - .isEqualTo(BescheidController.PATH + "?vorgangId=" + BescheidTestFactory.VORGANG_ID); - } - - @Test - void shouldHaveDeleteLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_DELETE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(new UriTemplate(CommandController.CommandByRelationController.COMMAND_BY_RELATION_PATH) - .expand(VorgangHeaderTestFactory.ID, BescheidTestFactory.ID, BescheidTestFactory.VERSION).toString()); - } - - @Test - void shouldHaveUploadBescheidFileLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_UPLOAD_BESCHEID_FILE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(uploadFileLink("bescheidFile")); - } - - @Test - void shouldHaveUploadAttachmentLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_UPLOAD_ATTACHMENT)).isPresent().get().extracting(Link::getHref) - .isEqualTo(uploadFileLink("bescheidAttachment")); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldNotHaveAttachmentsLinkIfNoAttachmentsAvailable(List<FileId> attachments) { - var bescheid = BescheidTestFactory.createBuilder().attachments(attachments).build(); - - var model = callToModel(bescheid); - - assertThat(model.getLink(REL_ATTACHMENTS)).isEmpty(); - } - - @Test - void shouldHaveAttachmentsLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_ATTACHMENTS)).isPresent().get().extracting(Link::getHref) - .isEqualTo(String.format("%s/%s/attachments?vorgangId=%s", BescheidController.PATH, BescheidTestFactory.ID, - BescheidTestFactory.VORGANG_ID)); - } - - @Test - void shouldHaveUpdateLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_UPDATE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(createCommandLink()); - } - - @Test - void shouldHaveCreateDocumentLink() { - doReturn(true).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang); - - var model = callToModel(); - - assertThat(model.getLink(REL_CREATE_DOCUMENT)).isPresent().get().extracting(Link::getHref) - .isEqualTo(createCommandLink()); - } - - @Test - void shoulNotdHaveCreateDocumentLink() { - doReturn(false).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang); - - var model = callToModel(); - - assertThat(model.getLink(REL_CREATE_DOCUMENT)).isEmpty(); - } - - @Test - void shouldHaveCreateDocumentFromFileLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_CREATE_DOCUMENT_FROM_FILE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(createCommandLink()); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldNotHaveBescheidDocumentLinkIfNoDocumentAvailable(String documentId) { - var model = callToModel(BescheidTestFactory.createBuilder().bescheidDocument(documentId).build()); - - assertThat(model.getLink(REL_BESCHEID_DOCUMENT)).isEmpty(); - } - - @Test - void shouldHaveBescheidDocumentLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_BESCHEID_DOCUMENT)).isPresent().get().extracting(Link::getHref) - .isEqualTo(String.format("%s/%s", DocumentController.PATH, BescheidTestFactory.BESCHEID_DOCUMENT)); - } - - @Test - void shouldHaveBescheidenUndSendenLink() { - when(postfachMailController.isPostfachConfigured()).thenReturn(true); - - var model = callToModel(); - - assertThat(model.getLink(REL_BESCHEIDEN_UND_SENDEN)) - .isPresent().get() - .extracting(Link::getHref).isEqualTo(bescheidenUndSendenLink()); - } - - @Test - void shouldNotHaveBescheidenUndSendenLinkOnNotConfiguredPostfach() { - when(postfachMailController.isPostfachConfigured()).thenReturn(false); - - var model = callToModel(); - - assertThat(model.getLink(REL_BESCHEIDEN_UND_SENDEN)).isEmpty(); - } - - @Test - void shouldNotHaveBescheidenUndSendenLinkOnVorgangWithoutServiceKonto() { - var vorgang = vorgangWithEingang.builder().header(VorgangHeadTestFactory.createBuilder().serviceKonto(null).build()).build(); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - when(postfachMailController.isPostfachConfigured()).thenReturn(true); - - var model = callToModel(); - - assertThat(model.getLink(REL_BESCHEIDEN_UND_SENDEN)).isEmpty(); - } - - @Test - void shouldHaveBescheidenLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_BESCHEIDEN)) - .isPresent().get() - .extracting(Link::getHref).isEqualTo(createCommandLink()); - } - - @Test - void shouldHaveBody() { - var model = callToModel(); - - assertThat(model.getContent()).isEqualTo(bescheid); - } - - private String uploadFileLink(String field) { - return new UriTemplate("/api/binaryFiles/{vorgangId}/{field}/file").expand(VorgangHeaderTestFactory.ID, field).toString(); - } - - private String createCommandLink() { - return new UriTemplate(CommandController.CommandByRelationController.COMMAND_BY_RELATION_PATH) - .expand(VorgangHeaderTestFactory.ID, BescheidTestFactory.ID, BescheidTestFactory.VERSION).toString(); - } - - private String bescheidenUndSendenLink() { - return new UriTemplate(BescheidCommandController.PATH) - .expand(VorgangHeaderTestFactory.ID, BescheidTestFactory.ID, BescheidTestFactory.VERSION).toString(); - } - - private EntityModel<Bescheid> callToModel() { - return callToModel(bescheid); - } - - private EntityModel<Bescheid> callToModel(Bescheid bescheid) { - return assembler.toModel(bescheid); - } - } - - @Nested - class TestToCollectionModel { - private final Bescheid bescheid = BescheidTestFactory.create(); - - @Test - void shouldCallToModel() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create()); - - callMethod(); - - verify(assembler).toModel(bescheid); - } - - @Test - void shouldHaveEntityModel() { - var entityModel = ModelBuilder.fromEntity(bescheid).buildModel(); - doReturn(entityModel).when(assembler).toModel(bescheid); - - var collectionModel = callMethod(); - - assertThat(collectionModel.getContent()).containsExactly(entityModel); - } - - @Test - void shouldHaveSelfLink() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create()); - - var collectionModel = callMethod(); - - assertThat(collectionModel.getLinks()) - .containsExactly(linkTo(BescheidByVorgangController.class).withSelfRel()); - } - - private CollectionModel<EntityModel<Bescheid>> callMethod() { - return assembler.toCollectionModel(List.of(bescheid)); - } - - } - - @Nested - class TestHasVorgangCreateBescheidDocumentEnabled { - - @Nested - class TestOnEmptyBescheidProperties { - - @BeforeEach - void setUp() { - when(vorgangProperties.getBescheid()).thenReturn(Collections.emptyList()); - } - - @Test - void shouldReturnFalse() { - var hasEnabled = callAssembler(VorgangWithEingangTestFactory.create()); - - assertThat(hasEnabled).isFalse(); - } - - } - - @Nested - class TestOnBescheidPropertiesSet { - - @BeforeEach - void setUp() { - when(vorgangProperties.getBescheid()).thenReturn(List.of(VorgangPropertyTestFactory.create())); - } - - @Test - void shouldReturnFalseIfFormEngineNameNotEquals() { - var vorgang = createVorgang(EingangTestFactory.createBuilder() - .header(EingangHeaderTestFactory.createBuilder() - .formEngineName("different").build()) - .build()); - - var hasEnabled = callAssembler(vorgang); - - assertThat(hasEnabled).isFalse(); - } - - @Test - void shouldReturnTrue() { - var hasEnabled = callAssembler(VorgangWithEingangTestFactory.create()); - - assertThat(hasEnabled).isTrue(); - } - } - - @Test - void shouldReturnFalseOnEmptyEingang() { - var vorgangWithEmptyEingang = createVorgang(null); - - var hasEnabled = callAssembler(vorgangWithEmptyEingang); - - assertThat(hasEnabled).isFalse(); - } - - @Test - void shouldReturnFalseOnEmptyEingangHeader() { - var vorgangWithEmptyEingangHeader = EingangTestFactory.createBuilder().header(null).build(); - - var hasEnabled = callAssembler(createVorgang(vorgangWithEmptyEingangHeader)); - - assertThat(hasEnabled).isFalse(); - } - - @Test - void shouldReturnFalseOnEmptyFormEngineName() { - var vorgangWithEmptyFormEngineName = createVorgang( - EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formEngineName(null).build()).build()); - - var hasEnabled = callAssembler(vorgangWithEmptyFormEngineName); - - assertThat(hasEnabled).isFalse(); - } - - @Test - void shouldReturnFalseOnEmptyFormId() { - var vorgangWithEmptyFormId = createVorgang( - EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formId(null).build()).build()); - - var hasEnabled = callAssembler(vorgangWithEmptyFormId); - - assertThat(hasEnabled).isFalse(); - } - - private boolean callAssembler(VorgangWithEingang vorgang) { - return assembler.hasVorgangCreateBescheidDocumentEnabled(vorgang); - } - - private VorgangWithEingang createVorgang(Eingang eingang) { - return VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build(); - } - - } - - @Nested - class TestCanCreateBescheidDocumentAutomatically { - - private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldReturnTrueIfServiceConfigured() { - doReturn(true).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang); - when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true); - - var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang); - - assertThat(canCreate).isTrue(); - } - - @Test - void shouldReturnFalseIfServiceNotConfigured() { - when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false); - - var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang); - - assertThat(canCreate).isFalse(); - } - - @Test - void shouldReturnFalseIfVorgangNotConfigured() { - doReturn(false).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang); - when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true); - - var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang); - - assertThat(canCreate).isFalse(); - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java deleted file mode 100644 index 3e74aac952c10febc3d53e6322c3eec505e337af..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse; -import de.ozgcloud.bescheid.GrpcGetAllBescheidRequest; -import de.ozgcloud.bescheid.GrpcGetAllBescheidResponse; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse; - -class BescheidRemoteServiceTest { - - @Spy - @InjectMocks - private BescheidRemoteService service; - @Mock - private BescheidServiceBlockingStub bescheidServiceStub; - @Mock - private BescheidMapper bescheidMapper; - - @Nested - class TestGetBescheidDraft { - - private final GrpcGetBescheidDraftRequest request = GrpcGetBescheidDraftRequestTestFactory.create(); - private final GrpcGetBescheidDraftResponse response = GrpcGetBescheidDraftResponseTestFactory.create(); - private final Bescheid bescheidDraft = BescheidTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(request).when(service).buildGetBescheidDraftRequest(VorgangHeaderTestFactory.ID); - when(bescheidServiceStub.getBescheidDraft(request)).thenReturn(response); - } - - @Test - void shouldBuildGrpcGetBescheidRequest() { - service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - verify(service).buildGetBescheidDraftRequest(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallGrpcService() { - service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - verify(bescheidServiceStub).getBescheidDraft(request); - } - - @Test - void shouldCallMapper() { - doReturn(Optional.of(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID)).when(service).getBescheidFromResponse(response); - - service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - verify(bescheidMapper).fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnBescheid() { - when(bescheidMapper.fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID)).thenReturn( - bescheidDraft); - - var bescheidDraft = service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - assertThat(bescheidDraft).hasValue(this.bescheidDraft); - } - - @Test - void shouldReturnEmpty() { - doReturn(Optional.empty()).when(service).getBescheidFromResponse(response); - - var bescheidDraft = service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - assertThat(bescheidDraft).isEmpty(); - } - - @Test - void shouldGetBescheidFromResponse() { - service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - verify(service).getBescheidFromResponse(response); - } - } - - @Nested - class TestBuildGetBescheidDraftRequest { - - @Test - void shouldHaveVorgangId() { - var request = service.buildGetBescheidDraftRequest(VorgangHeaderTestFactory.ID); - - assertThat(request.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestGetBescheidFromResponse { - - @Test - void shouldReturnEmpty() { - var bescheid = service.getBescheidFromResponse(GrpcGetBescheidDraftResponse.getDefaultInstance()); - - assertThat(bescheid).isEmpty(); - } - - @Test - void shouldReturnBescheid() { - var bescheid = service.getBescheidFromResponse(GrpcGetBescheidDraftResponseTestFactory.create()); - - assertThat(bescheid).hasValue(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID); - } - } - - @Nested - class TestCanCreateBescheidDocument { - - private final GrpcBescheidManagerConfigRequest request = GrpcBescheidManagerConfigRequestTestFactory.create(); - private final GrpcBescheidManagerConfigResponse respone = GrpcBescheidManagerConfigResponseTestFactory.create(); - - @BeforeEach - void setUp() { - when(bescheidServiceStub.getConfig(request)).thenReturn(respone); - } - - @Test - void shouldCallRemoteService() { - service.canCreateBescheidDocument(); - - verify(bescheidServiceStub).getConfig(request); - } - - @Test - void shouldReturnTrue() { - var canCreate = service.canCreateBescheidDocument(); - - assertThat(canCreate).isTrue(); - } - - @Test - void shouldReturnFalseIfNoFeaturesAvailable() { - when(bescheidServiceStub.getConfig(request)).thenReturn(GrpcBescheidManagerConfigResponse.newBuilder().build()); - - var canCreate = service.canCreateBescheidDocument(); - - assertThat(canCreate).isFalse(); - } - - @Test - void shouldReturnFalseIfFeatureDisabled() { - var respones = GrpcBescheidManagerConfigResponseTestFactory.createBuilder() - .setFeatures(GrpcBescheidManagerFeaturesTestFactory.createBuilder() - .setCanCreateBescheidDocument(false) - .build()) - .build(); - when(bescheidServiceStub.getConfig(request)).thenReturn(respones); - - var canCreate = service.canCreateBescheidDocument(); - - assertThat(canCreate).isFalse(); - } - } - - @DisplayName("Find by vorgang id") - @Nested - class TestFindByVorgangId { - - private final GrpcGetAllBescheidRequest request = GrpcGetAllBescheidRequestTestFactory.create(); - private final GrpcGetAllBescheidResponse response = GrpcGetAllBescheidResponseTestFactory.create(); - - private final Bescheid bescheid = BescheidTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(request).when(service).buildGetAllBescheidRequest(VorgangHeaderTestFactory.ID); - when(bescheidServiceStub.getAll(any())).thenReturn(response); - - } - - @Test - void shouldBuildGetAllRequest() { - service.findByVorgangId(VorgangHeaderTestFactory.ID); - - verify(service).buildGetAllBescheidRequest(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallRemoteService() { - service.findByVorgangId(VorgangHeaderTestFactory.ID); - - verify(bescheidServiceStub).getAll(request); - } - - @Test - void shouldMapBescheid() { - service.findByVorgangId(VorgangHeaderTestFactory.ID).toList(); - - verify(bescheidMapper).fromGrpc(GrpcGetAllBescheidResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnStreamOfBescheide() { - when(bescheidMapper.fromGrpc(any(), any())).thenReturn(bescheid); - - var bescheide = service.findByVorgangId(VorgangHeaderTestFactory.ID); - - assertThat(bescheide).containsExactly(bescheid); - } - } - - @DisplayName("Build get all bescheid request") - @Nested - class TestBuildGetAllBescheidRequest { - - @Test - void shouldContainVorgangId() { - var request = service.buildGetAllBescheidRequest(VorgangHeaderTestFactory.ID); - - assertThat(request.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidSendenCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidSendenCommandControllerTest.java deleted file mode 100644 index 48cb200a7bde55fd0a0000a39b2ef9374625219a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidSendenCommandControllerTest.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static de.ozgcloud.alfa.common.command.CommandController.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.SneakyThrows; - -class BescheidSendenCommandControllerTest { - - @Spy - @InjectMocks - private BescheidCommandController controller; - - @Mock - private BescheidService bescheidService; - @Mock - private CommandService commandService; - - @Mock - private BescheidSendenCommandValidator bescheidSendenCommandValidator; - - private MockMvc mockMvc; - - @BeforeEach - void setUp() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestCreateCommand { - - private final Command command = CommandTestFactory.create(); - - @Captor - private ArgumentCaptor<CreateCommand> createCommandArgumentCaptor; - - @BeforeEach - void setUp() { - doNothing().when(controller).validate(eq(VorgangHeaderTestFactory.ID), any(CreateCommand.class)); - when(commandService.createCommand(any(CreateCommand.class), eq(BescheidTestFactory.VERSION))).thenReturn(command); - } - - @SneakyThrows - @Test - void shouldValidate() { - doRequest(); - - verify(controller).validate(eq(VorgangHeaderTestFactory.ID), any(CreateCommand.class)); - } - - @SneakyThrows - @Test - void shouldSetVorgangIdOnCreateCommand() { - doRequest(); - - verify(controller).validate(eq(VorgangHeaderTestFactory.ID), createCommandArgumentCaptor.capture()); - assertThat(createCommandArgumentCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldSetRelationIdOnCreateCommand() { - doRequest(); - - verify(controller).validate(eq(VorgangHeaderTestFactory.ID), createCommandArgumentCaptor.capture()); - assertThat(createCommandArgumentCaptor.getValue().getRelationId()).isEqualTo(BescheidTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldCallCommandService() { - doRequest(); - - verify(commandService).createCommand(any(CreateCommand.class), eq(BescheidTestFactory.VERSION)); - } - - @SneakyThrows - @Test - void shouldReturnCreated() { - var response = doRequest(); - - response.andExpect(status().isCreated()); - } - - @SneakyThrows - @Test - void shouldReturnCommand() { - doRequest() - .andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID)); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform( - post(BescheidCommandController.PATH, - VorgangHeaderTestFactory.ID, - BescheidTestFactory.ID, - BescheidTestFactory.VERSION) - .content(CommandTestFactory.buildCreateCommandContent(CommandOrder.SEND_BESCHEID)) - .contentType(MediaType.APPLICATION_JSON)); - } - - } - - @Nested - class TestValidate { - - private final CreateCommand createCommand = CommandTestFactory.createCreateCommand(); - private final Bescheid bescheid = BescheidTestFactory.create(); - - @Captor - private ArgumentCaptor<CreateCommand> commandArgumentCaptor; - - @Nested - class WhenBescheidExists { - - @BeforeEach - void setUp() { - when(bescheidService.getBescheidDraft(VorgangHeaderTestFactory.ID)).thenReturn(Optional.of(bescheid)); - doNothing().when(bescheidSendenCommandValidator).validate(any(CreateCommand.class)); - } - - @Test - void shouldGetBescheidDraft() { - controller.validate(VorgangHeaderTestFactory.ID, createCommand); - - verify(bescheidService).getBescheidDraft(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldValidate() { - controller.validate(VorgangHeaderTestFactory.ID, createCommand); - - verify(bescheidSendenCommandValidator).validate(any(CreateCommand.class)); - } - - @Test - void shouldAddBescheidToCommand() { - controller.validate(VorgangHeaderTestFactory.ID, createCommand); - - verify(bescheidSendenCommandValidator).validate(commandArgumentCaptor.capture()); - assertThat(commandArgumentCaptor.getValue()).usingRecursiveComparison().isEqualTo(createCommand.toBuilder().body(bescheid).build()); - } - } - - @Nested - class WhenBescheidNotExists { - - @Test - void shouldThrowTechnicalException() { - when(bescheidService.getBescheidDraft(VorgangHeaderTestFactory.ID)).thenReturn(Optional.empty()); - - assertThatThrownBy(() -> controller.validate(VorgangHeaderTestFactory.ID, createCommand)).isInstanceOf(TechnicalException.class); - } - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java deleted file mode 100644 index 07cb7f98e4ef1018673fb7fbb847c2082870bb28..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Comparator; -import java.util.Optional; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class BescheidServiceTest { - - @Spy - @InjectMocks - private BescheidService service; - @Mock - private BescheidRemoteService remoteService; - @Mock - private BescheidByBeschiedenAmComparator comparator; - - @Nested - class TestGetBescheidDraft { - - @Test - void shouldCallRemoteService() { - service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - verify(remoteService).getBescheidDraft(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnResultFromRemoteService() { - var remoteServiceResult = Optional.of(BescheidTestFactory.create()); - when(remoteService.getBescheidDraft(VorgangHeaderTestFactory.ID)).thenReturn(remoteServiceResult); - - var result = service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - assertThat(result).isEqualTo(remoteServiceResult); - } - } - - @Nested - class TestFindByVorgangId { - private final Stream<Bescheid> bescheidsUnsorted = Stream.of(BescheidTestFactory.create()); - private final Stream<Bescheid> bescheidsSorted = Stream.of(BescheidTestFactory.create()); - - @BeforeEach - void setUpMocks() { - when(remoteService.findByVorgangId(VorgangHeaderTestFactory.ID)).thenReturn(bescheidsUnsorted); - doReturn(bescheidsSorted).when(service).sortBescheids(bescheidsUnsorted); - } - - @Test - void shouldCallRemoteService() { - callService(); - - verify(remoteService).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldSortStream() { - callService(); - - verify(service).sortBescheids(bescheidsUnsorted); - } - - @Test - void shouldReturnSortedStream() { - var resultStream = callService(); - - assertThat(resultStream).isEqualTo(bescheidsSorted); - } - - private Stream<Bescheid> callService() { - return service.findByVorgangIdSorted(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestSortBescheids { - @Mock - private Stream<Bescheid> bescheids; - - @Mock - private Comparator<Bescheid> reversedComparator; - - @BeforeEach - void setUpMock() { - when(comparator.reversed()).thenReturn(reversedComparator); - } - - @Test - void shouldSort() { - service.sortBescheids(bescheids); - - verify(bescheids).sorted(reversedComparator); - } - - @Test - void shouldReturnSortedStream() { - Stream<Bescheid> bescheidsSorted = Stream.of(BescheidTestFactory.create()); - when(bescheids.sorted(reversedComparator)).thenReturn(bescheidsSorted); - - var result = service.sortBescheids(bescheids); - - assertThat(result).isEqualTo(bescheidsSorted); - } - } - - @Nested - class TestCanCreateBescheidDocumentAutomatically { - - @Test - void shouldCallRemoteService() { - service.canCreateBescheidDocumentAutomatically(); - - verify(remoteService).canCreateBescheidDocument(); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldRetrun(boolean canCreateBescheidDocument) { - when(remoteService.canCreateBescheidDocument()).thenReturn(canCreateBescheidDocument); - - var canCreateAutomatically = service.canCreateBescheidDocumentAutomatically(); - - assertThat(canCreateAutomatically).isEqualTo(canCreateBescheidDocument); - } - } - - @DisplayName("Exists bescheid") - @Nested - class TestExistsBescheid { - - @Test - void shouldCallRemoteService() { - service.existsBescheid(VorgangHeaderTestFactory.ID); - - verify(remoteService).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @DisplayName("on existing bescheid") - @Nested - class TestOnExistingBescheid { - - @BeforeEach - void mock() { - when(remoteService.findByVorgangId(anyString())).thenReturn(Stream.of(BescheidTestFactory.create())); - } - - @Test - void shouldReturnTrue() { - var exists = service.existsBescheid(VorgangHeaderTestFactory.ID); - - assertThat(exists).isTrue(); - } - } - - @DisplayName("on missing bescheid") - @Nested - class TestOnMissingBescheid { - - @BeforeEach - void mock() { - when(remoteService.findByVorgangId(anyString())).thenReturn(Stream.empty()); - } - - @Test - void shouldReturnFalse() { - var exists = service.existsBescheid(VorgangHeaderTestFactory.ID); - - assertThat(exists).isFalse(); - } - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java deleted file mode 100644 index 2f84362023d62e5ee86f533280ec3b81abe689eb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -public class BescheidTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final BescheidStatus STATUS = BescheidStatus.DRAFT; - public static final long VERSION = 42; - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - public static final String BESCHIEDEN_AM = "2024-05-27"; - public static final boolean BEWILLIGT = true; - public static final String BESCHEID_DOCUMENT = UUID.randomUUID().toString(); - public static final List<FileId> ATTACHMENTS = List.of(FileId.from(UUID.randomUUID().toString()), FileId.from(UUID.randomUUID().toString())); - public static final String NACHRICHT_TEXT = LoremIpsum.getInstance().getWords(10); - public static final String NACHRICHT_SUBJECT = LoremIpsum.getInstance().getWords(3); - public static final SendBy SEND_BY = SendBy.MANUAL; - public static final SentInfo SENT_INFO = SentInfoTestFactory.create(); - - public static Bescheid.BescheidBuilder createBuilder() { - return Bescheid.builder() - .id(ID) - .status(STATUS) - .version(VERSION) - .vorgangId(VORGANG_ID) - .beschiedenAm(BESCHIEDEN_AM) - .bewilligt(BEWILLIGT) - .bescheidDocument(BESCHEID_DOCUMENT) - .attachments(ATTACHMENTS) - .nachrichtText(NACHRICHT_TEXT) - .nachrichtSubject(NACHRICHT_SUBJECT) - .sendBy(SEND_BY) - .sentInfo(SENT_INFO); - } - - public static Bescheid create() { - return createBuilder().build(); - } - - public static Map<String, Object> createAsMap() { - var map = new HashMap<String, Object>(); - map.put(Bescheid.ID_FIELD, ID); - map.put(Bescheid.STATUS_FIELD, STATUS); - map.put(Bescheid.VERSION_FIELD, VERSION); - map.put(Bescheid.VORGANG_ID_FIELD, VORGANG_ID); - map.put(Bescheid.BESCHIEDEN_AM_FIELD, BESCHIEDEN_AM); - map.put(Bescheid.BEWILLIGT_FIELD, BEWILLIGT); - map.put(Bescheid.BESCHEID_DOCUMENT_FIELD, BESCHEID_DOCUMENT); - map.put(Bescheid.ATTACHMENTS_FIELD, ATTACHMENTS); - map.put(Bescheid.NACHRICHT_TEXT_FIELD, NACHRICHT_TEXT); - map.put(Bescheid.NARCHRICHT_SUBJECT_FIELD, NACHRICHT_SUBJECT); - map.put(Bescheid.SEND_BY_FIELD, SEND_BY); - return map; - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java deleted file mode 100644 index 162e1cd996bd355fee44ec30b80ce5ac11c0395a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; -import java.util.function.BooleanSupplier; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.common.EntityModelTestFactory; -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class BescheidVorgangProcessorTest { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Spy - @InjectMocks - private BescheidVorgangProcessor processor; - - @Mock - private BescheidService service; - @Mock - private CurrentUserService currentUserService; - - @Nested - class TestProcess { - - @Test - void shouldReturnTheSameModelOnNullVorgang() { - var processedModel = processor.process(EntityModelTestFactory.NULLABLE); - - assertThat(processedModel).isEqualTo(EntityModelTestFactory.NULLABLE); - } - - @Test - void shouldReturnTheSameModelWhenUserIsEinheitlicherAnsprechpartner() { - var inputModel = EntityModel.of(VorgangWithEingangTestFactory.create()); - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - - var processedModel = processor.process(inputModel); - - assertThat(processedModel).isEqualTo(inputModel); - } - - @Test - void shouldCallExistsBescheid() { - initUserProfileUrlProvider(new UserProfileUrlProvider()); - doReturn(true).when(processor).existsBescheid(anyString()); - - callProcess(); - - verify(processor).existsBescheid(VorgangHeaderTestFactory.ID); - } - - @Nested - class TestLinks { - - @BeforeEach - void init() { - initUserProfileUrlProvider(new UserProfileUrlProvider()); - } - - @Test - void shouldNotHaveLinkToDraft() { - givenRetrievingDraftIsAllowed(false); - - var model = callProcess(); - - assertThat(model.getLink(BescheidVorgangProcessor.REL_DRAFT)).isEmpty(); - } - - @Test - void shouldHaveLinkToDraft() { - givenRetrievingDraftIsAllowed(true); - - var model = callProcess(); - - assertThat(model.getLink(BescheidVorgangProcessor.REL_DRAFT)).isPresent().get().extracting(Link::getHref) - .isEqualTo(BescheidController.PATH + "?vorgangId=" + VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveLinkToCreateBescheidDraft() { - givenCreatingDraftIsAllowed(true); - - var model = callProcess(); - - assertThat(model.getLink(BescheidVorgangProcessor.REL_CREATE_DRAFT)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/relations/" + VorgangHeaderTestFactory.ID + "/" - + VorgangHeaderTestFactory.VERSION + "/commands"); - } - - @Test - void shouldNotHaveLinkToCreateBescheidDraft() { - givenCreatingDraftIsAllowed(false); - - var model = callProcess(); - - assertThat(model.getLink(BescheidVorgangProcessor.REL_CREATE_DRAFT)).isEmpty(); - } - - @DisplayName("bescheide link") - @Nested - class TestBescheideLink { - - @DisplayName("on existing bescheid") - @Nested - class TestOnExistingBescheid { - - @BeforeEach - void mock() { - doReturn(true).when(processor).existsBescheid(anyString()); - } - - @Test - void shouldExists() { - var model = callProcess(); - - assertThat(model.getLink(BescheidVorgangProcessor.REL_BESCHEIDE)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/bescheids"); - } - } - - @DisplayName("on missing bescheid") - @Nested - class TestOnMissingBescheid { - - @BeforeEach - void mock() { - doReturn(false).when(processor).existsBescheid(anyString()); - } - - @Test - void shouldNOTExists() { - var model = callProcess(); - - assertThat(model.getLink(BescheidVorgangProcessor.REL_BESCHEIDE)).isNotPresent(); - } - } - } - - private void givenRetrievingDraftIsAllowed(boolean shouldBeAdded) { - doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).isRetrievingDraftAllowed(vorgang); - } - - private void givenCreatingDraftIsAllowed(boolean shouldBeAdded) { - doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).isCreatingDraftAllowed(vorgang); - } - } - - private EntityModel<VorgangWithEingang> callProcess() { - return processor.process(EntityModel.of(vorgang)); - } - } - - @DisplayName("Exists bescheid") - @Nested - class TestExistsBescheid { - - @BeforeEach - void mock() { - when(service.existsBescheid(anyString())).thenReturn(true); - } - - @Test - void shouldCallService() { - processor.existsBescheid(VorgangHeaderTestFactory.ID); - - verify(service).existsBescheid(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnValue() { - var exists = processor.existsBescheid(VorgangHeaderTestFactory.ID); - - assertThat(exists).isTrue(); - } - } - - @Nested - class TestIsRetrievingDraftAllowed { - - @Test - void shouldReturnTrue() { - givenVorgangInBearbeitung(true); - givenDraftExists(true); - - var booleanSupplier = callMethod(); - - assertThat(booleanSupplier.getAsBoolean()).isTrue(); - } - - @Test - void shouldReturnFalseIfVorgangNotInBearbeitung() { - givenVorgangInBearbeitung(false); - - var booleanSupplier = callMethod(); - - assertThat(booleanSupplier.getAsBoolean()).isFalse(); - } - - @Test - void shouldReturnFalseIfDraftDoesNotExist() { - givenVorgangInBearbeitung(true); - givenDraftExists(false); - - var booleanSupplier = callMethod(); - - assertThat(booleanSupplier.getAsBoolean()).isFalse(); - } - - private BooleanSupplier callMethod() { - return processor.isRetrievingDraftAllowed(vorgang); - } - } - - @Nested - class TestIsCreatingDraftAllowed { - - @Test - void shouldReturnTrue() { - givenVorgangInBearbeitung(true); - givenDraftExists(false); - - var booleanSupplier = callMethod(); - - assertThat(booleanSupplier.getAsBoolean()).isTrue(); - } - - @Test - void shouldReturnFalseIfVorgangNotInBearbeitung() { - givenVorgangInBearbeitung(false); - - var booleanSupplier = callMethod(); - - assertThat(booleanSupplier.getAsBoolean()).isFalse(); - } - - @Test - void shouldReturnFalseIfDraftExists() { - givenVorgangInBearbeitung(true); - givenDraftExists(true); - - var booleanSupplier = callMethod(); - - assertThat(booleanSupplier.getAsBoolean()).isFalse(); - } - - private BooleanSupplier callMethod() { - return processor.isCreatingDraftAllowed(vorgang); - } - } - - @Nested - class TestIsVorgangInBearbeitung { - - @ParameterizedTest - @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = { "IN_BEARBEITUNG" }) - void shouldReturnFalse(Vorgang.VorgangStatus vorgangStatus) { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(vorgangStatus).build(); - - var inBearbeitung = processor.isVorgangInBearbeitung(vorgang); - - assertThat(inBearbeitung).isFalse(); - } - - @Test - void shouldReturnTrue() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(Vorgang.VorgangStatus.IN_BEARBEITUNG).build(); - - var inBearbeitung = processor.isVorgangInBearbeitung(vorgang); - - assertThat(inBearbeitung).isTrue(); - } - } - - @Nested - class TestDraftExists { - - @Test - void shouldCallBescheidService() { - processor.draftExists(vorgang); - - verify(service).getBescheidDraft(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnFalse() { - when(service.getBescheidDraft(VorgangHeaderTestFactory.ID)).thenReturn(Optional.empty()); - - var result = processor.draftExists(vorgang); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnTrue() { - when(service.getBescheidDraft(VorgangHeaderTestFactory.ID)).thenReturn(Optional.of(BescheidTestFactory.create())); - - var result = processor.draftExists(vorgang); - - assertThat(result).isTrue(); - } - } - - private void givenVorgangInBearbeitung(boolean inBearbeitung) { - doReturn(inBearbeitung).when(processor).isVorgangInBearbeitung(vorgang); - } - - private void givenDraftExists(boolean exists) { - doReturn(exists).when(processor).draftExists(vorgang); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentControllerTest.java deleted file mode 100644 index c629f5c9011e0fac350ecc6800d1affc9a4f524c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentControllerTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -class DocumentControllerTest { - - @Mock - private DocumentService documentService; - @Mock - private DocumentModelAssembler assembler; - @Spy - @InjectMocks - private DocumentController controller; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetDocument { - - private final Document document = DocumentTestFactory.create(); - - @BeforeEach - void init() { - when(documentService.getDocument(DocumentTestFactory.ID)).thenReturn(document); - } - - @Test - void shouldGetDocument() throws Exception { - doRequest(); - - verify(documentService).getDocument(DocumentTestFactory.ID); - } - - @Test - void shouldCallAssembler() throws Exception { - doRequest(); - - verify(assembler).toModel(document); - } - - @Test - void shouldReturnValue() throws Exception { - doRequest().andExpect(status().isOk()); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(DocumentController.PATH + "/{documentId}", DocumentTestFactory.ID)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentHistorieProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentHistorieProcessorTest.java deleted file mode 100644 index 41e1f2a11c72cfa85e948335a6b827b9b4a680d9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentHistorieProcessorTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; - -class DocumentHistorieProcessorTest { - - @Spy - private DocumentHistorieProcessor processor; - - @DisplayName("Process") - @Nested - class TestProcess { - - private final Command command = CommandTestFactory.create(); - private final List<Command> commands = Collections.singletonList(command); - - @BeforeEach - void mock() { - doReturn(commands).when(processor).filterIrrelevantCommands(any()); - } - - @Test - void shouldFilterIrrelevantCommands() { - processor.process(commands); - - verify(processor).filterIrrelevantCommands(commands); - } - - @Test - void shouldReturnCommands() { - var processedCommands = processor.process(commands); - - assertThat(processedCommands).containsExactly(command); - } - } - - @DisplayName("Filter irrelevant commands") - @Nested - class TestFilterIrrelevantCommands { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "CREATE_BESCHEID_DOCUMENT", "CREATE_BESCHEID_DOCUMENT_FROM_FILE" }) - void shouldFilterCommandWithOrder(CommandOrder order) { - var command = CommandTestFactory.createBuilder().order(order.toString()).build(); - - var commands = processor.filterIrrelevantCommands(Collections.singletonList(command)); - - assertThat(commands).isEmpty(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "CREATE_BESCHEID_DOCUMENT", "CREATE_BESCHEID_DOCUMENT_FROM_FILE" }) - void shouldKeepCommandWithOrder(CommandOrder order) { - var command = CommandTestFactory.createBuilder().order(order.toString()).build(); - - var commands = processor.filterIrrelevantCommands(Collections.singletonList(command)); - - assertThat(commands).containsExactly(command); - } - - @DisplayName("should filter document related create attached item command") - @Test - void shouldFilterCreateAttachedItemCommand() { - var command = CommandTestFactory.createBuilder().order(CommandOrder.CREATE_ATTACHED_ITEM.toString()) - .body(Map.of(VorgangAttachedItem.FIELD_ITEM_NAME, DocumentHistorieProcessor.DOCUMENT_ITEM_NAME)) - .build(); - - var commands = processor.filterIrrelevantCommands(Collections.singletonList(command)); - - assertThat(commands).isEmpty(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentMapperTest.java deleted file mode 100644 index 8e3b5614318eba2d75f015ad9030ad618324ea3e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentMapperTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; - -public class DocumentMapperTest { - - @Mock - private FileIdMapper fileIdMapper; - @InjectMocks - private final DocumentMapper mapper = Mappers.getMapper(DocumentMapper.class); - - @Nested - class TestFromGrpc { - - @BeforeEach - void init() { - when(fileIdMapper.toFileId(GrpcDocumentTestFactory.FILE_ID)).thenReturn(DocumentTestFactory.FILE_ID); - } - - @Test - void shouldMapId() { - var document = map(); - - assertThat(document.getId()).isEqualTo(GrpcDocumentTestFactory.ID); - } - - @Test - void shouldMapType() { - var document = map(); - - assertThat(document.getType()).isEqualTo(GrpcDocumentTestFactory.TYPE); - } - - @Test - void shouldMapFileId() { - var document = map(); - - assertThat(document.getFileId()).isEqualTo(DocumentTestFactory.FILE_ID); - } - - @Test - void shouldMapNachrichtSubject() { - var document = map(); - - assertThat(document.getNachrichtSubject()).isEqualTo(GrpcDocumentTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldMapNachrichtText() { - var document = map(); - - assertThat(document.getNachrichtText()).isEqualTo(GrpcDocumentTestFactory.NACHRICHT_TEXT); - } - - private Document map() { - return mapper.fromGrpc(GrpcDocumentTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java deleted file mode 100644 index b867db73a6ac2d3c267b6105a450325742e2c470..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static de.ozgcloud.alfa.bescheid.DocumentModelAssembler.*; -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -class DocumentModelAssemblerTest { - - @Spy - private DocumentModelAssembler assembler; - - @Nested - class TestToModel { - - private final Document document = DocumentTestFactory.create(); - - @Test - void shouldHaveSelfLink() { - var model = callToModel(); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref) - .isEqualTo(DocumentController.PATH + "/" + DocumentTestFactory.ID); - } - - @Test - void shouldHaveFileIdLink() { - var model = callToModel(); - - assertThat(model.getLink(REL_FILE)).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/binaryFiles/" + DocumentTestFactory.FILE_ID); - } - - private EntityModel<Document> callToModel() { - return assembler.toModel(document); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentRemoteServiceTest.java deleted file mode 100644 index 1a8ea418aca986cf81659abbd53057557ad3ec0a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentRemoteServiceTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceBlockingStub; -import de.ozgcloud.document.GrpcGetDocumentRequest; - -class DocumentRemoteServiceTest { - - @Mock - private DocumentServiceBlockingStub documentServiceStub; - @Mock - private DocumentMapper documentMapper; - @Spy - @InjectMocks - private DocumentRemoteService service; - - @Nested - class TestGetDocument { - - private static final ArgumentMatcher<GrpcGetDocumentRequest> REQUEST_MATCHER = request -> request.getId().equals(DocumentTestFactory.ID); - - private final Document document = DocumentTestFactory.create(); - - @BeforeEach - void init() { - when(documentServiceStub.getDocument(argThat(REQUEST_MATCHER))).thenReturn(GrpcGetDocumentResponseTestFactory.create()); - when(documentMapper.fromGrpc(GrpcGetDocumentResponseTestFactory.GRPC_DOCUMENT)).thenReturn(document); - } - - @Test - void shouldCallGrpcService() { - callService(); - - verify(documentServiceStub).getDocument(argThat(REQUEST_MATCHER)); - } - - @Test - void shouldCallMapper() { - callService(); - - verify(documentMapper).fromGrpc(GrpcGetDocumentResponseTestFactory.GRPC_DOCUMENT); - } - - @Test - void shouldReturnDocument() { - var result = callService(); - - assertThat(result).isEqualTo(document); - } - - private Document callService() { - return service.getDocument(DocumentTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentServiceTest.java deleted file mode 100644 index 9faabc9fd95994de15ef7b2ea60742be0db17564..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentServiceTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -class DocumentServiceTest { - - @Mock - private DocumentRemoteService remoteService; - @Spy - @InjectMocks - private DocumentService service; - - @Nested - class TestGetDocument { - - private final Document document = DocumentTestFactory.create(); - - @BeforeEach - void init() { - when(remoteService.getDocument(DocumentTestFactory.ID)).thenReturn(document); - } - - @Test - void shouldCallRemoteService() { - service.getDocument(DocumentTestFactory.ID); - - verify(remoteService).getDocument(DocumentTestFactory.ID); - } - - @Test - void shouldReturnResultFromRemoteService() { - var result = service.getDocument(DocumentTestFactory.ID); - - assertThat(result).isEqualTo(document); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentTestFactory.java deleted file mode 100644 index faa98ff0b58d4330f407688c56bb919c5d4b919e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentTestFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileId; - -public class DocumentTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String TYPE = LoremIpsum.getInstance().getWords(1); - public static final FileId FILE_ID = BinaryFileTestFactory.FILE_ID; - public static final String NACHRICHT_SUBJECT = LoremIpsum.getInstance().getWords(5); - public static final String NACHRICHT_TEXT = LoremIpsum.getInstance().getWords(20); - - public static Document.DocumentBuilder createBuilder() { - return Document.builder() - .id(ID) - .type(TYPE) - .fileId(FILE_ID) - .nachrichtSubject(NACHRICHT_SUBJECT) - .nachrichtText(NACHRICHT_TEXT); - } - - public static Document create() { - return createBuilder().build(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java deleted file mode 100644 index c2ddf5fe79fb1427bdb2151306c4cb1768ee59d9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest; - -public class GrpcBescheidManagerConfigRequestTestFactory { - - public static GrpcBescheidManagerConfigRequest create() { - return createBuilder().build(); - } - - public static GrpcBescheidManagerConfigRequest.Builder createBuilder() { - return GrpcBescheidManagerConfigRequest.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java deleted file mode 100644 index d90b382a10cbac1872efab99746096d56339733b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse; - -public class GrpcBescheidManagerConfigResponseTestFactory { - - public static GrpcBescheidManagerConfigResponse create() { - return createBuilder().build(); - } - - public static GrpcBescheidManagerConfigResponse.Builder createBuilder() { - return GrpcBescheidManagerConfigResponse.newBuilder().setFeatures(GrpcBescheidManagerFeaturesTestFactory.create()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java deleted file mode 100644 index 1150827c0ea0ca58770a59fd7994e7a115b601ff..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.bescheid.GrpcBescheidManagerFeatures; - -public class GrpcBescheidManagerFeaturesTestFactory { - - public static final boolean CAN_CREATE_BESCHEID = true; - - public static GrpcBescheidManagerFeatures create() { - return createBuilder().build(); - } - - public static GrpcBescheidManagerFeatures.Builder createBuilder() { - return GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(CAN_CREATE_BESCHEID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java deleted file mode 100644 index 7c05a12f621586e93b7a01b8966d356765d7c9a3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.util.List; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcSentInfo; -import de.ozgcloud.common.datatype.StringBasedValue; - -public class GrpcBescheidTestFactory { - - public static final String ID = BescheidTestFactory.ID; - public static final boolean BEWILLIGT = BescheidTestFactory.BEWILLIGT; - public static final String BESCHIEDEN_AM = BescheidTestFactory.BESCHIEDEN_AM; - public static final String BESCHEID_DOCUMENT = BescheidTestFactory.BESCHEID_DOCUMENT; - public static final List<String> ATTACHMENTS = BescheidTestFactory.ATTACHMENTS.stream().map(StringBasedValue::toString).toList(); - public static final String NACHRICHT_TEXT = BescheidTestFactory.NACHRICHT_TEXT; - public static final String NACHRICHT_SUBJECT = BescheidTestFactory.NACHRICHT_SUBJECT; - public static final GrpcSentInfo SENT_INFO = GrpcSentInfoTestFactory.create(); - - public static GrpcBescheid create() { - return createBuilder().build(); - } - - public static GrpcBescheid.Builder createBuilder() { - return GrpcBescheid.newBuilder() - .setId(ID) - .setStatus(BescheidTestFactory.STATUS.toString()) - .setBewilligt(BEWILLIGT) - .setBeschiedenAm(BESCHIEDEN_AM) - .setBescheidDocument(BESCHEID_DOCUMENT) - .addAllAttachments(ATTACHMENTS) - .setNachrichtText(NACHRICHT_TEXT) - .setNachrichtSubject(NACHRICHT_SUBJECT) - .setSendBy(BescheidTestFactory.SEND_BY.toString()) - .setSentInfo(SENT_INFO); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcDocumentTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcDocumentTestFactory.java deleted file mode 100644 index 4719630617c5d26e917bd5b8ea4538ba8ed2d3ef..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcDocumentTestFactory.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.document.GrpcDocument; - -public class GrpcDocumentTestFactory { - - public static final String ID = DocumentTestFactory.ID; - public static final String TYPE = DocumentTestFactory.TYPE; - public static final String FILE_ID = DocumentTestFactory.FILE_ID.toString(); - public static final String NACHRICHT_SUBJECT = DocumentTestFactory.NACHRICHT_SUBJECT; - public static final String NACHRICHT_TEXT = DocumentTestFactory.NACHRICHT_TEXT; - - public static GrpcDocument create() { - return createBuilder().build(); - } - - public static GrpcDocument.Builder createBuilder() { - return GrpcDocument.newBuilder() - .setId(ID) - .setType(TYPE) - .setFileId(FILE_ID) - .setNachrichtSubject(NACHRICHT_SUBJECT) - .setNachrichtText(NACHRICHT_TEXT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java deleted file mode 100644 index ced557a1071248f836947c199f470287913cd02f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.bescheid.GrpcGetAllBescheidRequest; - -public class GrpcGetAllBescheidRequestTestFactory { - - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - public static GrpcGetAllBescheidRequest create() { - return createBuilder().build(); - } - - public static GrpcGetAllBescheidRequest.Builder createBuilder() { - return GrpcGetAllBescheidRequest.newBuilder().setVorgangId(VORGANG_ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java deleted file mode 100644 index 9beae7eedc1980f75f54b84b6b84a5b1673816f8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcGetAllBescheidResponse; - -public class GrpcGetAllBescheidResponseTestFactory { - - public static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create(); - - public static GrpcGetAllBescheidResponse create() { - return createBuilder().build(); - } - - public static GrpcGetAllBescheidResponse.Builder createBuilder() { - return GrpcGetAllBescheidResponse.newBuilder().addBescheid(GRPC_BESCHEID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java deleted file mode 100644 index 55b44b9f40c190644ace896510645a32c565d067..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; - -public class GrpcGetBescheidDraftRequestTestFactory { - - public static GrpcGetBescheidDraftRequest create() { - return createBuilder().build(); - } - - public static GrpcGetBescheidDraftRequest.Builder createBuilder() { - return GrpcGetBescheidDraftRequest.newBuilder() - .setVorgangId(VorgangHeaderTestFactory.ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java deleted file mode 100644 index 491f4532579b798fe419c518148eabbe0eaebdbd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse; - -public class GrpcGetBescheidDraftResponseTestFactory { - - public static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create(); - - public static GrpcGetBescheidDraftResponse create() { - return createBuilder().build(); - } - - public static GrpcGetBescheidDraftResponse.Builder createBuilder() { - return GrpcGetBescheidDraftResponse.newBuilder() - .setBescheid(GRPC_BESCHEID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetDocumentRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetDocumentRequestTestFactory.java deleted file mode 100644 index 213f3e655e40f80c400840c7fe6dd223e67cb0c1..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetDocumentRequestTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.document.GrpcGetDocumentRequest; - -public class GrpcGetDocumentRequestTestFactory { - - public static final String ID = DocumentTestFactory.ID; - - public static GrpcGetDocumentRequest create() { - return createBuilder().build(); - } - - public static GrpcGetDocumentRequest.Builder createBuilder() { - return GrpcGetDocumentRequest.newBuilder().setId(ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetDocumentResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetDocumentResponseTestFactory.java deleted file mode 100644 index fb1c6f66adb1c80cb5c964a778eff2deb5c1eda2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetDocumentResponseTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import de.ozgcloud.document.GrpcDocument; -import de.ozgcloud.document.GrpcGetDocumentResponse; - -public class GrpcGetDocumentResponseTestFactory { - - public static final GrpcDocument GRPC_DOCUMENT = GrpcDocumentTestFactory.create(); - - public static GrpcGetDocumentResponse create() { - return createBuilder().build(); - } - - public static GrpcGetDocumentResponse.Builder createBuilder() { - return GrpcGetDocumentResponse.newBuilder().setDocument(GRPC_DOCUMENT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java deleted file mode 100644 index 39f6fa51231bde4eff18d9becc2dc6fe1f9b34fa..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.user.GrpcUserTestFactory; -import de.ozgcloud.bescheid.GrpcSentInfo; - -public class GrpcSentInfoTestFactory { - - public static final String SENT_AT = ZonedDateTime.now().toString(); - public static final String SENT_BY = GrpcUserTestFactory.ID; - - public static GrpcSentInfo create() { - return createBuilder().build(); - } - - public static GrpcSentInfo.Builder createBuilder() { - return GrpcSentInfo.newBuilder() - .setSentAt(SENT_AT) - .setSentBy(SENT_BY); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/SentInfoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/SentInfoTestFactory.java deleted file mode 100644 index 7ec11090bba682a85d73876e3d0d0f2ef55e0475..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/SentInfoTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.bescheid; - -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class SentInfoTestFactory { - - public static final ZonedDateTime SENT_AT = ZonedDateTime.now(); - public static final UserId SENT_BY = UserProfileTestFactory.ID; - - public static SentInfo create() { - return createBuilder().build(); - } - - public static SentInfo.SentInfoBuilder createBuilder() { - return SentInfo.builder() - .sentAt(SENT_AT) - .sentBy(SENT_BY); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/AnschriftTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/AnschriftTestFactory.java deleted file mode 100644 index 9a5f3726dd9fd44456200d4d059fe3cf5db7f95d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/AnschriftTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.collaboration.Anschrift.AnschriftBuilder; - -public class AnschriftTestFactory { - public static final String PLZ = LoremIpsum.getInstance().getZipCode(); - public static final String ORT = LoremIpsum.getInstance().getCity(); - public static final String STRASSE = LoremIpsum.getInstance().getWords(2); - public static final String HAUSNUMMER = String.valueOf((int) (Math.random() * 1000)); - - public static Anschrift create() { - return createBuilder().build(); - } - - public static AnschriftBuilder createBuilder() { - return Anschrift.builder() - .strasse(STRASSE) - .ort(ORT) - .hausnummer(HAUSNUMMER) - .plz(PLZ); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationAssertions.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationAssertions.java deleted file mode 100644 index b0791216e900caeda441f822e6389579a8f91122..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationAssertions.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.result.JsonPathResultMatchers; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.web.util.UriComponentsBuilder; - -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -class CollaborationAssertions { - - private final boolean collectionModel; - - void assertHasFields(ResultActions response) throws Exception { - response.andExpect(jsonPath("id").doesNotExist()) - .andExpect(jsonPath("vorgangId").doesNotExist()) - .andExpect(jsonPath("collaborationVorgangId").doesNotExist()) - .andExpect(jsonPath("titel").value(OrganisationsEinheitCollaborationTestFactory.TITEL)) - .andExpect(jsonPath("beschreibung").value(OrganisationsEinheitCollaborationTestFactory.BESCHREIBUNG)) - .andExpect(jsonPath("collaborationLevel").value(OrganisationsEinheitCollaborationTestFactory.COLLABORATION_LEVEL)); - } - - void assertHasZustaendigeStelleLink(ResultActions response, String controllerPath, String zustaendigeStelle) throws Exception { - var expectedLink = UriComponentsBuilder - .fromUriString("http://localhost") - .path(controllerPath) - .pathSegment(zustaendigeStelle) - .build(); - - response.andExpect(jsonPath("zustaendigeStelle").value(expectedLink.toString())); - } - - private JsonPathResultMatchers jsonPath(String expression, Object... args) { - return MockMvcResultMatchers.jsonPath(jsonPathPrefix() + expression, args); - } - - private String jsonPathPrefix() { - var prefix = "$."; - if (collectionModel) { - prefix += "content[0]."; - } - return prefix; - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationByVorgangControllerTest.java deleted file mode 100644 index c432f4b2aeae8b69b02074b5803285925a7ed650..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationByVorgangControllerTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.Collections; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import lombok.SneakyThrows; - -class CollaborationByVorgangControllerTest { - - @InjectMocks - private CollaborationByVorgangController controller; - - @Mock - private CollaborationService service; - - @Mock - private CollaborationModelAssembler assembler; - - private MockMvc mockMvc; - - private static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetAllByVorgangId { - - private final Collaboration collaboration = OrganisationsEinheitCollaborationTestFactory.create(); - - @Test - void shouldCallCollaborationService() { - performRequest(); - - verify(service).getCollaborations(VORGANG_ID); - } - - @Nested - class TestOnExistingCollaboration { - - private final CollaborationAssertions collaborationAssertions = new CollaborationAssertions(true); - private final Stream<Collaboration> collaborations = Stream.of(collaboration); - - @BeforeEach - void mock() { - when(service.getCollaborations(VORGANG_ID)).thenReturn(collaborations); - when(assembler.toCollectionModel(collaborations, VORGANG_ID)) - .thenReturn(CollectionModel.of(Collections.singletonList(EntityModel.of(collaboration)))); - } - - @Test - void shouldCallAssembler() { - performRequest(); - - verify(assembler).toCollectionModel(collaborations, VORGANG_ID); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - var response = performRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldHaveContentWithFields() { - var response = performRequest(); - - collaborationAssertions.assertHasFields(response); - } - - @SneakyThrows - @Test - void shouldHaveZustaendigeStelleLink() { - var response = performRequest(); - - collaborationAssertions.assertHasZustaendigeStelleLink(response, OrganisationsEinheitController.PATH, - OrganisationsEinheitCollaborationTestFactory.ZUSTAENDIGE_STELLE); - } - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform( - get(CollaborationByVorgangController.PATH + "/" + VORGANG_ID + "/collaborations")); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java deleted file mode 100644 index 46cacf0c79daf497c83be3664d523884cf56a646..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationControllerTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import lombok.SneakyThrows; - -class CollaborationControllerTest { - - @InjectMocks - private CollaborationController controller; - - @Mock - private CollaborationService service; - - @Mock - private CollaborationModelAssembler assembler; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetById { - - private final CollaborationAssertions collaborationAssertions = new CollaborationAssertions(false); - - @Nested - class OnOrganisationsEinheitCollaboration { - - public static final String COLLABORATION_ID = OrganisationsEinheitCollaborationTestFactory.ID; - private final Collaboration collaboration = OrganisationsEinheitCollaborationTestFactory.create(); - - @BeforeEach - void init() { - when(service.getById(OrganisationsEinheitCollaborationTestFactory.ID)).thenReturn(collaboration); - when(assembler.toModel(collaboration)).thenReturn(EntityModel.of(collaboration)); - } - - @Test - void shouldCallCollaborationService() { - performRequest(); - - verify(service).getById(COLLABORATION_ID); - } - - @Test - void shouldCreateModel() { - performRequest(); - - verify(assembler).toModel(collaboration); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - var response = performRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldHaveContentWithFields() { - var response = performRequest(); - - collaborationAssertions.assertHasFields(response); - } - - @SneakyThrows - @Test - void shouldHaveZustaendigeStelleLink() { - var response = performRequest(); - - collaborationAssertions.assertHasZustaendigeStelleLink(response, OrganisationsEinheitController.PATH, - OrganisationsEinheitCollaborationTestFactory.ZUSTAENDIGE_STELLE); - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform(get(CollaborationController.PATH + "/" + COLLABORATION_ID)); - } - } - - @Nested - class OnFachstelleCollaboration { - - public static final String COLLABORATION_ID = FachstelleCollaborationTestFactory.ID; - private final Collaboration collaboration = FachstelleCollaborationTestFactory.create(); - - @BeforeEach - void init() { - when(service.getById(FachstelleCollaborationTestFactory.ID)).thenReturn(collaboration); - when(assembler.toModel(collaboration)).thenReturn(EntityModel.of(collaboration)); - } - - @SneakyThrows - @Test - void shouldHaveContentWithLink() { - var response = performRequest(); - - collaborationAssertions.assertHasZustaendigeStelleLink(response, FachstelleController.PATH, - FachstelleCollaborationTestFactory.ZUSTAENDIGE_STELLE); - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform(get(CollaborationController.PATH + "/" + COLLABORATION_ID)); - } - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationMapperTest.java deleted file mode 100644 index d279f7ad8f9c0b2b0ed708dd80eeea2cb44fc6bf..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationMapperTest.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.Spy; - -import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; - -class CollaborationMapperTest { - - @Spy - private CollaborationMapper mapper = Mappers.getMapper(CollaborationMapper.class); - - @Nested - class TestFromCollaborationRequest { - - @Nested - class OnOrganisationsEinheitRequest { - - public final GrpcCollaborationRequest request = GrpcFindRequestsResponseTestFactory.COLLABORATION_REQUEST; - public final OrganisationsEinheitCollaboration collaboration = OrganisationsEinheitCollaborationTestFactory.create(); - - @BeforeEach - void init() { - doReturn(false).when(mapper).isFachstelle(request); - doReturn(collaboration).when(mapper).fromOrganisationsEinheitRequest(request); - } - - @Test - void shouldCheckForFachstelleRequest() { - mapper.fromCollaborationRequest(request); - - verify(mapper).isFachstelle(request); - } - - @Test - void shouldMapToOrganisationsEinheitCollaboration() { - mapper.fromCollaborationRequest(request); - - verify(mapper).fromOrganisationsEinheitRequest(request); - } - - @Test - void shouldReturnOrganisationsEinheitCollaboration() { - var mapped = mapper.fromCollaborationRequest(request); - - assertThat(mapped).isEqualTo(collaboration); - } - } - - @Nested - class OnFachstelleRequest { - - public final GrpcCollaborationRequest request = GrpcFindRequestsResponseTestFactory.COLLABORATION_REQUEST; - public final FachstelleCollaboration collaboration = FachstelleCollaborationTestFactory.create(); - - @BeforeEach - void init() { - doReturn(true).when(mapper).isFachstelle(request); - doReturn(collaboration).when(mapper).fromFachstelleRequest(request); - } - - @Test - void shouldCheckForFachstelleRequest() { - mapper.fromCollaborationRequest(request); - - verify(mapper).isFachstelle(request); - } - - @Test - void shouldMapToFachstelleCollaboration() { - mapper.fromCollaborationRequest(request); - - verify(mapper).fromFachstelleRequest(request); - } - - @Test - void shouldReturnFachstelleCollaboration() { - var mapped = mapper.fromCollaborationRequest(request); - - assertThat(mapped).isEqualTo(collaboration); - } - } - } - - @Nested - class TestIsFachstelle { - - @Test - void shouldReturnTrue() { - var fachstelle = mapper.isFachstelle(GrpcCollaborationRequestForFachstelleTestFactory.create()); - - assertThat(fachstelle).isTrue(); - } - - @Test - void shouldReturnFalse() { - var fachstelle = mapper.isFachstelle(GrpcCollaborationRequestForOrganisationsEinheitTestFactory.create()); - - assertThat(fachstelle).isFalse(); - } - } - - @Nested - class TestFromOrganisationsEinheitRequest { - - @Test - void shouldMap() { - var collaboration = mapper.fromOrganisationsEinheitRequest(GrpcCollaborationRequestForOrganisationsEinheitTestFactory.create()); - - assertThat(collaboration).usingRecursiveComparison().isEqualTo(OrganisationsEinheitCollaborationTestFactory.create()); - } - } - - @Nested - class TestFromFachstelleRequest { - - @Test - void shouldMap() { - var collaboration = mapper.fromFachstelleRequest(GrpcCollaborationRequestForFachstelleTestFactory.create()); - - assertThat(collaboration).usingRecursiveComparison().isEqualTo(FachstelleCollaborationTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java deleted file mode 100644 index 3f4db275292b754887a4287662e537e5fba55284..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.UriTemplate; - -import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class CollaborationModelAssemblerTest { - - @Spy - @InjectMocks - private CollaborationModelAssembler assembler; - - @Mock - private VorgangController vorgangController; - - @Nested - class TestToModel { - - private static final String REL_ZUSTAENDIGE_STELLE = "zustaendigeStelle"; - - @Nested - class OnOrganisationsEinheitCollaboration { - - private final OrganisationsEinheitCollaboration collaboration = OrganisationsEinheitCollaborationTestFactory.create(); - - @Test - void shouldHaveContent() { - var entityModel = callAssembler(); - - assertThat(entityModel.getContent()).isEqualTo(collaboration); - } - - @Test - void shouldHaveLinkToOrganisationsEinheit() { - var entityModel = callAssembler(); - - assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref) - .isEqualTo(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitTestFactory.ID); - } - - private EntityModel<Collaboration> callAssembler() { - return assembler.toModel(collaboration); - } - } - - @Nested - class OnFachstelleCollaboration { - - private final FachstelleCollaboration collaboration = FachstelleCollaborationTestFactory.create(); - - @Test - void shouldHaveContent() { - var entityModel = callAssembler(); - - assertThat(entityModel.getContent()).isEqualTo(collaboration); - } - - @Test - void shouldHaveLinkToFachstelle() { - var entityModel = callAssembler(); - - assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref) - .isEqualTo(FachstelleController.PATH + "/" + FachstelleTestFactory.ID); - } - - private EntityModel<Collaboration> callAssembler() { - return assembler.toModel(collaboration); - } - } - } - - @Nested - class TestToCollectionModel { - - private final Collaboration collaboration = FachstelleCollaborationTestFactory.create(); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void mockVorgangController() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - } - - @Nested - class OnNonEmptyCollaborationList { - - @Test - void shouldGetVorgang() { - callAssembler(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallToModel() { - callAssembler(); - - verify(assembler).toModel(collaboration); - } - - @Test - void shouldHaveEntityModel() { - var entityModel = ModelBuilder.fromEntity(collaboration).buildModel(); - doReturn(entityModel).when(assembler).toModel(collaboration); - - var collectionModel = callAssembler(); - - assertThat(collectionModel.getContent()).containsExactly(entityModel); - } - - @Test - void shouldHaveSelfLink() { - var collectionModel = callAssembler(); - - assertThat(collectionModel.getLink(IanaLinkRelations.SELF_VALUE)).get().extracting(Link::getHref) - .isEqualTo(CollaborationByVorgangController.PATH + "/" + VorgangHeaderTestFactory.ID + "/collaborations"); - } - - @Test - void shouldNotHaveCreateCollaborationRequestLink() { - var collectionModel = callAssembler(); - - assertThat(collectionModel.getLink(CollaborationModelAssembler.REL_CREATE_COLLABORATION_REQUEST)).isEmpty(); - } - - private CollectionModel<EntityModel<Collaboration>> callAssembler() { - return assembler.toCollectionModel(Stream.of(collaboration), VorgangHeaderTestFactory.ID); - } - } - - @Nested - class OnEmptyCollaborationList { - - @Test - void shouldGetVorgang() { - callAssembler(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveEmptyContent() { - var collectionModel = callAssembler(); - - assertThat(collectionModel.getContent()).isEmpty(); - } - - @Test - void shouldHaveSelfLink() { - var collectionModel = callAssembler(); - - assertThat(collectionModel.getLink(IanaLinkRelations.SELF_VALUE)).get().extracting(Link::getHref) - .isEqualTo(CollaborationByVorgangController.PATH + "/" + VorgangHeaderTestFactory.ID + "/collaborations"); - } - - @Nested - class OnVorgangIsEditable { - - @Mock - private Link createCollaborationRequestLink; - - @BeforeEach - void mock() { - when(vorgangController.isEditable(vorgang)).thenReturn(true); - doReturn(createCollaborationRequestLink).when(assembler).buildCreateCollaborationRequestLink(vorgang); - } - - @Test - void shouldHaveCreateCollaborationRequestLink() { - var collectionModel = callAssembler(); - - assertThat(collectionModel.getLinks()).contains(createCollaborationRequestLink); - } - } - - @Nested - class OnVorgangIsNotEditable { - - @BeforeEach - void mock() { - when(vorgangController.isEditable(vorgang)).thenReturn(false); - } - - @Test - void shouldNotHaveCreateCollaborationRequestLink() { - var collectionModel = callAssembler(); - - assertThat(collectionModel.getLink(CollaborationModelAssembler.REL_CREATE_COLLABORATION_REQUEST)).isEmpty(); - } - } - - private CollectionModel<EntityModel<Collaboration>> callAssembler() { - return assembler.toCollectionModel(Stream.empty(), VorgangHeaderTestFactory.ID); - } - } - } - - @Nested - class TestBuildCreateCollaborationRequestLink { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldHaveHrefToCreateCommand() { - var expectedHref = UriTemplate.of(CommandByRelationController.COMMAND_BY_RELATION_PATH) - .expand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString(); - - var link = callAssembler(); - - assertThat(link).extracting(Link::getHref).isEqualTo(expectedHref); - } - - @Test - void shouldHaveCreateCollaborationRequestRelation() { - var link = callAssembler(); - - assertThat(link).extracting(Link::getRel).isEqualTo(CollaborationModelAssembler.REL_CREATE_COLLABORATION_REQUEST); - } - - private Link callAssembler() { - return assembler.buildCreateCollaborationRequestLink(vorgang); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteServiceTest.java deleted file mode 100644 index db6e95eb2ed3aab8ee5abf335c5a3dfc3a7efd64..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationRemoteServiceTest.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.collaboration.request.CollaborationRequestServiceGrpc.CollaborationRequestServiceBlockingStub; -import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; -import de.ozgcloud.collaboration.request.GrpcGetRequestRequest; - -class CollaborationRemoteServiceTest { - - @Spy - @InjectMocks - private CollaborationRemoteService service; - @Mock - private CollaborationRequestServiceBlockingStub stub; - @Mock - private CollaborationMapper mapper; - - @Nested - class TestGetById { - - public static final String COLLABORATION_ID = GrpcGetRequestRequestTestFactory.COLLABORATION_ID; - - private final GrpcGetRequestRequest request = GrpcGetRequestRequestTestFactory.create(); - private final Collaboration collaboration = OrganisationsEinheitCollaborationTestFactory.create(); - - @BeforeEach - void init() { - when(stub.getRequest(request)).thenReturn(GrpcGetRequestResponseTestFactory.create()); - when(mapper.fromCollaborationRequest(GrpcGetRequestResponseTestFactory.COLLABORATION_REQUEST)).thenReturn(collaboration); - } - - @Test - void shouldBuildGetRequest() { - service.getById(COLLABORATION_ID); - - verify(service).buildGetRequest(COLLABORATION_ID); - } - - @Test - void shouldGetRequest() { - service.getById(COLLABORATION_ID); - - verify(stub).getRequest(request); - } - - @Test - void shouldMapFromCollaborationRequest() { - service.getById(COLLABORATION_ID); - - verify(mapper).fromCollaborationRequest(GrpcGetRequestResponseTestFactory.COLLABORATION_REQUEST); - } - - @Test - void shouldReturnCollaboration() { - var collaborationById = service.getById(COLLABORATION_ID); - - assertThat(collaborationById).isEqualTo(collaboration); - } - } - - @Nested - class TestGetCollaborations { - - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - private final GrpcFindRequestsRequest searchRequest = GrpcFindRequestsRequestTestFactory.create(); - private final Collaboration collaboration = OrganisationsEinheitCollaborationTestFactory.create(); - - @BeforeEach - void init() { - doReturn(searchRequest).when(service).buildSearchRequest(VORGANG_ID); - when(stub.findRequests(searchRequest)).thenReturn(GrpcFindRequestsResponseTestFactory.create()); - when(mapper.fromCollaborationRequest(GrpcFindRequestsResponseTestFactory.COLLABORATION_REQUEST)).thenReturn(collaboration); - } - - @Test - void shouldBuildSearchRequest() { - service.getCollaborations(VORGANG_ID).toList(); - - verify(service).buildSearchRequest(VORGANG_ID); - } - - @Test - void shouldFindRequests() { - service.getCollaborations(VORGANG_ID).toList(); - - verify(stub).findRequests(searchRequest); - } - - @Test - void shouldMapFromCollaborationRequest() { - service.getCollaborations(VORGANG_ID).toList(); - - verify(mapper).fromCollaborationRequest(GrpcFindRequestsResponseTestFactory.COLLABORATION_REQUEST); - } - - - @Test - void shouldReturnCollaborations() { - var collaborations = service.getCollaborations(VORGANG_ID).toList(); - - assertThat(collaborations).containsExactly(collaboration); - } - } - - @Nested - class TestBuildGetRequest { - - @Test - void shouldSetCollaborationId() { - var request = service.buildGetRequest(GrpcGetRequestRequestTestFactory.COLLABORATION_ID); - - assertThat(request.getId()).isEqualTo(GrpcGetRequestRequestTestFactory.COLLABORATION_ID); - } - } - - @Nested - class TestBuildSearchRequest { - - @Test - void shouldSetVorgangId() { - var request = service.buildSearchRequest(GrpcFindRequestsRequestTestFactory.VORGANG_ID); - - assertThat(request).usingRecursiveComparison().isEqualTo(GrpcFindRequestsRequestTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationServiceTest.java deleted file mode 100644 index 90addf09f050c5b09d08757084f116f7aadde152..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationServiceTest.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class CollaborationServiceTest { - - @InjectMocks - private CollaborationService service; - - @Mock - private CollaborationRemoteService remoteService; - - @Nested - class TestGetById { - - public static final String COLLABORATION_ID = FachstelleCollaborationTestFactory.ID; - - @Test - void shouldCallRemoteService() { - service.getById(COLLABORATION_ID); - - verify(remoteService).getById(COLLABORATION_ID); - } - - @Test - void shouldReturnCollaboration() { - var expected = FachstelleCollaborationTestFactory.create(); - when(remoteService.getById(COLLABORATION_ID)).thenReturn(expected); - - var collaboration = service.getById(COLLABORATION_ID); - - assertThat(collaboration).isEqualTo(expected); - } - } - - @Nested - class TestGetCollaborations { - - private static final String VORGANG_ID = UUID.randomUUID().toString(); - - @Test - void shouldCallRemoteService() { - callService(); - - verify(remoteService).getCollaborations(VORGANG_ID); - } - - @Test - void shouldReturnCollaboration() { - var collaboration = FachstelleCollaborationTestFactory.create(); - when(remoteService.getCollaborations(VORGANG_ID)).thenReturn(Stream.of(collaboration)); - - var returnedCollaboration = callService(); - - assertThat(returnedCollaboration).contains(collaboration); - } - - private Stream<Collaboration> callService() { - return service.getCollaborations(VORGANG_ID); - } - } - - @Nested - class TestHasCollaboration { - - private final String id = UUID.randomUUID().toString(); - - @Test - void shouldCallRemoteService() { - callService(); - - verify(remoteService).getCollaborations(id); - } - - @Test - void shouldReturnTrue() { - var collaboration = FachstelleCollaborationTestFactory.create(); - when(remoteService.getCollaborations(id)).thenReturn(Stream.of(collaboration)); - - var hasCollaboration = callService(); - - assertThat(hasCollaboration).isTrue(); - } - - @Test - void shouldReturnFalse() { - when(remoteService.getCollaborations(id)).thenReturn(Stream.empty()); - - var hasCollaboration = callService(); - - assertThat(hasCollaboration).isFalse(); - } - - private boolean callService() { - return service.hasCollaboration(id); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorITCase.java deleted file mode 100644 index 16aabccae584f25bdcea320868007372298e9196..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorITCase.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.ApplicationContext; - -class CollaborationVorgangProcessorITCase { - - @SpringBootTest(properties = {"ozgcloud.feature.collaboration-enabled=true"}) - @Nested - class OnFeatureEnabled { - - @Test - void shouldExistInApplicationContext(ApplicationContext context) { - assertThat(context.getBean(CollaborationVorgangProcessor.class)).isNotNull(); - } - } - - @SpringBootTest - @Nested - class OnFeatureDisabled { - - @Test - void shouldNotExistInApplicationContext(ApplicationContext context) { - assertThatThrownBy(() -> context.getBean(CollaborationVorgangProcessor.class)).isInstanceOf(NoSuchBeanDefinitionException.class); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java deleted file mode 100644 index 4a64401a176409235eaf75a26a7cc089575f1ddf..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.web.util.UriComponentsBuilder; - -import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; -import de.ozgcloud.alfa.common.EntityModelTestFactory; -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class CollaborationVorgangProcessorTest { - - @Spy - @InjectMocks - private CollaborationVorgangProcessor processor; - - @Mock - private CollaborationService collaborationService; - - @Mock - private CurrentUserService currentUserService; - - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @Nested - class TestProcess { - - @Nested - class OnNullVorgang { - - @Test - void shouldNotAddLinksIfVorgangIsNull() { - var model = processor.process(EntityModelTestFactory.NULLABLE); - - assertThat(model.hasLinks()).isFalse(); - } - } - - @Nested - class OnNotVerwaltungUserRole { - - @BeforeEach - void mockUserService() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - } - - @Test - void shouldNotAddLinks() { - var model = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())); - - assertThat(model.hasLinks()).isFalse(); - } - - } - - @Nested - class OnNonNullVorgangAndOnVerwaltungUserRole { - - @BeforeEach - void prepareBuilder() { - initUserProfileUrlProvider(urlProvider); - } - - @BeforeEach - void mockUserService() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - } - - @Nested - class OnCollaborationPresent { - - @BeforeEach - void setUpMock() { - when(collaborationService.hasCollaboration(VorgangHeaderTestFactory.ID)).thenReturn(true); - } - - @Test - void shouldHaveTwoLinks() { - var model = callProcessor(); - - assertThat(model.getLinks()).hasSize(2); - } - - @Test - void shouldNotAddSearchOrganisationsEinheitLink() { - var model = callProcessor(); - - assertThat(model.getLink(CollaborationVorgangProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)).isEmpty(); - } - - @Test - void shouldAddCollaborationsLink() { - var model = callProcessor(); - - assertThat(model.getLink(CollaborationVorgangProcessor.REL_COLLABORATIONS)).get() - .extracting(Link::getHref) - .isEqualTo(CollaborationByVorgangController.PATH + "/" + VorgangHeaderTestFactory.ID + "/collaborations"); - } - } - - @Nested - class OnCollaborationsNotPresent { - - @BeforeEach - void setUpMock() { - when(collaborationService.hasCollaboration(VorgangHeaderTestFactory.ID)).thenReturn(false); - } - - @Test - void shouldHaveFourLinks() { - var model = callProcessor(); - - assertThat(model.getLinks()).hasSize(4); - } - - @Test - void shouldAddSearchOrganisationsEinheitLink() { - var expectedHref = UriComponentsBuilder.fromUriString(OrganisationsEinheitController.PATH) - .queryParam(OrganisationsEinheitController.SEARCH_BY_PARAM, "{" + OrganisationsEinheitController.SEARCH_BY_PARAM + "}") - .build().toString(); - - var model = callProcessor(); - - assertThat(model.getLink(CollaborationVorgangProcessor.REL_SEARCH_ORGANISATIONS_EINHEIT)).get() - .extracting(Link::getHref) - .isEqualTo(expectedHref); - } - - @Test - void shouldAddSearchFachstelleLink() { - var expectedHref = UriComponentsBuilder.fromUriString(FachstelleController.PATH) - .queryParam(FachstelleController.SEARCH_BY_PARAM, "{" + FachstelleController.SEARCH_BY_PARAM + "}") - .build().toString(); - - var model = callProcessor(); - - assertThat(model.getLink(CollaborationVorgangProcessor.REL_SEARCH_FACHSTELLE)).get() - .extracting(Link::getHref) - .isEqualTo(expectedHref); - } - - @Test - void shouldAddCollaborationsLink() { - var expectedHref = UriComponentsBuilder.fromUriString(CollaborationByVorgangController.PATH) - .pathSegment(VorgangHeaderTestFactory.ID, "collaborations") - .build().toString(); - - var model = callProcessor(); - - assertThat(model.getLink(CollaborationVorgangProcessor.REL_COLLABORATIONS)).get() - .extracting(Link::getHref) - .isEqualTo(expectedHref); - } - } - - private EntityModel<VorgangWithEingang> callProcessor() { - return processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())); - } - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleCollaborationTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleCollaborationTestFactory.java deleted file mode 100644 index 70f19d51460de816bf170b04df3191164b0d4727..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleCollaborationTestFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.collaboration.FachstelleCollaboration.FachstelleCollaborationBuilder; - -public class FachstelleCollaborationTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String COLLABORATION_VORGANG_ID = UUID.randomUUID().toString(); - public static final long COLLABORATION_LEVEL = 4L; - public static final String TITEL = LoremIpsum.getInstance().getWords(7); - public static final String BESCHREIBUNG = LoremIpsum.getInstance().getParagraphs(2, 5); - public static final String ZUSTAENDIGE_STELLE = FachstelleTestFactory.ID; - - public static FachstelleCollaboration create() { - return createBuilder() - .build(); - } - - private static FachstelleCollaborationBuilder createBuilder() { - return FachstelleCollaboration.builder() - .id(ID) - .collaborationVorgangId(COLLABORATION_VORGANG_ID) - .collaborationLevel(COLLABORATION_LEVEL) - .titel(TITEL) - .beschreibung(BESCHREIBUNG) - .zustaendigeStelle(ZUSTAENDIGE_STELLE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleControllerTest.java deleted file mode 100644 index 1e5fd24ad9cbb264f719b89695615e0c7597b557..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleControllerTest.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import com.thedeanda.lorem.LoremIpsum; - -import lombok.SneakyThrows; - -class FachstelleControllerTest { - - @InjectMocks - private FachstelleController controller; - - @Mock - private FachstelleService service; - - @Mock - private FachstelleModelAssembler modelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetById { - - private final Fachstelle fachstelle = FachstelleTestFactory.create(); - - @BeforeEach - void mockService() { - when(service.getById(FachstelleTestFactory.ID)).thenReturn(fachstelle); - } - - @SneakyThrows - @Test - void shouldCallFachstelleService() { - performRequest(); - - verify(service).getById(FachstelleTestFactory.ID); - } - - @Test - void shouldCallAssembler() { - performRequest(); - - verify(modelAssembler).toModel(fachstelle); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); - - var response = performRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldHaveFachstelleName() { - when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); - - var response = performRequest(); - - response.andExpect(jsonPath("$.name").value(FachstelleTestFactory.NAME)); - } - - @SneakyThrows - @Test - void shouldHaveFachstelleAnschrift() { - when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); - - var response = performRequest(); - - response.andExpect(jsonPath("$.anschrift").value(FachstelleTestFactory.ANSCHRIFT)); - } - - @SneakyThrows - @Test - void shouldHaveFachstelleEmail() { - when(modelAssembler.toModel(fachstelle)).thenReturn(EntityModel.of(fachstelle)); - - var response = performRequest(); - - response.andExpect(jsonPath("$.email").value(FachstelleTestFactory.EMAIL)); - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform(get(FachstelleController.PATH + "/" + FachstelleTestFactory.ID)); - } - } - - @Nested - class TestSearch { - - private final Fachstelle fachstelle1 = FachstelleTestFactory.create(); - private final Fachstelle fachstelle2 = FachstelleTestFactory.createBuilder() - .name(LoremIpsum.getInstance().getName()) - .build(); - private final String searchBy = LoremIpsum.getInstance().getWords(5); - private final List<Fachstelle> fachstellen = List.of(fachstelle1, fachstelle2); - - @BeforeEach - void setUpMocks() { - when(service.searchFachstellen(searchBy)).thenReturn(Stream.of(fachstelle1, fachstelle2)); - when(modelAssembler.toCollectionModel(fachstellen)) - .thenReturn( - CollectionModel.of(List.of(EntityModel.of(fachstelle1), EntityModel.of(fachstelle2)))); - } - - @Test - void shouldCallService() { - performRequest(); - - verify(service).searchFachstellen(searchBy); - } - - @Test - void shouldCallModelAssembler() { - performRequest(); - - verify(modelAssembler).toCollectionModel(fachstellen); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - var response = performRequest(); - - response.andExpect(status().isOk()); - } - - @Test - @SneakyThrows - void shouldHaveFirstFachstelleName() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].name").value(fachstelle1.getName())); - } - - @Test - @SneakyThrows - void shouldHaveFirstFachstelleAnschrift() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].anschrift").value(fachstelle1.getAnschrift())); - } - - @Test - @SneakyThrows - void shouldHaveFirstFachstelleEmail() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].email").value(fachstelle1.getEmail())); - } - - @Test - @SneakyThrows - void shouldHaveSecondFachstelleName() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].name").value(fachstelle2.getName())); - } - - @Test - @SneakyThrows - void shouldHaveSecondFachstelleAnschrift() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].anschrift").value(fachstelle2.getAnschrift())); - } - - @Test - @SneakyThrows - void shouldHaveSecondFachstelleEmail() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].email").value(fachstelle2.getEmail())); - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform(get(FachstelleController.PATH) - .param("searchBy", searchBy)).andExpect(status().isOk()); - - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleMapperTest.java deleted file mode 100644 index c500205e72ff6bb575a4f1aa0b59b3f173d53049..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleMapperTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class FachstelleMapperTest { - - private final FachstelleMapper mapper = Mappers.getMapper(FachstelleMapper.class); - - @Nested - class TestFromGrpc { - - @Test - void shouldMap() { - var fachstelle = mapper.fromGrpc(GrpcFachstelleTestFactory.create()); - - assertThat(fachstelle).usingRecursiveComparison().isEqualTo(FachstelleTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssemblerTest.java deleted file mode 100644 index 9a1f9177c0d59bed039987f5c16271783b98ea1b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssemblerTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -class FachstelleModelAssemblerTest { - - @Spy - private FachstelleModelAssembler assembler; - - @Nested - class TestToModel { - - @Test - void shouldHaveSelfLink() { - var model = assembler.toModel(FachstelleTestFactory.create()); - - assertHaveSelfLink(model); - } - - private void assertHaveSelfLink(EntityModel<Fachstelle> model) { - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(FachstelleController.PATH + "/" + FachstelleTestFactory.ID); - } - } - - @Nested - class TestToCollectionModel { - - private Fachstelle fachstelle = FachstelleTestFactory.create(); - - @Test - void shouldCallToModel() { - callAssembler(); - - verify(assembler).toModel(fachstelle); - } - - @Test - void shouldHaveSelfLink() { - var model = callAssembler(); - - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(FachstelleController.PATH); - } - - @Test - void shouldContainEntityModel() { - var entityModel = EntityModel.of(fachstelle); - doReturn(entityModel).when(assembler).toModel(fachstelle); - - var model = callAssembler(); - - assertThat(model).containsExactly(entityModel); - } - - private CollectionModel<EntityModel<Fachstelle>> callAssembler() { - return assembler.toCollectionModel(List.of(fachstelle)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteServiceTest.java deleted file mode 100644 index f5a47ee1caef08485928e17808fe9f88758183c3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleRemoteServiceTest.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceBlockingStub; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchRequest; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchResponse; - -class FachstelleRemoteServiceTest { - - @Spy - @InjectMocks - private FachstelleRemoteService service; - - @Mock - private FachstelleServiceBlockingStub serviceStub; - - @Mock - private FachstelleMapper fachstelleMapper; - - @Nested - class TestSearch { - - private final String searchBy = LoremIpsum.getInstance().getWords(5); - private final GrpcFachstelleSearchResponse grpcFachstelleSearchResponse = GrpcFachstelleSearchResponseTestFactory - .create(); - - @BeforeEach - void setUpMocks() { - when(serviceStub.search(argThat(requestContainsSearchBy()))).thenReturn(grpcFachstelleSearchResponse); - } - - @Test - void shouldCallGrpcStub() { - callService(); - - verify(serviceStub).search(argThat(requestContainsSearchBy())); - } - - @Test - void shouldCallMapper() { - callService().toList(); - - verify(fachstelleMapper).fromGrpc(GrpcFachstelleSearchResponseTestFactory.FACHSTELLE); - } - - @Test - void shouldReturnFachstelle() { - var fachstelle = FachstelleTestFactory.create(); - when(fachstelleMapper.fromGrpc(GrpcFachstelleSearchResponseTestFactory.FACHSTELLE)).thenReturn(fachstelle); - - var fachstellen = callService(); - - assertThat(fachstellen).containsExactly(fachstelle); - } - - private Stream<Fachstelle> callService() { - return service.search(searchBy); - } - - private ArgumentMatcher<GrpcFachstelleSearchRequest> requestContainsSearchBy() { - return request -> request.getSearchBy().equals(searchBy); - } - } - - @Nested - class TestGetById { - - private final GrpcFachstelleGetRequest request = GrpcFachstelleGetRequestTestFactory.create(); - private final GrpcFachstelleGetResponse response = GrpcFachstelleGetResponseTestFactory.create(); - private final Fachstelle fachstelle = FachstelleTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(request).when(service).buildGetByIdRequest(FachstelleTestFactory.ID); - when(serviceStub.getById(request)).thenReturn(response); - doReturn(fachstelle).when(service).getFachstelleFromGetByIdResponse(response); - } - - @Test - void shouldBuildRequest() { - callService(); - - verify(service).buildGetByIdRequest(FachstelleTestFactory.ID); - } - - @Test - void shouldCallGrpcStub() { - callService(); - - verify(serviceStub).getById(request); - } - - @Test - void shouldBuildResponse() { - callService(); - - verify(service).getFachstelleFromGetByIdResponse(response); - } - - @Test - void shouldReturnFachstelle() { - var get = service.getById(FachstelleTestFactory.ID); - - assertThat(get).isEqualTo(fachstelle); - } - - private Fachstelle callService() { - return service.getById(FachstelleTestFactory.ID); - } - } - - @Nested - class TestBuildGetByIdRequest { - - @Test - void shouldHaveId() { - var request = service.buildGetByIdRequest(FachstelleTestFactory.ID); - - assertThat(request.getId()).isEqualTo(FachstelleTestFactory.ID); - } - } - - @Nested - class TestGetFachstelleFromGetByIdResponse { - - private final GrpcFachstelleGetResponse response = GrpcFachstelleGetResponseTestFactory.create(); - private final Fachstelle fachstelle = FachstelleTestFactory.create(); - - @BeforeEach - void setUp() { - when(fachstelleMapper.fromGrpc(response.getFachstelle())).thenReturn(fachstelle); - } - - @Test - void shouldCallMapper() { - callService(); - - verify(fachstelleMapper).fromGrpc(response.getFachstelle()); - } - - @Test - void shouldReturnFachstelle() { - var built = callService(); - - assertThat(built).isEqualTo(fachstelle); - } - - private Fachstelle callService() { - return service.getFachstelleFromGetByIdResponse(response); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleServiceTest.java deleted file mode 100644 index b4ed3aa67464127a9ba28b955af65b328d78a6a2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleServiceTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.thedeanda.lorem.LoremIpsum; - -class FachstelleServiceTest { - - @InjectMocks - private FachstelleService service; - - @Mock - private FachstelleRemoteService remoteService; - - @Nested - class TestGetById { - - @Test - void shouldCallRemoteService() { - service.getById(FachstelleTestFactory.ID); - - verify(remoteService).getById(FachstelleTestFactory.ID); - } - - @Test - void shouldReturnFachstelle() { - var fachstelle = FachstelleTestFactory.create(); - when(remoteService.getById(FachstelleTestFactory.ID)).thenReturn(fachstelle); - - var gotFachstelle = service.getById(FachstelleTestFactory.ID); - - assertThat(gotFachstelle).isEqualTo(fachstelle); - } - } - - @Nested - class TestSearchFachstellen { - - private final String searchBy = LoremIpsum.getInstance().getWords(5); - - @Test - void shouldCallRemoteService() { - callService(); - - verify(remoteService).search(searchBy); - } - - @Test - void shouldReturnFachstellen() { - var fachstelle = FachstelleTestFactory.create(); - when(remoteService.search(searchBy)).thenReturn(Stream.of(fachstelle)); - - var fachstellen = callService(); - - assertThat(fachstellen).containsExactly(fachstelle); - } - - private Stream<Fachstelle> callService() { - return service.searchFachstellen(searchBy); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleTestFactory.java deleted file mode 100644 index 5e672ba9eee4f7a31eca972ce2f27c061c504429..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/FachstelleTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -public class FachstelleTestFactory { - public static final String ID = UUID.randomUUID().toString(); - public static final String NAME = LoremIpsum.getInstance().getName(); - public static final String ANSCHRIFT = LoremIpsum.getInstance().getCity(); - public static final String EMAIL = LoremIpsum.getInstance().getEmail(); - - public static Fachstelle create() { - return createBuilder().build(); - } - - public static Fachstelle.FachstelleBuilder createBuilder() { - return Fachstelle.builder() - .id(ID) - .name(NAME) - .anschrift(ANSCHRIFT) - .email(EMAIL); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcAnschriftTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcAnschriftTestFactory.java deleted file mode 100644 index 2843ca246d032ee963672171fd7dd13ca85bf988..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcAnschriftTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift.Builder; - -public class GrpcAnschriftTestFactory { - public static final String STRASSE = AnschriftTestFactory.STRASSE; - public static final String HAUSNUMMER = AnschriftTestFactory.HAUSNUMMER; - public static final String PLZ = AnschriftTestFactory.PLZ; - public static final String ORT = AnschriftTestFactory.ORT; - - public static GrpcAnschrift create() { - return createBuilder().build(); - } - - public static Builder createBuilder() { - return GrpcAnschrift.newBuilder() - .setStrasse(STRASSE) - .setHausnummer(HAUSNUMMER) - .setPlz(PLZ) - .setOrt(ORT); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestForFachstelleTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestForFachstelleTestFactory.java deleted file mode 100644 index 4ebe8da9c1445f3d839f06dab2eb588a583169a5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestForFachstelleTestFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; - -class GrpcCollaborationRequestForFachstelleTestFactory { - - public static final String ID = FachstelleCollaborationTestFactory.ID; - public static final String COLLABORATION_VORGANG_ID = FachstelleCollaborationTestFactory.COLLABORATION_VORGANG_ID; - public static final String TITEL = FachstelleCollaborationTestFactory.TITEL; - public static final String BESCHREIBUNG = FachstelleCollaborationTestFactory.BESCHREIBUNG; - public static final String ZUSTAENDIGE_STELLE = FachstelleCollaborationTestFactory.ZUSTAENDIGE_STELLE; - - public static GrpcCollaborationRequest create() { - return createBuilder() - .setCollaborationLevel(FachstelleCollaborationTestFactory.COLLABORATION_LEVEL) - .build(); - } - - public static GrpcCollaborationRequest.Builder createBuilder() { - return GrpcCollaborationRequest.newBuilder() - .setId(ID) - .setCollaborationVorgangId(COLLABORATION_VORGANG_ID) - .setTitel(TITEL) - .setBeschreibung(BESCHREIBUNG) - .setZustaendigeStelle(ZUSTAENDIGE_STELLE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestForOrganisationsEinheitTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestForOrganisationsEinheitTestFactory.java deleted file mode 100644 index d212054294df68b932bda1091abe9b198120dd84..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcCollaborationRequestForOrganisationsEinheitTestFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; - -class GrpcCollaborationRequestForOrganisationsEinheitTestFactory { - - public static final String ID = OrganisationsEinheitCollaborationTestFactory.ID; - public static final String COLLABORATION_VORGANG_ID = OrganisationsEinheitCollaborationTestFactory.COLLABORATION_VORGANG_ID; - public static final String TITEL = OrganisationsEinheitCollaborationTestFactory.TITEL; - public static final String BESCHREIBUNG = OrganisationsEinheitCollaborationTestFactory.BESCHREIBUNG; - public static final String ZUSTAENDIGE_STELLE = OrganisationsEinheitCollaborationTestFactory.ZUSTAENDIGE_STELLE; - - public static GrpcCollaborationRequest create() { - return createBuilder() - .setCollaborationLevel(OrganisationsEinheitCollaborationTestFactory.COLLABORATION_LEVEL) - .build(); - } - - public static GrpcCollaborationRequest.Builder createBuilder() { - return GrpcCollaborationRequest.newBuilder() - .setId(ID) - .setCollaborationVorgangId(COLLABORATION_VORGANG_ID) - .setTitel(TITEL) - .setBeschreibung(BESCHREIBUNG) - .setZustaendigeStelle(ZUSTAENDIGE_STELLE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetRequestTestFactory.java deleted file mode 100644 index d51e2c01ae242b66f0dec1869f1c2557b04c3ba9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetRequestTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; - -class GrpcFachstelleGetRequestTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - - public static GrpcFachstelleGetRequest create() { - return createBuilder().build(); - } - - public static GrpcFachstelleGetRequest.Builder createBuilder() { - return GrpcFachstelleGetRequest.newBuilder().setId(ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetResponseTestFactory.java deleted file mode 100644 index 7cee69f700d48abe4eb021e969f0274711a4c527..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleGetResponseTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; - -class GrpcFachstelleGetResponseTestFactory { - - public static final GrpcFachstelle GRPC_FACHSTELLE = GrpcFachstelleTestFactory.create(); - - public static GrpcFachstelleGetResponse create() { - return createBuilder().build(); - } - - public static GrpcFachstelleGetResponse.Builder createBuilder() { - return GrpcFachstelleGetResponse.newBuilder().setFachstelle(GRPC_FACHSTELLE); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleSearchResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleSearchResponseTestFactory.java deleted file mode 100644 index 7e1d52c6d91246fc2d6a48adea17c69a85013b29..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleSearchResponseTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleSearchResponse; - -public class GrpcFachstelleSearchResponseTestFactory { - - public static final GrpcFachstelle FACHSTELLE = GrpcFachstelleTestFactory.create(); - - public static GrpcFachstelleSearchResponse create() { - return createBuilder() - .build(); - } - - public static GrpcFachstelleSearchResponse.Builder createBuilder() { - return GrpcFachstelleSearchResponse.newBuilder() - .addFachstellen(FACHSTELLE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleTestFactory.java deleted file mode 100644 index 4744d48d62c276154556c3e8ed6bca0381741887..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFachstelleTestFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; - -public class GrpcFachstelleTestFactory { - public static final String ID = FachstelleTestFactory.ID; - public static final String NAME = FachstelleTestFactory.NAME; - public static final String ANSCHRIFT = FachstelleTestFactory.ANSCHRIFT; - public static final String EMAIL = FachstelleTestFactory.EMAIL; - - public static GrpcFachstelle create() { - return createBuilder().build(); - } - - public static GrpcFachstelle.Builder createBuilder() { - return GrpcFachstelle.newBuilder() - .setId(ID) - .setFirmenName(NAME) - .setAnschrift(ANSCHRIFT) - .setEmailAdresse(EMAIL); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsRequestTestFactory.java deleted file mode 100644 index c78dcec4ee4e0e982cb7130fdfe655d41323ae31..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsRequestTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; - -class GrpcFindRequestsRequestTestFactory { - - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - public static GrpcFindRequestsRequest create() { - return createBuilder().build(); - } - - public static GrpcFindRequestsRequest.Builder createBuilder() { - return GrpcFindRequestsRequest.newBuilder().setVorgangId(VORGANG_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsResponseTestFactory.java deleted file mode 100644 index 102e3dc3e68515b84bc6fdd5ca2125383ead2f31..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcFindRequestsResponseTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; -import de.ozgcloud.collaboration.request.GrpcFindRequestsResponse; - -class GrpcFindRequestsResponseTestFactory { - - public static final GrpcCollaborationRequest COLLABORATION_REQUEST = GrpcCollaborationRequestForOrganisationsEinheitTestFactory.create(); - - public static GrpcFindRequestsResponse create() { - return createBuilder().build(); - } - - public static GrpcFindRequestsResponse.Builder createBuilder() { - return GrpcFindRequestsResponse.newBuilder().addRequests(COLLABORATION_REQUEST); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcGetRequestRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcGetRequestRequestTestFactory.java deleted file mode 100644 index 974dfb3f3b63cc3b5410fd4dc9595d5803786d82..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcGetRequestRequestTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import de.ozgcloud.collaboration.request.GrpcGetRequestRequest; - -class GrpcGetRequestRequestTestFactory { - - public static final String COLLABORATION_ID = UUID.randomUUID().toString(); - - public static GrpcGetRequestRequest create() { - return createBuilder().build(); - } - - public static GrpcGetRequestRequest.Builder createBuilder() { - return GrpcGetRequestRequest.newBuilder().setId(COLLABORATION_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcGetRequestResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcGetRequestResponseTestFactory.java deleted file mode 100644 index b90e8ae9b15d2c9fd5e77e5e57c5e114b2fa855c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcGetRequestResponseTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.collaboration.request.GrpcCollaborationRequest; -import de.ozgcloud.collaboration.request.GrpcGetRequestResponse; - -class GrpcGetRequestResponseTestFactory { - - public static final GrpcCollaborationRequest COLLABORATION_REQUEST = GrpcCollaborationRequestForOrganisationsEinheitTestFactory.create(); - - public static GrpcGetRequestResponse create() { - return createBuilder().build(); - } - - public static GrpcGetRequestResponse.Builder createBuilder() { - return GrpcGetRequestResponse.newBuilder().setRequest(COLLABORATION_REQUEST); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitGetRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitGetRequestTestFactory.java deleted file mode 100644 index fb15ac8307c6bb871f2e7ef9a84ff49375afe882..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitGetRequestTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; - -class GrpcOrganisationsEinheitGetRequestTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - - public static GrpcOrganisationsEinheitGetRequest create() { - return createBuilder().build(); - } - - public static GrpcOrganisationsEinheitGetRequest.Builder createBuilder() { - return GrpcOrganisationsEinheitGetRequest.newBuilder().setId(ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitGetResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitGetResponseTestFactory.java deleted file mode 100644 index 0a78226aff84a8a2239c1e5f1e9e741ea7c1f55e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitGetResponseTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; - -class GrpcOrganisationsEinheitGetResponseTestFactory { - - public static final GrpcOrganisationsEinheit GRPC_ORGANISATIONS_EINHEIT = GrpcOrganisationsEinheitTestFactory.create(); - - public static GrpcOrganisationsEinheitGetResponse create() { - return createBuilder().build(); - } - - public static GrpcOrganisationsEinheitGetResponse.Builder createBuilder() { - return GrpcOrganisationsEinheitGetResponse.newBuilder().setOrganisationsEinheit(GRPC_ORGANISATIONS_EINHEIT); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitSearchResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitSearchResponseTestFactory.java deleted file mode 100644 index b904d1fcabe8b3e856b451b0337f9026694d7fa4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitSearchResponseTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitSearchResponse; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitSearchResponse.Builder; - -public class GrpcOrganisationsEinheitSearchResponseTestFactory { - - public static final GrpcOrganisationsEinheit ORGANISATIONS_EINHEIT = GrpcOrganisationsEinheitTestFactory.create(); - - public static GrpcOrganisationsEinheitSearchResponse create() { - return createBuilder() - .build(); - } - - public static Builder createBuilder() { - return GrpcOrganisationsEinheitSearchResponse.newBuilder() - .addOrganisationsEinheiten(ORGANISATIONS_EINHEIT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitTestFactory.java deleted file mode 100644 index a847367d717be3672a6f38d5583a2c60d8277707..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcOrganisationsEinheitTestFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit.Builder; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcZustaendigkeit; - -public class GrpcOrganisationsEinheitTestFactory { - public static final String ID = OrganisationsEinheitTestFactory.ID; - public static final GrpcXzufiId XZUFI_ID = GrpcXzufiIdTestFactory.create(); - public static final String NAME = OrganisationsEinheitTestFactory.NAME; - public static final String SYNONYME = LoremIpsum.getInstance().getWords(5); - public static final String VORGANG_MANAGER_ADDRESS = LoremIpsum.getInstance().getUrl(); - public static final GrpcAnschrift ANSCHRIFT = GrpcAnschriftTestFactory.create(); - public static final GrpcZustaendigkeit ZUSTAENDIGKEIT = GrpcZustaendigkeitTestFactory.create(); - - public static GrpcOrganisationsEinheit create() { - return createBuilder().build(); - } - - public static GrpcOrganisationsEinheit createWithoutSynonyme() { - return createBuilderWithoutSynonyme() - .build(); - } - - public static Builder createBuilder() { - return createBuilderWithoutSynonyme() - .setSynonyme(SYNONYME); - } - - public static Builder createBuilderWithoutSynonyme() { - return GrpcOrganisationsEinheit.newBuilder() - .setId(ID) - .setName(NAME) - .setAnschrift(ANSCHRIFT) - .setVorgangManagerAddress(VORGANG_MANAGER_ADDRESS) - .addZustaendigkeiten(ZUSTAENDIGKEIT) - .setXzufiId(XZUFI_ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcXzufiIdTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcXzufiIdTestFactory.java deleted file mode 100644 index 6d3caee2917c9cdd320054411c032b0dc8c9eade..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcXzufiIdTestFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId.Builder; - -public class GrpcXzufiIdTestFactory { - public static final String ORGANISATIONS_EINHEIT_ID = UUID.randomUUID().toString(); - public static final String SCHEME_AGENCY_ID = UUID.randomUUID().toString(); - - public static GrpcXzufiId create() { - return createBuilder(ORGANISATIONS_EINHEIT_ID, SCHEME_AGENCY_ID).build(); - } - - public static GrpcXzufiId create(String id, String schemeAgencyId) { - return createBuilder(id, schemeAgencyId).build(); - } - - public static Builder createBuilder(String id, String schemeAgencyId) { - return GrpcXzufiId.newBuilder().setId(id).setSchemeAgencyId(schemeAgencyId); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcZustaendigkeitTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcZustaendigkeitTestFactory.java deleted file mode 100644 index f0072099d0203e1e2d04abd9c03c28f39d7cb3da..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/GrpcZustaendigkeitTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcZustaendigkeit; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcZustaendigkeit.Builder; - -public class GrpcZustaendigkeitTestFactory { - public static final GrpcXzufiId ID = GrpcXzufiIdTestFactory.create(); - public static final String GEBIET_ID = UUID.randomUUID().toString(); - - public static GrpcZustaendigkeit create() { - return createBuilder().build(); - } - - private static Builder createBuilder() { - return GrpcZustaendigkeit.newBuilder() - .setXzufiId(ID) - .setGebietId(GEBIET_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitCollaborationTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitCollaborationTestFactory.java deleted file mode 100644 index 88d52fc1d116a1c1f4c5cfc413f41395efd9a9f9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitCollaborationTestFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.collaboration.OrganisationsEinheitCollaboration.OrganisationsEinheitCollaborationBuilder; - -public class OrganisationsEinheitCollaborationTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String COLLABORATION_VORGANG_ID = UUID.randomUUID().toString(); - public static final long COLLABORATION_LEVEL = 1L; - public static final String TITEL = LoremIpsum.getInstance().getWords(7); - public static final String BESCHREIBUNG = LoremIpsum.getInstance().getParagraphs(2, 5); - public static final String ZUSTAENDIGE_STELLE = OrganisationsEinheitTestFactory.ID; - - public static OrganisationsEinheitCollaboration create() { - return createBuilder() - .build(); - } - - private static OrganisationsEinheitCollaborationBuilder createBuilder() { - return OrganisationsEinheitCollaboration.builder() - .id(ID) - .collaborationVorgangId(COLLABORATION_VORGANG_ID) - .collaborationLevel(COLLABORATION_LEVEL) - .titel(TITEL) - .beschreibung(BESCHREIBUNG) - .zustaendigeStelle(ZUSTAENDIGE_STELLE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java deleted file mode 100644 index 8f1efd6b991fc2f5649f58359da0cf0d6941c2fb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import com.thedeanda.lorem.LoremIpsum; - -import lombok.SneakyThrows; - -class OrganisationsEinheitControllerTest { - - @InjectMocks - private OrganisationsEinheitController controller; - - @Mock - private OrganisationsEinheitService service; - - @Mock - private OrganisationsEinheitModelAssembler assembler; - - @Mock - private OrganisationsEinheitHeaderModelAssembler headerModelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetById { - - private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create(); - - @BeforeEach - void mockService() { - when(service.getById(OrganisationsEinheitTestFactory.ID)).thenReturn(organisationsEinheit); - } - - @SneakyThrows - @Test - void shouldCallOrganisationsEinheitService() { - performRequest(); - - verify(service).getById(OrganisationsEinheitTestFactory.ID); - } - - @Test - void shouldCallAssembler() { - performRequest(); - - verify(assembler).toModel(organisationsEinheit); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - when(assembler.toModel(organisationsEinheit)).thenReturn(EntityModel.of(organisationsEinheit)); - - var response = performRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - @Test - void shouldHaveOrganisationsEinheitId() { - when(assembler.toModel(organisationsEinheit)).thenReturn(EntityModel.of(organisationsEinheit)); - - var response = performRequest(); - - response.andExpect(jsonPath("$.id").value(OrganisationsEinheitTestFactory.ID)); - } - - @SneakyThrows - @Test - void shouldHaveOrganisationsEinheitXzufiId() { - when(assembler.toModel(organisationsEinheit)).thenReturn(EntityModel.of(organisationsEinheit)); - - var response = performRequest(); - - response.andExpect(jsonPath("$.xzufiId.id").value(XzufiIdTestFactory.ID)); - } - - @SneakyThrows - @Test - void shouldHaveOrganisationsEinheitXzufiSchemeAgencyId() { - when(assembler.toModel(organisationsEinheit)).thenReturn(EntityModel.of(organisationsEinheit)); - - var response = performRequest(); - - response.andExpect(jsonPath("$.xzufiId.schemeAgencyId").value(XzufiIdTestFactory.SCHEME_AGENCY_ID)); - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform(get(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitTestFactory.ID)); - } - } - - @Nested - class TestSearch { - - private final OrganisationsEinheitHeader organisationsEinheitHeader1 = OrganisationsEinheitHeaderTestFactory.create(); - private final OrganisationsEinheitHeader organisationsEinheitHeader2 = OrganisationsEinheitHeaderTestFactory.createBuilder() - .name(LoremIpsum.getInstance().getName()) - .build(); - private final String searchBy = LoremIpsum.getInstance().getWords(5); - private final List<OrganisationsEinheitHeader> organisationsEinheitHeaders = List.of(organisationsEinheitHeader1, - organisationsEinheitHeader2); - - @BeforeEach - void setUpMocks() { - when(service.searchOrganisationsEinheiten(searchBy)).thenReturn(Stream.of(organisationsEinheitHeader1, organisationsEinheitHeader2)); - when(headerModelAssembler.toCollectionModel(organisationsEinheitHeaders)) - .thenReturn( - CollectionModel.of(List.of(EntityModel.of(organisationsEinheitHeader1), EntityModel.of(organisationsEinheitHeader2)))); - } - - @Test - void shouldCallService() { - performRequest(); - - verify(service).searchOrganisationsEinheiten(searchBy); - } - - @Test - void shouldCallModelAssembler() { - performRequest(); - - verify(headerModelAssembler).toCollectionModel(organisationsEinheitHeaders); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - var response = performRequest(); - - response.andExpect(status().isOk()); - } - - @Test - @SneakyThrows - void shouldHaveFirstOrganisationsEinheitName() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].name").value(organisationsEinheitHeader1.getName())); - } - - @Test - @SneakyThrows - void shouldHaveFirstOrganisationsEinheitStrasse() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].anschrift.strasse").value(organisationsEinheitHeader1.getAnschrift().getStrasse())); - } - - @Test - @SneakyThrows - void shouldHaveFirstOrganisationsEinheitHausnummer() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].anschrift.hausnummer").value(organisationsEinheitHeader1.getAnschrift().getHausnummer())); - } - - @Test - @SneakyThrows - void shouldHaveFirstOrganisationsEinheitPlz() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].anschrift.plz").value(organisationsEinheitHeader1.getAnschrift().getPlz())); - } - - @Test - @SneakyThrows - void shouldHaveFirstOrganisationsEinheitOrt() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[0].anschrift.ort").value(organisationsEinheitHeader1.getAnschrift().getOrt())); - } - - @Test - @SneakyThrows - void shouldHaveSecondOrganisationsEinheitName() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].name").value(organisationsEinheitHeader2.getName())); - } - - @Test - @SneakyThrows - void shouldHaveSecondOrganisationsEinheitStrasse() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].anschrift.strasse").value(organisationsEinheitHeader2.getAnschrift().getStrasse())); - } - - @Test - @SneakyThrows - void shouldHaveSecondOrganisationsEinheitHausnummer() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].anschrift.hausnummer").value(organisationsEinheitHeader2.getAnschrift().getHausnummer())); - } - - @Test - @SneakyThrows - void shouldHaveSecondOrganisationsEinheitPlz() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].anschrift.plz").value(organisationsEinheitHeader2.getAnschrift().getPlz())); - } - - @Test - @SneakyThrows - void shouldHaveSecondOrganisationsEinheitOrt() { - var response = performRequest(); - response.andExpect(jsonPath("$.content[1].anschrift.ort").value(organisationsEinheitHeader2.getAnschrift().getOrt())); - } - - @SneakyThrows - private ResultActions performRequest() { - return mockMvc.perform(get(OrganisationsEinheitController.PATH) - .param("searchBy", searchBy)).andExpect(status().isOk()); - - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderMapperTest.java deleted file mode 100644 index 1632a472dab82a6b8dd6e14f0c2bc0fb74bd9ccc..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderMapperTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class OrganisationsEinheitHeaderMapperTest { - - private final OrganisationsEinheitHeaderMapper mapper = Mappers.getMapper(OrganisationsEinheitHeaderMapper.class); - - @Nested - class TestFromGrpc { - - @Test - void shouldMap() { - var organisationsEinheitHeader = mapper.fromGrpc(GrpcOrganisationsEinheitTestFactory.create()); - - assertThat(organisationsEinheitHeader).usingRecursiveComparison().isEqualTo(OrganisationsEinheitHeaderTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssemblerTest.java deleted file mode 100644 index 34127bb1bc9646ead782efb1f6fdc9aa31f5b939..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssemblerTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -class OrganisationsEinheitHeaderModelAssemblerTest { - - @Spy - private OrganisationsEinheitHeaderModelAssembler assembler; - - @Nested - class TestToModel { - - @Test - void shouldHaveSelfLink() { - var model = assembler.toModel(OrganisationsEinheitHeaderTestFactory.create()); - - assertHaveSelfLink(model); - } - - private void assertHaveSelfLink(EntityModel<OrganisationsEinheitHeader> model) { - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitHeaderTestFactory.ID); - } - } - - @Nested - class TestToCollectionModel { - - private OrganisationsEinheitHeader organisationsEinheitHeader = OrganisationsEinheitHeaderTestFactory.create(); - - @Test - void shouldCallToModel() { - callAssembler(); - - verify(assembler).toModel(organisationsEinheitHeader); - } - - @Test - void shouldHaveSelfLink() { - var model = callAssembler(); - - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(OrganisationsEinheitController.PATH); - } - - @Test - void shouldContainEntityModel() { - var entityModel = EntityModel.of(organisationsEinheitHeader); - doReturn(entityModel).when(assembler).toModel(organisationsEinheitHeader); - - var model = callAssembler(); - - assertThat(model).containsExactly(entityModel); - } - - private CollectionModel<EntityModel<OrganisationsEinheitHeader>> callAssembler() { - return assembler.toCollectionModel(List.of(organisationsEinheitHeader)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderTestFactory.java deleted file mode 100644 index 81ac634cb448240003e751ec677a618ecbc84959..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import de.ozgcloud.alfa.collaboration.OrganisationsEinheitHeader.OrganisationsEinheitHeaderBuilder; - -; - -public class OrganisationsEinheitHeaderTestFactory { - public static final String ID = OrganisationsEinheitTestFactory.ID; - public static final String NAME = OrganisationsEinheitTestFactory.NAME; - public static final Anschrift ANSCHRIFT = AnschriftTestFactory.create(); - - public static OrganisationsEinheitHeader create() { - return createBuilder().build(); - } - - public static OrganisationsEinheitHeaderBuilder createBuilder() { - return OrganisationsEinheitHeader.builder() - .id(ID) - .name(NAME) - .anschrift(ANSCHRIFT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitMapperTest.java deleted file mode 100644 index b1e74b31ffaad59722c4363fec7a45491d6db632..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitMapperTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class OrganisationsEinheitMapperTest { - - private final OrganisationsEinheitMapper mapper = Mappers.getMapper(OrganisationsEinheitMapper.class); - - @Nested - class TestFromGrpc { - - @Test - void shouldMap() { - var organisationsEinheit = mapper.fromGrpc(GrpcOrganisationsEinheitTestFactory.create()); - - assertThat(organisationsEinheit).usingRecursiveComparison().isEqualTo(OrganisationsEinheitTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssemblerTest.java deleted file mode 100644 index 434cab790b7e79957362621a3002b3aa7f870e96..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssemblerTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.web.util.UriComponentsBuilder; - -class OrganisationsEinheitModelAssemblerTest { - - @Spy - private OrganisationsEinheitModelAssembler assembler; - - @Nested - class TestToModel { - - @Test - void shouldHaveSelfLink() { - var expectedHref = UriComponentsBuilder.fromUriString(OrganisationsEinheitController.PATH) - .pathSegment(OrganisationsEinheitTestFactory.ID) - .build().toString(); - - var model = assembler.toModel(OrganisationsEinheitTestFactory.create()); - - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(expectedHref); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitRemoteServiceTest.java deleted file mode 100644 index 7b217036e6cc32d9e2b5cb15fd155a3a57e71790..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitRemoteServiceTest.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitSearchRequest; -import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitSearchResponse; -import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceBlockingStub; - -class OrganisationsEinheitRemoteServiceTest { - - @Spy - @InjectMocks - private OrganisationsEinheitRemoteService service; - - @Mock - private OrganisationsEinheitServiceBlockingStub serviceStub; - - @Mock - private OrganisationsEinheitHeaderMapper organisationsEinheitHeaderMapper; - @Mock - private OrganisationsEinheitMapper organisationsEinheitMapper; - - @Nested - class TestSearch { - - private final String searchBy = LoremIpsum.getInstance().getWords(5); - private final GrpcOrganisationsEinheitSearchResponse grpcOrganisationsEinheitSearchResponse = GrpcOrganisationsEinheitSearchResponseTestFactory - .create(); - - @BeforeEach - void setUpMocks() { - when(serviceStub.search(argThat(requestContainsSearchBy()))).thenReturn(grpcOrganisationsEinheitSearchResponse); - } - - @Test - void shouldCallGrpcStub() { - callService(); - - verify(serviceStub).search(argThat(requestContainsSearchBy())); - } - - @Test - void shouldCallMapper() { - callService().toList(); - - verify(organisationsEinheitHeaderMapper).fromGrpc(GrpcOrganisationsEinheitSearchResponseTestFactory.ORGANISATIONS_EINHEIT); - } - - @Test - void shouldReturnMappedOrganisationsEinheitHeader() { - var organisationsEinheitHeader = OrganisationsEinheitHeaderTestFactory.create(); - when(organisationsEinheitHeaderMapper.fromGrpc(GrpcOrganisationsEinheitSearchResponseTestFactory.ORGANISATIONS_EINHEIT)).thenReturn( - organisationsEinheitHeader); - - var organisationsEinheitHeaders = callService(); - - assertThat(organisationsEinheitHeaders).containsExactly(organisationsEinheitHeader); - } - - private Stream<OrganisationsEinheitHeader> callService() { - return service.search(searchBy); - } - - private ArgumentMatcher<GrpcOrganisationsEinheitSearchRequest> requestContainsSearchBy() { - return request -> request.getSearchBy().equals(searchBy); - } - } - - @Nested - class TestGetById { - - private final GrpcOrganisationsEinheitGetRequest request = GrpcOrganisationsEinheitGetRequestTestFactory.create(); - private final GrpcOrganisationsEinheitGetResponse response = GrpcOrganisationsEinheitGetResponseTestFactory.create(); - private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create(); - - @BeforeEach - void setUp() { - doReturn(request).when(service).buildGetByIdRequest(OrganisationsEinheitTestFactory.ID); - when(serviceStub.getById(request)).thenReturn(response); - doReturn(organisationsEinheit).when(service).getOrganisationsEinheitFromGetByIdResponse(response); - } - - @Test - void shouldBuildRequest() { - callService(); - - verify(service).buildGetByIdRequest(OrganisationsEinheitTestFactory.ID); - } - - @Test - void shouldCallGrpcStub() { - callService(); - - verify(serviceStub).getById(request); - } - - @Test - void shouldBuildResponse() { - callService(); - - verify(service).getOrganisationsEinheitFromGetByIdResponse(response); - } - - @Test - void shouldReturnOrganisationsEinheit() { - var get = service.getById(OrganisationsEinheitTestFactory.ID); - - assertThat(get).isEqualTo(organisationsEinheit); - } - - private OrganisationsEinheit callService() { - return service.getById(OrganisationsEinheitTestFactory.ID); - } - } - - @Nested - class TestBuildGetByIdRequest { - - @Test - void shouldHaveId() { - var request = service.buildGetByIdRequest(OrganisationsEinheitTestFactory.ID); - - assertThat(request.getId()).isEqualTo(OrganisationsEinheitTestFactory.ID); - } - } - - @Nested - class TestGetOrganisationsEinheitFromGetByIdResponse { - - private final GrpcOrganisationsEinheitGetResponse response = GrpcOrganisationsEinheitGetResponseTestFactory.create(); - private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create(); - - @BeforeEach - void setUp() { - when(organisationsEinheitMapper.fromGrpc(response.getOrganisationsEinheit())).thenReturn(organisationsEinheit); - } - - @Test - void shouldCallMapper() { - callService(); - - verify(organisationsEinheitMapper).fromGrpc(response.getOrganisationsEinheit()); - } - - @Test - void shouldReturnOrgnisationsEinheit() { - var built = callService(); - - assertThat(built).isEqualTo(organisationsEinheit); - } - - private OrganisationsEinheit callService() { - return service.getOrganisationsEinheitFromGetByIdResponse(response); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitServiceTest.java deleted file mode 100644 index 6a694193fccafa0bc05ff5d0cd8e7842f51fab1b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitServiceTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.thedeanda.lorem.LoremIpsum; - -class OrganisationsEinheitServiceTest { - - @InjectMocks - private OrganisationsEinheitService service; - - @Mock - private OrganisationsEinheitRemoteService remoteService; - - @Nested - class TestGetById { - - @Test - void shouldCallRemoteService() { - service.getById(OrganisationsEinheitTestFactory.ID); - - verify(remoteService).getById(OrganisationsEinheitTestFactory.ID); - } - - @Test - void shouldReturnOrganisationsEinheit() { - var organisationsEinheit = OrganisationsEinheitTestFactory.create(); - when(remoteService.getById(OrganisationsEinheitTestFactory.ID)).thenReturn(organisationsEinheit); - - var returnedOrganisationsEinheit = service.getById(OrganisationsEinheitTestFactory.ID); - - assertThat(returnedOrganisationsEinheit).isEqualTo(organisationsEinheit); - } - } - - @Nested - class TestSearchOrganisationsEinheiten { - - private final String searchBy = LoremIpsum.getInstance().getWords(5); - - @Test - void shouldCallRemoteService() { - callService(); - - verify(remoteService).search(searchBy); - } - - @Test - void shouldReturnOrganisationsEinheiten() { - var organisationsEinheitHeader = OrganisationsEinheitHeaderTestFactory.create(); - when(remoteService.search(searchBy)).thenReturn(Stream.of(organisationsEinheitHeader)); - - var organisationsEinheitHeaders = callService(); - - assertThat(organisationsEinheitHeaders).containsExactly(organisationsEinheitHeader); - } - - private Stream<OrganisationsEinheitHeader> callService() { - return service.searchOrganisationsEinheiten(searchBy); - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitTestFactory.java deleted file mode 100644 index 89d8fd9e1f0ffad09f85ab9f929363c5a1c56b52..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitTestFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.collaboration.OrganisationsEinheit.OrganisationsEinheitBuilder; - -public class OrganisationsEinheitTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final XzufiId XZUFI_ID = XzufiIdTestFactory.create(); - public static final String NAME = LoremIpsum.getInstance().getName(); - public static final Anschrift ANSCHRIFT = AnschriftTestFactory.create(); - - public static OrganisationsEinheit create() { - return createBuilder().build(); - } - - public static OrganisationsEinheitBuilder createBuilder() { - return OrganisationsEinheit.builder() - .id(ID) - .xzufiId(XZUFI_ID) - .name(NAME) - .anschrift(ANSCHRIFT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/XzufiIdTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/XzufiIdTestFactory.java deleted file mode 100644 index 87fe2248234e2022290da4b4164d38a15af49264..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/XzufiIdTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.collaboration; - -public class XzufiIdTestFactory { - - public static final String ID = GrpcXzufiIdTestFactory.ORGANISATIONS_EINHEIT_ID; - public static final String SCHEME_AGENCY_ID = GrpcXzufiIdTestFactory.SCHEME_AGENCY_ID; - - public static XzufiId create() { - return createBuilder().build(); - } - - public static XzufiId.XzufiIdBuilder createBuilder() { - return XzufiId.builder() - .id(ID) - .schemeAgencyId(SCHEME_AGENCY_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/AlfaTestUtils.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/AlfaTestUtils.java deleted file mode 100644 index 7326b5ee707dac12af5a7af707145436e92d0cdf..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/AlfaTestUtils.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common; - -import static org.mockito.Mockito.*; - -import java.nio.charset.StandardCharsets; -import java.util.HexFormat; -import java.util.List; -import java.util.function.Consumer; -import java.util.stream.Stream; - -import org.apache.commons.lang3.RandomStringUtils; - -public class AlfaTestUtils { - - public static final String UUID_REGEX = "[0-9a-f]{8,8}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{12,12}"; - - public static String uuidRegexWithSuffix(String suffix) { - return String.format("^%s%s$", UUID_REGEX, suffix); - } - - public static <T> void mockStreamToList(List<T> list, Consumer<Stream<T>> mock) { - var mockStream = mock(Stream.class); - when(mockStream.toList()).thenReturn(list); - mock.accept(mockStream); - } - - public static String createMongoDbObjectId() { - return HexFormat.of().formatHex(RandomStringUtils.randomAlphanumeric(24).getBytes(StandardCharsets.UTF_8)); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java deleted file mode 100644 index 53e3d279b9ee0174a865852293ec9eb5a7daf849..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; - -class CollectionModelBuilderTest { - - private final String HREF = "http://test"; - private final String REL = "rel"; - - @Nested - class TestBuildModel { - - @Test - void shouldBuildModel() { - var vorgang = VorgangHeaderTestFactory.create(); - - var model = CollectionModelBuilder.fromEntities(List.of(vorgang)).buildModel(); - - assertThat(model.getContent()).hasSize(1).first().usingRecursiveComparison().isEqualTo(vorgang); - } - } - - @Nested - class TestAddLink { - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - } - - @Nested - class TestIfMatch { - - @Nested - class TestWithBooleanSupplier { - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - - @Nested - class TestWithPredicate { - - private final Stream<Wiedervorlage> wiedervorlageStream = Stream.of(WiedervorlageTestFactory.create()); - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(wiedervorlageStream) - .ifMatch(wiedervorlagen -> true) - .addLink(Link.of(HREF, REL)) - .buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(wiedervorlageStream) - .ifMatch(wiedervorlagen -> false) - .addLink(Link.of(HREF, REL)) - .buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - - @Nested - class TestWithLinkSupplier { - - @Mock - private Supplier<Link> linkSupplier; - - @Test - void shouldAddLink() { - when(linkSupplier.get()).thenReturn(Link.of(HREF, REL)); - - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(linkSupplier).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotCallLinkSupplier() { - CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(linkSupplier).buildModel(); - - verify(linkSupplier, never()).get(); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(linkSupplier).buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/EntityModelTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/EntityModelTestFactory.java deleted file mode 100644 index 629a8f7c6e8ee5df2c89ee3d3715c59f4eeb773a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/EntityModelTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common; - -import org.springframework.hateoas.EntityModel; - -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import lombok.NoArgsConstructor; - -public class EntityModelTestFactory { - - public static final NullableEntityModel NULLABLE = createNullable(); - - private static NullableEntityModel createNullable() { - return new NullableEntityModel(); - } - - @NoArgsConstructor - private static class NullableEntityModel extends EntityModel<VorgangWithEingang> { - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/GermanDateTimeFormatterTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/GermanDateTimeFormatterTest.java deleted file mode 100644 index 8eac830c5872722d97eb6a85bd5d5a7959e04bf0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/GermanDateTimeFormatterTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.stream.Stream; - -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class GermanDateTimeFormatterTest { - - @Mock - private SystemProperties properties; - - @InjectMocks - private GermanDateTimeFormatter germanDateTimeFormatter; - - @ParameterizedTest - @MethodSource("provideDataForFormatZonedDateTime") - void shouldFormatZonedDateTime(ZonedDateTime date, String zoneId, String expected) { - when(properties.getTimeZone()).thenReturn(ZoneId.of(zoneId)); - - assertThat(germanDateTimeFormatter.formatZonedDateTime(date)).isEqualTo(expected); - } - - private static Stream<Arguments> provideDataForFormatZonedDateTime() { - return Stream.of( - Arguments.of(zonedDateTime(2023, 9, 25, 10, "UTC"), "Europe/Berlin", "25.09.2023 12:00:00 MESZ"), - Arguments.of(zonedDateTime(2023, 9, 25, 23, "UTC"), "Europe/Berlin", "26.09.2023 01:00:00 MESZ"), - Arguments.of(zonedDateTime(2023, 12, 1, 10, "UTC"), "Europe/Berlin", "01.12.2023 11:00:00 MEZ"), - Arguments.of(zonedDateTime(2023, 9, 25, 10, "UTC"), "America/Los_Angeles", "25.09.2023 03:00:00 PDT"), - Arguments.of(zonedDateTime(2023, 9, 25, 4, "UTC"), "America/Los_Angeles", "24.09.2023 21:00:00 PDT"), - Arguments.of(zonedDateTime(2023, 12, 1, 10, "UTC"), "America/Los_Angeles", "01.12.2023 02:00:00 PST"), - Arguments.of(zonedDateTime(2023, 12, 1, 10, "America/Los_Angeles"), "Europe/Berlin", "01.12.2023 19:00:00 MEZ") - ); - } - - private static ZonedDateTime zonedDateTime(int year, int month, int dayOfMonth, int hour, String zoneID) { - return ZonedDateTime.of(year, month, dayOfMonth, hour, 0, 0, 0, ZoneId.of(zoneID)); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/GrpcCallContextTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/GrpcCallContextTestFactory.java deleted file mode 100644 index 85a3c0f3ed309df0f5e6c72d1d0ef4cb45c401a7..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/GrpcCallContextTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import de.ozgcloud.alfa.common.user.GrpcUserTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -public class GrpcCallContextTestFactory { - - private static final GrpcUser USER = GrpcUserTestFactory.create(); - public static final String CLIENT = "testClient"; - - public static GrpcCallContext create() { - return createBuilder().build(); - } - - public static GrpcCallContext.Builder createBuilder() { - return GrpcCallContext.newBuilder() - .setUser(USER) - .setClient(CLIENT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/IdBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/IdBuilderTest.java deleted file mode 100644 index ce0be5b469196317dde1c56e26841007d1b6957f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/IdBuilderTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.BeanProperty; - -class IdBuilderTest { - - @DisplayName("Test building ID when deserializing linked resources") - @Nested - class TestBuilingId { - private static final String ID = "id"; - - @Test - void shouldBuildId() { - IdBuilder idBuilder = new IdBuilder(); - - var idObject = idBuilder.build(ID); - - assertThat(idObject).isInstanceOf(Object.class).asString().isEqualTo(ID); - } - - @Test - void shouldCreateObjectBuilder() { - BeanProperty property = mock(BeanProperty.class); - ObjectBuilder<Object> idBuilder = new IdBuilder().constructContextAware(property); - - assertThat(idBuilder).isNotNull(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceDeserializerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceDeserializerTest.java deleted file mode 100644 index 50573d6a3ac82923b9e8109be492e0cd746353d8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceDeserializerTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; - -import java.io.IOException; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.exc.StreamReadException; -import com.fasterxml.jackson.databind.DatabindException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -class LinkedResourceDeserializerTest { - private static final String TEST_JSON = "{\"id\":\"/api/vorgangs/" + UserProfileTestFactory.ID.toString() + "\"}"; - - @DisplayName("Test the deserilization of linked resource json") - @Nested - class TestDeserialization { - @Test - void shouldDeserialize() throws StreamReadException, DatabindException, IOException { - LinkedResourceTestObject res = new ObjectMapper().readValue(TEST_JSON.getBytes(), LinkedResourceTestObject.class); - - assertThat(res).hasFieldOrPropertyWithValue("id", UserProfileTestFactory.ID); - } - - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceSerializerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceSerializerTest.java deleted file mode 100644 index 3d59d4ca1fa69916e0fba547415e4a17297b30bd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceSerializerTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -class LinkedResourceSerializerTest { - - @DisplayName("Test the json serialization of linked resource annotations") - @Nested - class TestSerialization { - @Test - void shouldSerialize() throws JsonProcessingException { - var testObj = new LinkedResourceTestObject(UserProfileTestFactory.ID); - - String serialized = new ObjectMapper().writeValueAsString(testObj); - - assertThat(serialized).isEqualTo("{\"id\":\"/api/vorgangs/" + UserProfileTestFactory.ID.toString() + "\"}"); - } - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceTestObject.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceTestObject.java deleted file mode 100644 index 3c2e2ba16cbcedf8d92e79a4d40283e7c32d7c91..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceTestObject.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.VorgangController; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@AllArgsConstructor -@NoArgsConstructor -class LinkedResourceTestObject { - @LinkedResource(controllerClass = VorgangController.class) - private UserId id; -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceDeserializerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceDeserializerTest.java deleted file mode 100644 index 2286b4330b077224520fd3d0f0fdfc156d786af9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceDeserializerTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; - -import java.io.IOException; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.exc.StreamReadException; -import com.fasterxml.jackson.databind.DatabindException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -class LinkedUserProfileResourceDeserializerTest { - private static final String TEST_JSON = "{\"id\":\"http://localhost/api/profile/" + UserProfileTestFactory.ID.toString() + "\"}"; - - @DisplayName("Test the deserilization of linked resource json") - @Nested - class TestDeserialization { - @Test - void shouldDeserialize() throws StreamReadException, DatabindException, IOException { - LinkedUserProfileResourceTestObject res = new ObjectMapper().readValue(TEST_JSON.getBytes(), LinkedUserProfileResourceTestObject.class); - - assertThat(res).hasFieldOrPropertyWithValue("id", UserProfileTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java deleted file mode 100644 index 6a7ebb175d136027b76138fa4d0c6aea6544108c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.context.ApplicationContext; -import org.springframework.core.env.Environment; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -class LinkedUserProfileResourceSerializerTest { - @DisplayName("Test the json serilization of linked user profile resource annotations") - @Nested - class TestSerialization { - private static final String HTTP_LOCALHOST = "http://localhost/"; - private static final String API_TEMPLATE = "api/profile/%s"; - private static final String API_PATH = "api/profile/"; - - private UserProfileUrlProvider provider = new UserProfileUrlProvider(); - - @Mock - private ApplicationContext context; - @Mock - private Environment env; - - @Test - void shouldSerialize() throws JsonProcessingException { - when(env.getProperty(UserProfileUrlProvider.URL_ROOT_KEY)).thenReturn(HTTP_LOCALHOST); - when(env.getProperty(UserProfileUrlProvider.USER_PROFILES_TEMPLATE_KEY)).thenReturn(API_TEMPLATE); - when(context.getEnvironment()).thenReturn(env); - provider.setApplicationContext(context); - - var testObj = new LinkedUserProfileResourceTestObject(UserProfileTestFactory.ID); - - String serialized = new ObjectMapper().writeValueAsString(testObj); - - assertThat(serialized).isEqualTo("{\"id\":\"" + HTTP_LOCALHOST + API_PATH + UserProfileTestFactory.ID.toString() + "\"}"); - } - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceTestObject.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceTestObject.java deleted file mode 100644 index b8163f1cdacacc3e8723d9fd6f1fec3035af163c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceTestObject.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import de.ozgcloud.alfa.common.user.UserId; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@AllArgsConstructor -@NoArgsConstructor -class LinkedUserProfileResourceTestObject { - @LinkedUserProfileResource - private UserId id; -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/ModelBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/ModelBuilderTest.java deleted file mode 100644 index 8b32ab174485e75e66ed4d3ad7a84bd2aacd77dc..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/ModelBuilderTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.Mock; -import org.springframework.context.ApplicationContext; -import org.springframework.core.env.Environment; -import org.springframework.web.bind.annotation.RequestMapping; - -import lombok.Builder; - -class ModelBuilderTest { - - @DisplayName("Add link by annotation if missing") - @Nested - class TestAddLinkByAnnotationIfMissing { - - private static final String USER_MANAGER_URL = "http://localhost"; - private static final String USER_MANAGER_PROFILE_TEMPLATE = "/api/profile/%s"; - - private UserProfileUrlProvider provider = new UserProfileUrlProvider(); - - @Mock - private ApplicationContext context; - @Mock - private Environment env; - - private TestEntity entity = TestEntityTestFactory.create(); - - @BeforeEach - void mockEnvironment() { - when(env.getProperty(UserProfileUrlProvider.URL_ROOT_KEY)).thenReturn(USER_MANAGER_URL); - when(env.getProperty(UserProfileUrlProvider.USER_PROFILES_TEMPLATE_KEY)).thenReturn(USER_MANAGER_PROFILE_TEMPLATE); - when(context.getEnvironment()).thenReturn(env); - - provider.setApplicationContext(context); - } - - @Test - void shouldHaveAddLinkByLinkedResource() { - var model = ModelBuilder.fromEntity(entity).buildModel(); - - assertThat(model.getLink(TestController.FILE_REL).get().getHref()).isEqualTo(TestController.PATH + "/" + TestEntityTestFactory.FILE); - } - - @Test - void shouldHaveAddLinkByLinkedUserProfileResource() { - var model = ModelBuilder.fromEntity(entity).buildModel(); - - assertThat(model.getLink(TestController.USER_REL).get().getHref()) - .isEqualTo(String.format(USER_MANAGER_URL + USER_MANAGER_PROFILE_TEMPLATE, TestEntityTestFactory.USER)); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldNotAddLinkByLinkedRessourceIfFieldValueIsNotSet(String fileId) { - var model = ModelBuilder.fromEntity(TestEntityTestFactory.createBuilder().file(fileId).build()).buildModel(); - - assertThat(model.getLink(TestController.FILE_REL)).isEmpty(); - } - } - - @DisplayName("if usermanager is not configured") - @Nested - class TestNotAddLinkByAnnotationIfNotConfigured { - - private UserProfileUrlProvider provider = new UserProfileUrlProvider(); - - @Mock - private ApplicationContext context; - @Mock - private Environment env; - - private TestEntity entity = TestEntityTestFactory.create(); - - @BeforeEach - void mockEnvironment() { - when(env.getProperty(UserProfileUrlProvider.URL_ROOT_KEY)).thenReturn(null); - when(context.getEnvironment()).thenReturn(env); - - provider.setApplicationContext(context); - } - - @Test - void shouldHaveAddLinkByLinkedResource() { - var model = ModelBuilder.fromEntity(entity).buildModel(); - - assertThat(model.getLink(TestController.FILE_REL).get().getHref()).isEqualTo(TestController.PATH + "/" + TestEntityTestFactory.FILE); - } - - @Test - void shouldNotHaveLinkAddByLinkedUserProfileAnnotation() { - var model = ModelBuilder.fromEntity(entity).buildModel(); - - assertThat(model.getLink(TestController.USER_REL)).isNotPresent(); - } - } -} - -@Builder -class TestEntity { - - @LinkedResource(controllerClass = TestController.class) - private String file; - - @LinkedUserProfileResource - private String user; -} - -@RequestMapping(TestController.PATH) -class TestController { - - static final String PATH = "/api/test"; - - static final String USER_REL = "user"; - static final String FILE_REL = "file"; - -} - -class TestEntityTestFactory { - - static final String USER = UUID.randomUUID().toString(); - static final String FILE = UUID.randomUUID().toString(); - - public static TestEntity create() { - return createBuilder().build(); - } - - public static TestEntity.TestEntityBuilder createBuilder() { - return TestEntity.builder() - .file(FILE) - .user(USER); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/RegexUtilTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/RegexUtilTest.java deleted file mode 100644 index 79df691492a1d11022b8d4ee8d7b01ceade36188..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/RegexUtilTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.assertj.core.api.Assertions.*; - -import java.util.regex.Pattern; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -public class RegexUtilTest { - - @Nested - class TestValidationEMail { - - private final String REGEX = RegexUtil.VALIDATION_EMAIL; - - @Nested - class TestEmailAt { - - @Test - void shouldMatchOnOneAtChar() { - shouldMatch("localpart@domain.com"); - } - - @Test - void shouldNotMatchOnNoneAtChar() { - shouldNotMatch("localpartdomain.com"); - } - - @Test - void shouldNotMatchOnMultipleAtChar() { - shouldNotMatch("localpart@@domain.com"); - } - } - - @Nested - class TestDomain { - - @Nested - class TestDomainDot { - - @Test - void shouldMatchOnOneDot() { - shouldMatch("localpart@domain.com"); - } - - @Test - void shouldNotMatchOnNoneDot() { - shouldNotMatch("localpart@domaincom"); - } - - @Test - void shouldMatchOnMultipleDots() { - shouldNotMatch("localpart@domain...com"); - } - } - - @Nested - class TestDomainCharCaseSensitive { - - @Test - void shouldMatchOnLowerCaseChar() { - shouldMatch("localpart@domain.com"); - } - - @Test - void shouldMatchOnUpperCaseChar() { - shouldMatch("localpart@DOMAIN.COM"); - } - } - } - - @Nested - class TestLocalPart { - - @Nested - class TestLocalPartChar { - - @Test - void shouldMatchOnAtLeastOneChar() { - shouldMatch("l@domain.com"); - } - - @Test - void shouldMatchOnNoneChar() { - shouldNotMatch("@domain.com"); - } - } - - @Nested - class TestLocalPartCharCaseSensitive { - - @Test - void shouldAllowUpperCaseChar() { - shouldMatch("UPPER_CHAR@domain.com"); - } - - @Test - void shouldAllowLowerCaseChar() { - shouldMatch("lower_char@domain.com"); - } - } - } - - @Test - void shouldAcceptCharInLocalPart() { - shouldMatch("local-part-1234567890!#$%&'*+/=?^_`{|}~-.'/&%*@domain.com"); - } - - private void shouldMatch(String eMail) { - boolean match = matchPattern(eMail); - - assertThat(match).isTrue(); - } - - private void shouldNotMatch(String eMail) { - boolean match = matchPattern(eMail); - - assertThat(match).isFalse(); - } - - private boolean matchPattern(String eMail) { - return Pattern.matches(REGEX, eMail); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/UserProfileUrlProviderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/UserProfileUrlProviderTestFactory.java deleted file mode 100644 index 9498db2b673db8e3d7e171e35a6c87871913aded..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/UserProfileUrlProviderTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common; - -import static org.mockito.Mockito.*; - -import org.springframework.context.ApplicationContext; -import org.springframework.core.env.Environment; - -public class UserProfileUrlProviderTestFactory { - public static final String ROOT_URL = "https://localhost"; - public static final String USER_PROFILES_API_PATH = "/api/userProfiles/"; - public static final String OZGCLOUD_USER_MANAGER_PROFILE_TEMPLATE = "ozgcloud.user-manager.profile-template"; - public static final String OZGCLOUD_USER_MANAGER_URL = "ozgcloud.user-manager.url"; - - public static void initUserProfileUrlProvider(UserProfileUrlProvider urlProvider) { - ApplicationContext context = mock(ApplicationContext.class); - Environment environment = mock(Environment.class); - when(environment.getProperty(OZGCLOUD_USER_MANAGER_URL)).thenReturn(ROOT_URL); - when(environment.getProperty(OZGCLOUD_USER_MANAGER_PROFILE_TEMPLATE)).thenReturn(USER_PROFILES_API_PATH + "%s"); - when(context.getEnvironment()).thenReturn(environment); - urlProvider.setApplicationContext(context); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcFindVorgangAttachedItemRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcFindVorgangAttachedItemRequestTestFactory.java deleted file mode 100644 index 0305d2841d42a700c86b78e55f8362a5d3a9faef..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcFindVorgangAttachedItemRequestTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; - -public class GrpcFindVorgangAttachedItemRequestTestFactory { - - public static GrpcFindVorgangAttachedItemRequest create() { - return createBuilder().build(); - } - - public static GrpcFindVorgangAttachedItemRequest.Builder createBuilder() { - return GrpcFindVorgangAttachedItemRequest.newBuilder().setVorgangId(VorgangHeaderTestFactory.ID) - .setItemName(VorgangAttachedItemTestFactory.ITEM_NAME); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcFindVorgangAttachedItemResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcFindVorgangAttachedItemResponseTestFactory.java deleted file mode 100644 index e8a9de572fbf9bd9d36cf9638f2b48c80b044cf5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcFindVorgangAttachedItemResponseTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; - -public class GrpcFindVorgangAttachedItemResponseTestFactory { - - public static final GrpcVorgangAttachedItem VORGANG_ATTACHED_ITEM = GrpcVorgangAttachedItemTestFactory.create(); - - public static GrpcFindVorgangAttachedItemResponse create() { - return createBuilder().build(); - } - - public static GrpcFindVorgangAttachedItemResponse.Builder createBuilder() { - return GrpcFindVorgangAttachedItemResponse.newBuilder().addVorgangAttachedItems(VORGANG_ATTACHED_ITEM); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcVorgangAttachedItemRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcVorgangAttachedItemRequestTestFactory.java deleted file mode 100644 index c0962430f51f56513349216c4d802a5346f0530f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcVorgangAttachedItemRequestTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; - -public class GrpcVorgangAttachedItemRequestTestFactory { - - public static GrpcVorgangAttachedItemRequest create() { - return createBuilder().build(); - } - - public static GrpcVorgangAttachedItemRequest.Builder createBuilder() { - return GrpcVorgangAttachedItemRequest.newBuilder().setId(VorgangAttachedItemTestFactory.ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcVorgangAttachedItemResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcVorgangAttachedItemResponseTestFactory.java deleted file mode 100644 index 85bbfabb4136b3b8e9609be7cfbc2e3b74d371d2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/GrpcVorgangAttachedItemResponseTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse; - -public class GrpcVorgangAttachedItemResponseTestFactory { - - public static final GrpcVorgangAttachedItem VORGANG_ATTACHED_ITEM = GrpcVorgangAttachedItemTestFactory.create(); - - public static GrpcVorgangAttachedItemResponse create() { - return createBuilder().build(); - } - - public static GrpcVorgangAttachedItemResponse.Builder createBuilder() { - return GrpcVorgangAttachedItemResponse.newBuilder().setVorgangAttachedItem(VORGANG_ATTACHED_ITEM); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemMapperTest.java deleted file mode 100644 index dc55406935e7f8119244f2a3422b68885d12b1e8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemMapperTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class VorgangAttachedItemMapperTest { - - @InjectMocks - private final VorgangAttachedItemMapper mapper = Mappers.getMapper(VorgangAttachedItemMapper.class); - - @Spy - private final GrpcObjectMapper grpcObjectMapper = Mappers.getMapper(GrpcObjectMapper.class); - - @Nested - @DisplayName("From Grpc") - class TestMapVorgangAttachedItem { - - @Test - void shouldMap() { - var mapped = mapper.fromGrpc(GrpcVorgangAttachedItemTestFactory.create()); - - assertThat(mapped).usingRecursiveComparison().isEqualTo(VorgangAttachedItemTestFactory.create()); - } - - @Test - void shouldCallGrpcObjectMapper() { - var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.create(); - - mapper.fromGrpc(grpcVorgangAttachedItem); - - verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemRemoteServiceTest.java deleted file mode 100644 index 02fb7877fc6bc7c90c8c032e30f55dc342a951a3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemRemoteServiceTest.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; -import io.grpc.Status; -import io.grpc.Status.Code; -import io.grpc.StatusRuntimeException; - -class VorgangAttachedItemRemoteServiceTest { - - @Spy - @InjectMocks - private VorgangAttachedItemRemoteService service; - - @Mock - private VorgangAttachedItemServiceBlockingStub grpcService; - - @Mock - private VorgangAttachedItemMapper mapper; - - @Nested - @DisplayName("FindVorgangAttachedItem") - class TestFindVorgangAttachedItem { - - private final GrpcFindVorgangAttachedItemRequest request = GrpcFindVorgangAttachedItemRequestTestFactory.create(); - private final GrpcFindVorgangAttachedItemResponse response = GrpcFindVorgangAttachedItemResponseTestFactory.create(); - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @Captor - private ArgumentCaptor<GrpcVorgangAttachedItem> grpcVorgangAttachedItemArgumentCaptor; - - @BeforeEach - void init() { - when(grpcService.find(request)).thenReturn(response); - doReturn(request).when(service).buildFindRequest(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME); - } - - @Test - void shouldCallGrpcService() { - service.findVorgangAttachedItem(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME); - - verify(grpcService).find(request); - } - - @Test - void shouldBuildRequest() { - service.findVorgangAttachedItem(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME); - - verify(service).buildFindRequest(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME); - } - - @Test - void shouldMapGrpcResponse() { - service.findVorgangAttachedItem(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME).toList(); - - verify(mapper).fromGrpc(grpcVorgangAttachedItemArgumentCaptor.capture()); - assertThat(grpcVorgangAttachedItemArgumentCaptor.getAllValues()) - .containsExactly(GrpcFindVorgangAttachedItemResponseTestFactory.VORGANG_ATTACHED_ITEM); - } - - @Test - void shouldReturnResult() { - when(mapper.fromGrpc(any())).thenReturn(vorgangAttachedItem); - - var result = service.findVorgangAttachedItem(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME); - - assertThat(result).hasSize(1).containsExactly(vorgangAttachedItem); - } - } - - @Nested - @DisplayName("Build find vorgang attached item gRPC request") - class TestBuildFindRequest { - - @Test - void shouldBuild() { - var request = service.buildFindRequest(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.ITEM_NAME); - - assertThat(request.getItemName()).isEqualTo(VorgangAttachedItemTestFactory.ITEM_NAME); - assertThat(request.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - } - - @Nested - @DisplayName("Build get by id gRPC request") - class TestBuildGetByIdRequest { - - @Test - void shouldBuild() { - var request = service.buildGetByIdRequest(VorgangAttachedItemTestFactory.ID); - - assertThat(request.getId()).isEqualTo(VorgangAttachedItemTestFactory.ID); - } - - } - - @DisplayName("Get by id") - @Nested - class TestGetById { - - private final GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponseTestFactory.create(); - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @BeforeEach - void init() { - when(mapper.fromGrpc(any())).thenReturn(vorgangAttachedItem); - doReturn(response).when(service).doGetById(any()); - } - - @Test - void shouldDoGetById() { - service.getById(VorgangAttachedItemTestFactory.ID); - - verify(service).doGetById(VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldMapResponse() { - service.getById(VorgangAttachedItemTestFactory.ID); - - verify(mapper).fromGrpc(response.getVorgangAttachedItem()); - } - - @Test - void shouldReturnResult() { - var result = service.getById(VorgangAttachedItemTestFactory.ID); - - assertThat(result).isEqualTo(vorgangAttachedItem); - } - } - - @DisplayName("Do get by id") - @Nested - class TestDoGetById { - - @Test - void shouldBuildRequest() { - service.doGetById(VorgangAttachedItemTestFactory.ID); - - verify(service).buildGetByIdRequest(VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldCallGrpcService() { - var request = GrpcVorgangAttachedItemRequestTestFactory.create(); - - service.doGetById(VorgangAttachedItemTestFactory.ID); - - verify(grpcService).getById(request); - } - - @DisplayName("on grpc exception") - @Nested - class TestOnGrpcException { - - @DisplayName("not found") - @Nested - class TestNotFound { - - @Test - void shouldThrowResourceNotFoundException() { - var statusRuntimeException = new StatusRuntimeException(Status.NOT_FOUND); - - when(grpcService.getById(any())).thenThrow(statusRuntimeException); - - assertThatThrownBy(() -> service.doGetById(VorgangAttachedItemTestFactory.ID)).isInstanceOf(ResourceNotFoundException.class); - } - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NOT_FOUND" }) - void shouldThrowException(Code code) { - var statusRuntimeException = new StatusRuntimeException(code.toStatus()); - - when(grpcService.getById(any())).thenThrow(statusRuntimeException); - - assertThatThrownBy(() -> service.doGetById(VorgangAttachedItemTestFactory.ID)).isInstanceOf(StatusRuntimeException.class); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemServiceTest.java deleted file mode 100644 index 53ec1753dc06969a552ace5cb82c40a62d9e82b1..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemServiceTest.java +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.callcontext.CallContextTestFactory; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandBodyMapper; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.kommentar.Kommentar; -import de.ozgcloud.alfa.kommentar.KommentarTestFactory; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderung; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderungTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; - -class VorgangAttachedItemServiceTest { - - @Spy - @InjectMocks - private VorgangAttachedItemService service; - @Mock - private CommandBodyMapper commandBodyMapper; - @Mock - private CommandService commandService; - @Mock - private VorgangAttachedItemRemoteService vorgangAttachedItemRemoteService; - - @Mock - private ContextService contextService; - - @DisplayName("Create new wiedervorlage") - @Nested - class TestCreateNewWiedervorlage { - - private Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create(); - - @BeforeEach - void mockServices() { - doReturn(VorgangAttachedItemTestFactory.create()).when(service).buildVorgangAttachedItem(any(), any(), any()); - doReturn(CommandTestFactory.createCreateCommand()).when(service).buildCreateCommand(any(), any()); - } - - @Test - void shouldBuildVorgangAttachedItem() { - callCreateNewWiedervorlage(); - - verify(service).buildVorgangAttachedItem(wiedervorlage, VorgangHeaderTestFactory.ID, VorgangAttachedItemService.WIEDERVORLAGE_ITEM_NAME); - } - - @Test - void shouldBuildCreateCommand() { - callCreateNewWiedervorlage(); - - verify(service).buildCreateCommand(eq(VorgangHeaderTestFactory.ID), any(VorgangAttachedItem.class)); - } - - @Test - void shouldCallCommandService() { - callCreateNewWiedervorlage(); - - verify(commandService).createCommandDeprecated(any(CreateCommand.class)); - } - - private Command callCreateNewWiedervorlage() { - return service.createNewWiedervorlage(wiedervorlage, VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Edit wiedervorlage") - @Nested - class TestEditWiedervorlage { - - private Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create(); - - @BeforeEach - void mockService() { - doReturn(VorgangAttachedItemTestFactory.create()).when(service).buildVorgangAttachedItem(any(), any(), any()); - doReturn(CommandTestFactory.createCreateCommand()).when(service).buildUpdateCommand(any(), any(), any()); - } - - @Test - void shouldBuildVorgangAttachedItem() { - callEditWiedervorlage(); - - verify(service).buildVorgangAttachedItem(wiedervorlage, VorgangHeaderTestFactory.ID, VorgangAttachedItemService.WIEDERVORLAGE_ITEM_NAME); - } - - @Test - void shouldBuildCreateCommand() { - callEditWiedervorlage(); - - verify(service).buildUpdateCommand(eq(VorgangHeaderTestFactory.ID), eq(WiedervorlageTestFactory.ID), any(VorgangAttachedItem.class)); - } - - @Test - void shouldCallCommandService() { - callEditWiedervorlage(); - - verify(commandService).createCommand(any(CreateCommand.class), eq(WiedervorlageTestFactory.VERSION)); - } - - private Command callEditWiedervorlage() { - return service.editWiedervorlage(wiedervorlage, wiedervorlage.getId(), wiedervorlage.getVersion()); - } - } - - @Nested - class TestWiedervorlageDone { - private Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create(); - - @Test - void shouldCallCommandService() { - callSetWiedervorlageDone(true); - - verify(commandService).createCommand(any(CreateCommand.class), eq(WiedervorlageTestFactory.VERSION)); - } - - @Test - void shouldSetItemName() { - var command = service.createPatchCommand(WiedervorlageTestFactory.create(), false); - - assertThat(((VorgangAttachedItem) command.getBody()).getItemName()).isEqualTo(Wiedervorlage.class.getSimpleName()); - } - - @Test - void shouldSetItem() { - var command = service.createPatchCommand(WiedervorlageTestFactory.create(), false); - - assertThat(((VorgangAttachedItem) command.getBody()).getItem()).isNotEmpty(); - } - - @Test - void shouldSetItemDoneValue() { - var command = service.createPatchCommand(WiedervorlageTestFactory.create(), true); - - var attachedItem = ((VorgangAttachedItem) command.getBody()).getItem(); - assertThat(attachedItem).containsKey("done"); - assertThat(attachedItem.get("done")).isEqualTo(Boolean.TRUE); - } - - private Command callSetWiedervorlageDone(boolean done) { - return service.setWiedervorlageDone(wiedervorlage, done); - } - - } - - @DisplayName("Create new kommentar") - @Nested - class TestCreateNewKommentar { - - private Kommentar kommentar = KommentarTestFactory.create(); - - @BeforeEach - void mockServices() { - doReturn(VorgangAttachedItemTestFactory.create()).when(service).buildVorgangAttachedItem(any(), any(), any()); - doReturn(CommandTestFactory.createCreateCommand()).when(service).buildCreateCommand(any(), any()); - } - - @Test - void shouldBuildVorgangAttachedItem() { - callCreateNewKommentar(); - - verify(service).buildVorgangAttachedItem(kommentar, VorgangHeaderTestFactory.ID, VorgangAttachedItemService.KOMMENTAR_ITEM_NAME); - } - - @Test - void shouldBuildCreateCommand() { - callCreateNewKommentar(); - - verify(service).buildCreateCommand(eq(VorgangHeaderTestFactory.ID), any(VorgangAttachedItem.class)); - } - - @Test - void shouldCallCommandService() { - callCreateNewKommentar(); - - verify(commandService).createCommandDeprecated(any(CreateCommand.class)); - } - - private Command callCreateNewKommentar() { - return service.createNewKommentar(kommentar, VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Edit kommentar") - @Nested - class TestEditKommentar { - - private Kommentar kommentar = KommentarTestFactory.create(); - - @BeforeEach - void mockService() { - doReturn(VorgangAttachedItemTestFactory.create()).when(service).buildVorgangAttachedItem(any(), any(), any()); - doReturn(CommandTestFactory.createCreateCommand()).when(service).buildUpdateCommand(any(), any(), any()); - } - - @Test - void shouldBuildVorgangAttachedItem() { - callEditKommentar(); - - verify(service).buildVorgangAttachedItem(kommentar, VorgangHeaderTestFactory.ID, VorgangAttachedItemService.KOMMENTAR_ITEM_NAME); - } - - @Test - void shouldBuildCreateCommand() { - callEditKommentar(); - - verify(service).buildUpdateCommand(eq(VorgangHeaderTestFactory.ID), eq(KommentarTestFactory.ID), any(VorgangAttachedItem.class)); - } - - @Test - void shouldCallCommandService() { - callEditKommentar(); - - verify(commandService).createCommand(any(CreateCommand.class), eq(KommentarTestFactory.VERSION)); - } - - private Command callEditKommentar() { - return service.editKommentar(kommentar, KommentarTestFactory.ID, KommentarTestFactory.VERSION); - } - } - - @DisplayName("build vorgang attached item") - @Nested - class TestBuildVorgangAttachedItem { - - private static final Wiedervorlage BODY = WiedervorlageTestFactory.create(); - - @BeforeEach - void mockServices() { - when(commandBodyMapper.fromObjectToMap(any())).thenReturn(VorgangAttachedItemTestFactory.ITEM); - when(contextService.getClientName()).thenReturn(CallContextTestFactory.CLIENT_NAME); - } - - @Test - void shouldCallCommandBodyMapper() { - buildVorgangAttachedItem(); - - verify(commandBodyMapper).fromObjectToMap(BODY); - } - - @Test - void shouldContainsVorgangId() { - var vorgangAttachedItem = buildVorgangAttachedItem(); - - assertThat(vorgangAttachedItem.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldContainsItemName() { - var vorgangAttachedItem = buildVorgangAttachedItem(); - - assertThat(vorgangAttachedItem.getItemName()).isEqualTo(VorgangAttachedItemService.WIEDERVORLAGE_ITEM_NAME); - } - - @Test - void shouldContainsItem() { - var vorgangAttachedItem = buildVorgangAttachedItem(); - - assertThat(vorgangAttachedItem.getItem()).isEqualTo(VorgangAttachedItemTestFactory.ITEM); - } - - @Test - void shouldContainsClientName() { - var vorgangAttachedItem = buildVorgangAttachedItem(); - - assertThat(vorgangAttachedItem.getClient()).isEqualTo(CallContextTestFactory.CLIENT_NAME); - } - - private VorgangAttachedItem buildVorgangAttachedItem() { - return service.buildVorgangAttachedItem(BODY, VorgangHeaderTestFactory.ID, - VorgangAttachedItemService.WIEDERVORLAGE_ITEM_NAME); - } - } - - @DisplayName("build createCommand") - @Nested - class TestBuildCreateCommand { - - @Test - void shouldContainsVorgangId() throws Exception { - var createCommand = buildCommand(); - - assertThat(createCommand.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldContainsRelationId() throws Exception { - var createCommand = buildCommand(); - - assertThat(createCommand.getRelationId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldContainsOrder() throws Exception { - var createCommand = buildCommand(); - - assertThat(createCommand.getCommandOrder()).isEqualTo(CommandOrder.CREATE_ATTACHED_ITEM); - } - - @Test - void shouldContainsBody() throws Exception { - var createCommand = buildCommand(); - - assertThat(((VorgangAttachedItem) createCommand.getBody())).usingRecursiveComparison() - .isEqualTo(VorgangAttachedItemTestFactory.create()); - } - - private CreateCommand buildCommand() { - return service.buildCreateCommand(VorgangHeaderTestFactory.ID, VorgangAttachedItemTestFactory.create()); - } - } - - @Nested - class TestCreateNewLoeschAnforderung { - - private final LoeschAnforderung itemBody = LoeschAnforderungTestFactory.create(); - private final CreateCommand createCommand = CommandTestFactory.createCreateCommand(); - private final Command command = CommandTestFactory.create(); - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @BeforeEach - void init() { - doReturn(vorgangAttachedItem).when(service) - .buildVorgangAttachedItem(itemBody, VorgangHeaderTestFactory.ID, VorgangAttachedItemService.LOESCH_ANFORDERUNG_ITEM_NAME); - doReturn(createCommand).when(service).buildCreateCommand(VorgangHeaderTestFactory.ID, vorgangAttachedItem); - when(commandService.createCommandDeprecated(createCommand)).thenReturn(command); - } - - @Test - void shouldBuildVorgangAttachedItem() { - callCreateVorgangAttachedItem(); - - verify(service).buildVorgangAttachedItem(itemBody, VorgangHeaderTestFactory.ID, VorgangAttachedItemService.LOESCH_ANFORDERUNG_ITEM_NAME); - } - - @Test - void shouldBuildCreateCommand() { - callCreateVorgangAttachedItem(); - - verify(service).buildCreateCommand(VorgangHeaderTestFactory.ID, vorgangAttachedItem); - } - - @Test - void shouldCallCommandService() { - callCreateVorgangAttachedItem(); - - verify(commandService).createCommandDeprecated(createCommand); - } - - @Test - void shouldReturnCommand() { - var result = callCreateVorgangAttachedItem(); - - assertThat(result).isEqualTo(command); - } - - private Command callCreateVorgangAttachedItem() { - return service.createNewLoeschAnforderung(itemBody, VorgangHeaderTestFactory.ID); - } - - } - - @Nested - @DisplayName("GetById") - class TestGetById { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @Test - void shouldCallRemoteService() { - service.getById(VorgangAttachedItemTestFactory.ID); - - verify(vorgangAttachedItemRemoteService).getById(VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldReturnResult() { - doReturn(vorgangAttachedItem).when(service).getById(VorgangAttachedItemTestFactory.ID); - - var result = service.getById(VorgangAttachedItemTestFactory.ID); - - assertThat(result).isEqualTo(vorgangAttachedItem); - } - } - - @Nested - class TestIsLoeschAnforderung { - - @Test - void shouldReturnTrue() { - var isLoeschAnforderung = service.isLoeschAnforderung(VorgangAttachedItemService.LOESCH_ANFORDERUNG_ITEM_NAME); - - assertThat(isLoeschAnforderung).isTrue(); - } - - @Test - void shouldReturnFalse() { - var isLoeschAnforderung = service.isLoeschAnforderung(VorgangAttachedItemService.WIEDERVORLAGE_ITEM_NAME); - - assertThat(isLoeschAnforderung).isFalse(); - } - } - - @Nested - class TestDeleteAttachedItem { - - private final CreateCommand createCommand = CommandTestFactory.createCreateCommand(); - - @Captor - private ArgumentCaptor<CreateCommand> createCommandArgumentCaptor; - - private final Command command = CommandTestFactory.create(); - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @BeforeEach - void init() { - doReturn(createCommand).when(service).buildDeleteCommand(vorgangAttachedItem); - when(commandService.createCommand(createCommand, VorgangAttachedItemTestFactory.VERSION)).thenReturn(command); - } - - @Test - void shouldBuildCreateCommand() { - service.deleteAttachedItem(vorgangAttachedItem); - - verify(service).buildDeleteCommand(vorgangAttachedItem); - } - - @Test - void shouldCallCommandService() { - service.deleteAttachedItem(vorgangAttachedItem); - - verify(commandService).createCommand(createCommandArgumentCaptor.capture(), eq(VorgangAttachedItemTestFactory.VERSION)); - assertThat(createCommandArgumentCaptor.getValue()).isEqualTo(createCommand); - } - - @Test - void shouldReturnCommand() { - var resultCommand = service.deleteAttachedItem(vorgangAttachedItem); - - assertThat(resultCommand).isEqualTo(command); - } - } - - @DisplayName("Build deleteCommand") - @Nested - class TestBuildDeleteCommand { - - private final VorgangAttachedItem item = VorgangAttachedItemTestFactory.create(); - - @Test - void shouldContainsVorgangId() { - var createCommand = service.buildDeleteCommand(item); - - assertThat(createCommand.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldContainsRelationId() { - var createCommand = service.buildDeleteCommand(item); - - assertThat(createCommand.getRelationId()).isEqualTo(VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldContainsRelationVersion() { - var createCommand = service.buildDeleteCommand(item); - - assertThat(createCommand.getRelationVersion()).isEqualTo(VorgangAttachedItemTestFactory.VERSION); - } - - @Test - void shouldContainsOrder() { - var createCommand = service.buildDeleteCommand(item); - - assertThat(createCommand.getCommandOrder()).isEqualTo(CommandOrder.DELETE_ATTACHED_ITEM); - } - - @Test - - void shouldContainsBody() { - var createCommand = service.buildDeleteCommand(item); - - assertThat(createCommand.getBody()).usingRecursiveComparison().isEqualTo(item); - } - } - - @DisplayName("Find loeschAnforderung") - @Nested - class TestFindLoeschAnforderung { - - @Test - void shouldCallRemoteService() { - service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - verify(vorgangAttachedItemRemoteService).findVorgangAttachedItem(VorgangHeaderTestFactory.ID, - VorgangAttachedItemService.LOESCH_ANFORDERUNG_ITEM_NAME); - } - - @Test - void shouldReturnValue() { - var vorgangAttachedItemStream = Stream.of(VorgangAttachedItemTestFactory.create()); - when(vorgangAttachedItemRemoteService.findVorgangAttachedItem(anyString(), anyString())).thenReturn(vorgangAttachedItemStream); - - var loeschAnforderungen = service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - assertThat(loeschAnforderungen).isEqualTo(vorgangAttachedItemStream); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemTestFactory.java deleted file mode 100644 index e36587305cd8bb732c66d52f0b86484c8d1e35eb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/attacheditem/VorgangAttachedItemTestFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.attacheditem; - -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ThreadLocalRandom; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -public class VorgangAttachedItemTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final long VERSION = ThreadLocalRandom.current().nextLong(); - public static final String CLIENT = "Alfa"; - public static final String ITEM_NAME = "ItemName"; - public static final String ITEM_KEY = "oneKey"; - public static final String ITEM_VALUE = "oneValue"; - public static final Map<String, Object> ITEM = Map.of(ITEM_KEY, ITEM_VALUE); - - public static VorgangAttachedItem create() { - return createBuilder().build(); - } - - public static VorgangAttachedItem.VorgangAttachedItemBuilder createBuilder() { - return VorgangAttachedItem.builder() - .id(ID) - .version(VERSION) - .client(CLIENT) - .itemName(ITEM_NAME) - .item(ITEM) - .vorgangId(VorgangHeaderTestFactory.ID); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileControllerITCase.java deleted file mode 100644 index de1bb94e7422f5ecae51a7e5aec1740f624fe986..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileControllerITCase.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static de.ozgcloud.alfa.JwtTokenUtil.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenController; -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenProperties; -import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenTestFactory; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.ITCase; -import io.jsonwebtoken.JwtBuilder; - -@AutoConfigureMockMvc -@WithMockUser -@ITCase -class BinaryFileControllerITCase { - - @SpyBean - private BinaryFileController controller; - @MockBean - private BinaryFileRemoteService remoteService; - @Autowired - private MockMvc mockMvc; - @Autowired - private DownloadTokenProperties downloadTokenProperties; - - private FileId fileId = FileId.createNew(); - - @Nested - class TestGetFile { - - @Nested - class TestDragAndDropFlow { - - private JwtBuilder tokenBuilder = DownloadTokenTestFactory.createTokenBuilder(downloadTokenProperties.getSecret(), - downloadTokenProperties.getValidity()); - - @BeforeEach - void init() { - when(remoteService.getFile(any())).thenReturn(OzgFileTestFactory.create()); - } - - @Test - void shouldGet403WhenNoFileId() throws Exception { - setTokenToSecuriyContext(tokenBuilder.compact()); - - performRequest().andExpect(status().isForbidden()); - } - - @Test - void shouldGet403WhenWrongFileId() throws Exception { - setTokenToSecuriyContext(tokenBuilder.addClaims(createClaims(FileId.createNew())).compact()); - - performRequest().andExpect(status().isForbidden()); - } - - @Test - void shouldGetFile() throws Exception { - setTokenToSecuriyContext(tokenBuilder.addClaims(createClaims(fileId)).compact()); - - performRequest().andExpect(status().isOk()); - } - - private Map<String, Object> createClaims(FileId fileId) { - return new HashMap<>(Map.of( - FIRSTNAME_CLAIM, UserProfileTestFactory.FIRSTNAME, - LASTNAME_CLAIM, UserProfileTestFactory.LASTNAME, - ROLE_CLAIM, List.of(), - FILEID_CLAIM, fileId.toString())); - } - - void setTokenToSecuriyContext(String token) throws Exception { - mockMvc.perform(get(DownloadTokenController.DOWNLOAD_TOKEN_PATH + "?" + DownloadTokenController.PARAM_TOKEN + "=" + token) - .with(csrf())) - .andExpect(status().isOk()); - } - } - - @Nested - class TestDefaultFlow { - - @Mock - private Authentication authentication; - - @BeforeEach - void init() { - when(remoteService.getFile(any())).thenReturn(OzgFileTestFactory.create()); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - - @Test - void shouldGet403WhenUnautorised() throws Exception { - when(authentication.isAuthenticated()).thenReturn(Boolean.FALSE); - - performRequest().andExpect(status().isForbidden()); - } - - @Test - void shouldGetFile() throws Exception { - when(authentication.isAuthenticated()).thenReturn(Boolean.TRUE); - - performRequest().andExpect(status().isOk()); - } - } - - ResultActions performRequest() throws Exception { - return mockMvc.perform(get(BinaryFileController.PATH + "/" + fileId.toString()).with(csrf())); - } - } - - @Nested - class TestUploadFile { - - @Nested - class TestFileContentType { - - @Test - void shouldReturnValidationMessage() throws Exception { - performRequest(createFile(MediaType.TEXT_PLAIN)).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_FILE_CONTENT_TYPE_INVALID)); - } - - @Test - void shouldAcceptConfiguredContentType() throws Exception { - when(remoteService.uploadFile(any())).thenReturn(CompletableFuture.completedFuture(FileId.createNew())); - - performRequest(createFile(MediaType.APPLICATION_PDF)).andExpect(status().isOk()); - } - - private ResultActions performRequest(MockMultipartFile file) throws Exception { - return mockMvc.perform(multipart( - String.format("%s/%s/%s/file", BinaryFileController.PATH, VorgangHeaderTestFactory.ID, - UploadBinaryFileTestFactory.FIELD)).file( - file).with(csrf())); - } - - private MockMultipartFile createFile(MediaType contentType) { - return new MockMultipartFile("file", "hello.txt", contentType.toString(), "Hello, World!".getBytes()); - } - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileControllerTest.java deleted file mode 100644 index 72801845db82305c9118ab5ea80bdf55a1deffd1..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileControllerTest.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; -import static org.hamcrest.CoreMatchers.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; - -class BinaryFileControllerTest { - - private final String PATH = BinaryFileController.PATH; - - @Spy - @InjectMocks - private BinaryFileController controller; - @Mock - private BinaryFileService service; - @Mock - private BinaryFileModelAssembler modelAssembler; - @Mock - private FileIdMapper fileIdMapper; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestUploadFile { - - private CompletableFuture<FileId> fileIdFuture = CompletableFuture.completedFuture(BinaryFileTestFactory.FILE_ID); - - @BeforeEach - void mockServiec() { - when(service.uploadFile(any())).thenReturn(fileIdFuture); - } - - @Test - void shouldCallService() throws Exception { - var uploadBinaryFile = UploadBinaryFileTestFactory.create(); - doReturn(uploadBinaryFile).when(controller).buildBinaryFileUploadRequest(any(), any(), any()); - - callEndpoint(); - - verify(service).uploadFile(uploadBinaryFile); - } - - @Test - void shouldReturnCreatedStatus() throws Exception { - var result = callEndpoint(); - - mockMvc.perform(asyncDispatch(result)).andExpect(status().isCreated()); - } - - @Test - void shouldReturnLocation() throws Exception { - var result = callEndpoint(); - - mockMvc.perform(asyncDispatch(result)) - .andExpect(header().string("Location", containsString("/api/binaryFiles/" + BinaryFileTestFactory.FILE_ID))); - } - - private MvcResult callEndpoint() throws Exception { - return mockMvc.perform(multipart(PATH + "/" + VorgangHeaderTestFactory.ID + "/" + BinaryFileTestFactory.FIELD + "/file") - .file(BinaryFileTestFactory.TEST_FILE)) - .andExpect(request().asyncStarted()) - .andReturn(); - } - } - - @Nested - class TestBuildBinaryFileUploadRequest { - - @Test - void shouldContainsVorgangId() { - var result = buildBinaryFileUploadRequest(); - - assertThat(result.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldContainsField() { - var result = buildBinaryFileUploadRequest(); - - assertThat(result.getField()).isEqualTo(BinaryFileTestFactory.FIELD); - } - - @Test - void shouldContainsSize() { - var result = buildBinaryFileUploadRequest(); - - assertThat(result.getSize()).isEqualTo(OzgFileTestFactory.SIZE); - } - - @Test - void shouldContainsName() { - var result = buildBinaryFileUploadRequest(); - - assertThat(result.getName()).isEqualTo(OzgFileTestFactory.NAME); - } - - @Test - void shouldContainsContentType() { - var result = buildBinaryFileUploadRequest(); - - assertThat(result.getContentType()).isEqualTo(OzgFileTestFactory.CONTENT_TYPE); - } - - @Test - void shouldGetInputStreamFromFile() { - buildBinaryFileUploadRequest(); - - verify(controller).getInputStream(BinaryFileTestFactory.TEST_FILE); - } - - private UploadBinaryFileRequest buildBinaryFileUploadRequest() { - return controller.buildBinaryFileUploadRequest(VorgangHeaderTestFactory.ID, BinaryFileTestFactory.FIELD, BinaryFileTestFactory.TEST_FILE); - } - } - - @Nested - class TestGetInputStreamOfFile { - - @Mock - private MultipartFile file; - - @Test - void shouldReturnStream() throws IOException { - var uploadStream = file.getInputStream(); - - when(file.getInputStream()).thenReturn(uploadStream); - - assertThat(controller.getInputStream(file)).isEqualTo(uploadStream); - } - - @Test - void shouldThrowException() throws IOException { - when(file.getInputStream()).thenThrow(IOException.class); - - assertThrows(TechnicalException.class, () -> controller.getInputStream(file)); - } - } - - @Nested - class TestGetFileData { - - @Mock - private StreamingResponseBody body; - private OzgFile ozgFile = OzgFileTestFactory.create(); - - @BeforeEach - void mockService() { - when(service.getFile(any())).thenReturn(ozgFile); - } - - @Test - void shouldCallServiceGetFile() throws Exception { - callEndpoint(); - - verify(service).getFile(OzgFileTestFactory.ID); - } - - @Test - void shouldBuildResponseEntity() throws Exception { - doReturn(body).when(controller).createDownloadStreamingBody(OzgFileTestFactory.ID); - - callEndpoint(); - - verify(controller).buildResponseEntity(ozgFile, body); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(PATH + "/" + OzgFileTestFactory.ID).contentType(MediaType.APPLICATION_OCTET_STREAM_VALUE)) - .andExpect(status().isOk()); - } - } - - @Nested - class TestCreateDownloadStreamingBody { - - @Mock - private OutputStream out; - - @Test - void shouldCallServiceWriteFileContent() throws IOException { - controller.createDownloadStreamingBody(OzgFileTestFactory.ID).writeTo(out); - - verify(service).writeFileContent(any(), any()); - } - } - - @Nested - class TestGetFile { - - private OzgFile ozgFile = OzgFileTestFactory.create(); - - @BeforeEach - void mockServiec() { - when(service.getFile(any())).thenReturn(ozgFile); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).getFile(BinaryFileTestFactory.FILE_ID); - } - - @Test - void shouldCallAssembler() throws Exception { - callEndpoint(); - - verify(modelAssembler).toModel(ozgFile); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(BinaryFileController.PATH + '/' + BinaryFileTestFactory.FILE_ID) - .contentType(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()); - } - } - - @Nested - class TestGetFiles { - - private OzgFile file = OzgFileTestFactory.create(); - - @BeforeEach - void mockServiec() { - when(service.getFiles(any())).thenReturn(Stream.of(file)); - when(fileIdMapper.toString(any())).then(fileId -> fileId.toString()); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).getFiles(any()); - } - - @Test - void shouldCallAssembler() throws Exception { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(Stream.of(file).collect(Collectors.toList())); - } - - private CollectionModel<EntityModel<OzgFile>> callEndpoint() throws Exception { - return controller.getFiles(List.of(BinaryFileTestFactory.FILE_ID)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileDownloadStreamObserverTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileDownloadStreamObserverTest.java deleted file mode 100644 index 6cac563882f8237fbbbc83ad7618636bcb8b25bd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileDownloadStreamObserverTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.concurrent.CompletableFuture; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataResponse; - -class BinaryFileDownloadStreamObserverTest { - - @InjectMocks - private BinaryFileDownloadStreamObserver downloadStreamObserver; - @Mock - private CompletableFuture<Boolean> streamFuture; - @Mock - private OutputStream out; - - @Nested - class TestOnNext { - - @Mock - private GrpcGetBinaryFileDataResponse response; - - @Test - void shouldWriteToStreamOnReceivingContentPart() throws IOException { - downloadStreamObserver.onNext(createFileConentResponse()); - - verify(out).write(BinaryFileTestFactory.DATA); - } - - private GrpcGetBinaryFileDataResponse createFileConentResponse() { - return GrpcGetBinaryFileDataResponse.newBuilder().setFileContent(ByteString.copyFrom(BinaryFileTestFactory.DATA)).build(); - } - } - - @Nested - class TestOnError { - - @Mock - private Throwable throwable; - - @Test - void shouldCompleteFutureExceptionally() { - downloadStreamObserver.onError(throwable); - - verify(streamFuture).completeExceptionally(throwable); - } - } - - @Nested - class TestOnCompleted { - - @Test - void shouldCompleteFuture() { - downloadStreamObserver.onCompleted(); - - verify(streamFuture).complete(true); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileITCase.java deleted file mode 100644 index 1e49eb8ffbf5224842a2287eb47b6565608358f4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileITCase.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.concurrent.CompletableFuture; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.util.unit.DataSize; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class BinaryFileITCase { - - @MockBean - private BinaryFileRemoteService remoteService; - - @Autowired - private MockMvc mockMvc; - - @WithMockUser - @Nested - class TestUploadFile { - - private final CompletableFuture<FileId> future = CompletableFuture.completedFuture(BinaryFileTestFactory.FILE_ID); - - public static final byte[] DATA_OVER_3_MB = BinaryFileTestFactory.createByteOfSize(DataSize.ofMegabytes(41)); - public static final MockMultipartFile TEST_FILE = new MockMultipartFile("file", BinaryFileTestFactory.NAME, - BinaryFileTestFactory.CONTENT_TYPE, DATA_OVER_3_MB); - - @BeforeEach - void mockStub() { - when(remoteService.uploadFile(any())).thenReturn(future); - } - - @Nested - class TestDefault { - @Test - void shouldReturnConstraintViolationException() throws Exception { - var result = callEndpoint(TEST_FILE, BinaryFileTestFactory.FIELD); - - result.andExpect(status().isUnprocessableEntity()); - } - - @Test - void shouldReturnConstraintViolationExceptionData() throws Exception { - var result = callEndpoint(TEST_FILE, BinaryFileTestFactory.FIELD); - - result.andExpect(jsonPath("invalidParams[0].name").value("uploadFile.uploadBinaryFileRequest")) - .andExpect(jsonPath("invalidParams[0].reason").value("validation_field_file_size_exceeded")) - .andExpect(jsonPath("invalidParams[0].constraintParameters[0].name").value("unit")) - .andExpect( - jsonPath("invalidParams[0].constraintParameters[0].value").value(UploadBinaryFileSizeValidator.DEFAULT_UNIT_STRING)); - } - - @Test - void shouldContainsExceptionDataOnDefaultMaxSize() throws Exception { - var result = callEndpoint(TEST_FILE, BinaryFileTestFactory.FIELD); - - result.andExpect(jsonPath("invalidParams[0].constraintParameters[1].name").value("max")) - .andExpect(jsonPath("invalidParams[0].constraintParameters[1].value").value("40")); - } - } - - @Nested - class TestForPostfachNachricht { - - private static final String FIELD = "postfachNachrichtAttachment"; - - @Test - void shouldContainsExceptionDataOnPostfachNachrichtMaxSize() throws Exception { - var result = callEndpoint(TEST_FILE, FIELD); - - result.andExpect(jsonPath("invalidParams[0].constraintParameters[1].name").value("max")) - .andExpect(jsonPath("invalidParams[0].constraintParameters[1].value").value("3")); - } - } - - private ResultActions callEndpoint(MockMultipartFile file, String field) throws Exception { - return mockMvc.perform( - multipart(BinaryFileController.PATH + "/{vorgangId}/{field}/file", VorgangHeaderTestFactory.ID, field).file(file).with(csrf())); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java deleted file mode 100644 index 5696644059884d034dde92770ab23f5025a25e8e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.springframework.hateoas.IanaLinkRelations; - -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; - -class BinaryFileModelAssemblerTest { - - @InjectMocks // NOSONAR - private BinaryFileModelAssembler modelAssembler; - - @Nested - class TestLinksOnModel { - - @Test - void shouldHaveSelfLink() { - var link = modelAssembler.toModel(OzgFileTestFactory.create()).getLink(IanaLinkRelations.SELF_VALUE); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(BinaryFileController.PATH + "/" + OzgFileTestFactory.ID); - } - - @Test - void shouldHaveDownloadLink() { - var link = modelAssembler.toModel(OzgFileTestFactory.create()).getLink(BinaryFileModelAssembler.REL_DOWNLOAD); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(BinaryFileController.PATH + "/" + OzgFileTestFactory.ID); - } - } - - @Nested - class TestLinksOnCollectionModel { - - @Test - void shouldHaveSelfLink() { - var link = modelAssembler.toCollectionModel(Stream.of(OzgFileTestFactory.create())).getLink(IanaLinkRelations.SELF_VALUE); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(BinaryFileController.PATH); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileRemoteServiceTest.java deleted file mode 100644 index a7452d8cb8cc22106c1fe8e48b0e32a5a84c13a2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileRemoteServiceTest.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.OutputStream; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.alfa.common.GrpcCallContextTestFactory; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.common.file.GrpcOzgFileTestFactory; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileMapper; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceStub; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcFindFilesResponse; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataRequest; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileMetaData; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; -import io.grpc.stub.CallStreamObserver; - -class BinaryFileRemoteServiceTest { - - @Spy - @InjectMocks - private BinaryFileRemoteService remoteService; - @Mock - private BinaryFileServiceBlockingStub serviceStub; - @Mock - private BinaryFileServiceStub serviceAsyncStub; - @Mock - private ContextService contextService; - @Mock - private OzgFileMapper ozgFileMapper; - @Mock - private FileIdMapper fileIdMapper; - - private GrpcCallContext callContext = GrpcCallContextTestFactory.create(); - - @BeforeEach - void mockContextService() { - lenient().when(contextService.createCallContext()).thenReturn(callContext); - } - - @Nested - class TestUploadBinaryFile { - - @Mock - private CallStreamObserver<GrpcUploadBinaryFileRequest> requestObserver; - @Mock - private BinaryFileUploadStreamObserver responseObserver; - private UploadBinaryFileRequest uploadBinaryFile = UploadBinaryFileTestFactory.create(); - - @BeforeEach - void initMocks() { - when(serviceAsyncStub.uploadBinaryFileAsStream(any())).thenReturn(requestObserver); - } - - @Test - void shouldCreateStreamObserver() { - callService(); - - verify(remoteService).createUploadBinaryFileObserver(ArgumentMatchers.<CompletableFuture<FileId>>any(), any()); - verify(remoteService).buildMetaDataRequest(uploadBinaryFile); - } - - @Test - void shouldCallUploadBinaryFileOnServiceAsyncStub() { - doReturn(responseObserver).when(remoteService).createUploadBinaryFileObserver(any(), any()); - - callService(); - - verify(serviceAsyncStub).uploadBinaryFileAsStream(responseObserver); - } - - private void callService() { - remoteService.uploadFile(uploadBinaryFile); - } - } - - @Nested - class TestBuildMetaDataRequest { - - @Test - void shouldCallContextService() { - callService(); - - verify(contextService).createCallContext(); - } - - @Test - void shouldContainsVorgangId() { - var metaData = callService(); - - assertThat(metaData.getVorgangId()).isEqualTo(UploadBinaryFileTestFactory.VORGANG_ID); - } - - @Test - void shouldContainsFieldName() { - var metaData = callService(); - - assertThat(metaData.getField()).isEqualTo(UploadBinaryFileTestFactory.FIELD); - } - - @Test - void shouldContainsContentType() { - var metaData = callService(); - - assertThat(metaData.getContentType()).isEqualTo(OzgFileTestFactory.CONTENT_TYPE); - - } - - @Test - void shouldContainsSize() { - var metaData = callService(); - - assertThat(metaData.getSize()).isEqualTo(OzgFileTestFactory.SIZE); - } - - @Test - void shouldContainsFileName() { - var metaData = callService(); - - assertThat(metaData.getFileName()).isEqualTo(OzgFileTestFactory.NAME); - } - - private GrpcUploadBinaryFileMetaData callService() { - return remoteService.buildMetaDataRequest(UploadBinaryFileTestFactory.create()).getMetadata(); - } - } - - @Nested - class TestBuildChunkRequest { - - @Test - void shouldContainContent() { - var chunkRequest = remoteService.buildChunkRequest(BinaryFileTestFactory.DATA); - - assertThat(chunkRequest.getFileContent()).isEqualTo(ByteString.copyFrom(BinaryFileTestFactory.DATA)); - } - } - - @Nested - class TestGetFile { - - private final GrpcFindFilesResponse response = BinaryFileTestFactory.createFindBinaryFilesResponse(); - - @BeforeEach - void mock() { - when(serviceStub.findBinaryFilesMetaData(any())).thenReturn(response); - } - - @Test - void shouldCallServiceStub() { - doServiceCall(); - - verify(serviceStub).findBinaryFilesMetaData(any()); - } - - @Test - void shouldCallContextService() { - doServiceCall(); - - verify(contextService).createCallContext(); - } - - @Test - void shouldCallMapper() { - doServiceCall(); - - verify(ozgFileMapper).toFile(GrpcOzgFileTestFactory.create()); - } - - private OzgFile doServiceCall() { - return remoteService.getFile(BinaryFileTestFactory.FILE_ID); - } - } - - @Nested - class TestGetFileData { - - @Mock - private OutputStream out; - @Mock - private BinaryFileDownloadStreamObserver responseObserver; - private String fileId = OzgFileTestFactory.ID.toString(); - - @BeforeEach - void mockStreamObserver() { - doReturn(responseObserver).when(remoteService).createDownloadBinaryFileObserver(any(), any()); - when(fileIdMapper.toString(any())).thenReturn(fileId); - doNothing().when(remoteService).waitUntilFutureToComplete(any()); - } - - @Test - void shouldCreateDownloadBinaryFileObserver() { - callService(); - - verify(remoteService).createDownloadBinaryFileObserver(ArgumentMatchers.<CompletableFuture<Boolean>>any(), eq(out)); - } - - @Test - void shouldCallContextService() { - callService(); - - verify(contextService).createCallContext(); - } - - @Test - void shouldCallFileIdMapper() { - callService(); - - verify(fileIdMapper).toString(OzgFileTestFactory.ID); - } - - @Test - void shouldCallGetFileDataOnAsyncServiceStub() { - callService(); - - verify(serviceAsyncStub).getBinaryFileContent(any(GrpcGetBinaryFileDataRequest.class), eq(responseObserver)); - } - - @Test - void shouldWaitUntilFutureToComplete() { - callService(); - - verify(remoteService).waitUntilFutureToComplete(any()); - } - - private void callService() { - remoteService.writeFileContent(OzgFileTestFactory.ID, out); - } - } - - @Nested - class TestWaitUntilFutureToComplete { - - @Mock - private CompletableFuture<Boolean> streamFuture; - - @Test - void shouldNotThrowException() { - assertDoesNotThrow(() -> remoteService.waitUntilFutureToComplete(streamFuture)); - } - - @ParameterizedTest - @ValueSource(classes = { InterruptedException.class, ExecutionException.class, TimeoutException.class }) - void shouldRethrowAsTechnicalException(Class<Exception> exception) - throws InterruptedException, ExecutionException, TimeoutException { - doThrow(exception).when(streamFuture).get(anyLong(), any(TimeUnit.class)); - - assertThrows(TechnicalException.class, () -> remoteService.waitUntilFutureToComplete(streamFuture)); - } - } - - @Nested - class TestGetFiles { - - private final GrpcFindFilesResponse response = BinaryFileTestFactory.createFindBinaryFilesResponse(); - - @BeforeEach - void mock() { - when(serviceStub.findBinaryFilesMetaData(any())).thenReturn(response); - when(fileIdMapper.toString(any())).thenReturn(OzgFileTestFactory.ID.toString()); - } - - @Test - void shouldCallContextService() { - doServiceCall(); - - verify(contextService).createCallContext(); - } - - @Test - void shouldCallFileIdMapper() { - doServiceCall(); - - verify(fileIdMapper).toString(any()); - } - - @Test - void shouldCallOzgFileMapper() { - var result = doServiceCall(); - - result = result.collect(Collectors.toList()).stream(); - - verify(ozgFileMapper).toFile(any(GrpcOzgFile.class)); - } - - private Stream<OzgFile> doServiceCall() { - return remoteService.getFiles(List.of(OzgFileTestFactory.ID)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileServiceTest.java deleted file mode 100644 index 00a422ad81f1f993ef7d06d4ea76790afb170ff8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileServiceTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.List; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; - -class BinaryFileServiceTest { - - @InjectMocks - private BinaryFileService service; - - @Mock - private BinaryFileRemoteService remoteService; - - @Nested - class TestUploadFile { - - @Test - void shouldCallRemoteService() throws IOException { - var uploadBinaryFile = UploadBinaryFileTestFactory.create(); - - service.uploadFile(uploadBinaryFile); - - verify(remoteService).uploadFile(uploadBinaryFile); - } - } - - @Nested - class TestWriteFileContent { - - @Mock - private OutputStream out; - - @Test - void shouldCallRemotService() { - service.writeFileContent(OzgFileTestFactory.ID, out); - - verify(remoteService).writeFileContent(OzgFileTestFactory.ID, out); - } - } - - @Nested - class TestGetFile { - - @Test - void shouldCallRemoteService() { - service.getFile(BinaryFileTestFactory.FILE_ID); - - verify(remoteService).getFile(BinaryFileTestFactory.FILE_ID); - } - } - - @Nested - class TestGetFiles { - - @Test - void shouldCallRemotService() { - var fileIds = List.of(BinaryFileTestFactory.FILE_ID); - - service.getFiles(fileIds); - - verify(remoteService).getFiles(fileIds); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileTestFactory.java deleted file mode 100644 index 8728f9d7b93dd2bc701738515c1b5517b7904a23..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileTestFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.UUID; - -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.util.unit.DataSize; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.file.GrpcOzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcFindFilesResponse; - -public class BinaryFileTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final FileId FILE_ID = FileId.from(ID); - public static final String NAME = "TestFile"; - public static final String CONTENT_TYPE = "application/image"; - public static final byte[] DATA = "juhu, ein bild".getBytes(); - public static final MockMultipartFile TEST_FILE = new MockMultipartFile("file", NAME, CONTENT_TYPE, DATA); - public static final long SIZE = TEST_FILE.getSize(); - - public static final String FIELD = "attachment"; - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - static final InputStream STREAM = new ByteArrayInputStream(DATA); - - public static GrpcFindFilesResponse createFindBinaryFilesResponse() { - return GrpcFindFilesResponse.newBuilder().addFile(GrpcOzgFileTestFactory.create()).build(); - } - - public static byte[] createByteOfSize(DataSize size) { - var testStr = LoremIpsum.getInstance().getWords(1); - var contentSize = (int) size.toBytes(); - var result = new byte[contentSize]; - - System.arraycopy(testStr.getBytes(), 0, result, contentSize - testStr.length(), testStr.length()); - - return result; - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileUploadStreamObserverTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileUploadStreamObserverTest.java deleted file mode 100644 index 068e00cb85075d1d0317bf04855388eb8602b461..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileUploadStreamObserverTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.concurrent.CompletableFuture; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileResponse; - -class BinaryFileUploadStreamObserverTest { - - @InjectMocks - private BinaryFileUploadStreamObserver uploadStreamObserver; - @Mock - private CompletableFuture<FileId> fileIdFuture; - - private final String FIELD_FILE_ID = "fileId"; - - @Nested - class TestOnNext { - - private GrpcUploadBinaryFileResponse uploadResponse = GrpcUploadBinaryFileResponse.newBuilder() - .setFileId(OzgFileTestFactory.ID.toString()) - .build(); - - @Test - void shouldSetFileId() { - uploadStreamObserver.onNext(uploadResponse); - - assertThat(uploadStreamObserver.getFileId()).isEqualTo(OzgFileTestFactory.ID.toString()); - } - } - - @Nested - class TestOnError { - - @Mock - private Throwable throwable; - - @Test - void shouldCompleteFutureExceptionally() { - uploadStreamObserver.onError(throwable); - - verify(fileIdFuture).completeExceptionally(throwable); - } - } - - @Nested - class TestOnCompleted { - - @Test - void shouldCompleteWithFileId() { - ReflectionTestUtils.setField(uploadStreamObserver, FIELD_FILE_ID, BinaryFileTestFactory.ID); - - uploadStreamObserver.onCompleted(); - - verify(fileIdFuture).complete(FileId.from(BinaryFileTestFactory.ID)); - } - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/ChunkedFileSenderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/ChunkedFileSenderTest.java deleted file mode 100644 index f7f98aaa85639fcd1d0338341893fed0337fb1cb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/ChunkedFileSenderTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Function; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest; -import io.grpc.stub.CallStreamObserver; -import lombok.SneakyThrows; - -class ChunkedFileSenderTest { - - private CallStreamObserver<GrpcUploadBinaryFileRequest> requestObserver = mock(CallStreamObserver.class); - private InputStream uploadStream = mock(InputStream.class); - - private int chunkSize = BinaryFileTestFactory.DATA.length; - private GrpcUploadBinaryFileRequest uploadBinaryFileRequest = GrpcUploadBinaryFileRequestTestFactory.createDataRequest(); - private Function<byte[], GrpcUploadBinaryFileRequest> buildUploadBinaryFileRequest = when(mock(Function.class).apply(any())) - .thenReturn(uploadBinaryFileRequest).getMock(); - private GrpcUploadBinaryFileRequest metadataRequest = GrpcUploadBinaryFileRequestTestFactory.createMetadataRequest(); - - private ChunkedFileSender<GrpcUploadBinaryFileRequest> streamer = new ChunkedFileSender<>(uploadStream, chunkSize, buildUploadBinaryFileRequest, - metadataRequest); - - @Nested - class TestSendBinaryFile { - - @Test - void shouldNotSendWhenDone() { - ReflectionTestUtils.setField(streamer, "hasUploadFile", new AtomicBoolean(false)); - - streamer.sendChunkTo(requestObserver); - - verify(requestObserver, never()).onNext(any()); - } - - @SneakyThrows - @Test - void shouldCloseUploadStream() { - when(uploadStream.readNBytes(anyInt())).thenReturn(new byte[] {}); - - streamer.sendChunkTo(requestObserver); - - verify(uploadStream).close(); - } - - @SneakyThrows - @Test - void shouldCallOnCompleted() { - when(uploadStream.readNBytes(anyInt())).thenReturn(new byte[] {}); - - streamer.sendChunkTo(requestObserver); - - verify(requestObserver).onCompleted(); - } - - @SneakyThrows - @Test - void shouldCallOnNext() { - when(uploadStream.readNBytes(anyInt())).thenReturn(BinaryFileTestFactory.DATA); - - streamer.sendChunkTo(requestObserver); - - verify(requestObserver).onNext(uploadBinaryFileRequest); - } - - @SneakyThrows - @Test - void shouldThrowException() { - doThrow(IOException.class).when(uploadStream).readNBytes(anyInt()); - - assertThrows(TechnicalException.class, () -> streamer.sendChunkTo(requestObserver)); - } - - @SneakyThrows - @Test - void shouldBuildRequest() { - when(uploadStream.readNBytes(anyInt())).thenReturn(BinaryFileTestFactory.DATA); - - streamer.sendChunkTo(requestObserver); - - verify(buildUploadBinaryFileRequest).apply(BinaryFileTestFactory.DATA); - } - - @SneakyThrows - @Test - void shouldSendMetadata() { - when(uploadStream.readNBytes(anyInt())).thenReturn(BinaryFileTestFactory.DATA); - - streamer.sendChunkTo(requestObserver); - - verify(requestObserver).onNext(metadataRequest); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/DownloadAlfaUserTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/DownloadAlfaUserTestFactory.java deleted file mode 100644 index 8ae331eaa8f5b6e1ea29901cc1cec42980569172..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/DownloadAlfaUserTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class DownloadAlfaUserTestFactory { - - static AlfaUserWithFileId create() { - return createBuilder().build(); - } - - static AlfaUserWithFileId.AlfaUserWithFileIdBuilder createBuilder() { - return AlfaUserWithFileId.builder().user(UserProfileTestFactory.create()).fileId(BinaryFileTestFactory.FILE_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/DownloadAuthenticationHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/DownloadAuthenticationHandlerTest.java deleted file mode 100644 index 18e18abf8ffe4d307b2d04aa487fdc4bfc37d692..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/DownloadAuthenticationHandlerTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.jwt.Jwt; - -class DownloadAuthenticationHandlerTest { - - private DownloadAuthenticationHandler downloadAuthorizationHandler = new DownloadAuthenticationHandler(); - - @Nested - class TestAuthorizationKeycloak { - - @Mock - private Jwt jwt; - - private Authentication authentication = mock(Authentication.class); - - @BeforeEach - void init() { - when(authentication.isAuthenticated()).thenReturn(Boolean.TRUE); - when(authentication.getPrincipal()).thenReturn(jwt); - } - - @Test - void shouldAuthenticate() { - var check = downloadAuthorizationHandler.check(FileId.createNew(), authentication); - - assertThat(check).isTrue(); - } - } - - @Nested - class TestAuthorizationUsernamePassword { - private FileId fileId = FileId.createNew(); - - private Authentication authentication = mock(UsernamePasswordAuthenticationToken.class); - - @BeforeEach - void init() { - when(authentication.isAuthenticated()).thenReturn(Boolean.TRUE); - when(authentication.getPrincipal()).thenReturn(DownloadAlfaUserTestFactory.createBuilder().fileId(fileId).build()); - } - - @Test - void shouldAuthenticate() { - var check = downloadAuthorizationHandler.check(fileId, authentication); - - assertThat(check).isTrue(); - } - - @Test - void shouldNotAuthenticateWrongFileId() { - var check = downloadAuthorizationHandler.check(FileId.createNew(), authentication); - - assertThat(check).isFalse(); - } - - @Test - void shouldNotAuthenticateNoFileId() { - var check = downloadAuthorizationHandler.check(null, authentication); - - assertThat(check).isFalse(); - } - - @Test - void shouldNotAuthenticate() { - when(authentication.isAuthenticated()).thenReturn(Boolean.FALSE); - - var check = downloadAuthorizationHandler.check(fileId, authentication); - - assertThat(check).isFalse(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/GrpcUploadBinaryFileMetaDataTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/GrpcUploadBinaryFileMetaDataTestFactory.java deleted file mode 100644 index 7be79f98682613818872fb565a3eb82df19f4777..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/GrpcUploadBinaryFileMetaDataTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileMetaData; - -public class GrpcUploadBinaryFileMetaDataTestFactory { - - public static GrpcUploadBinaryFileMetaData create() { - return createBuilder().build(); - } - - private static GrpcUploadBinaryFileMetaData.Builder createBuilder() { - return GrpcUploadBinaryFileMetaData.newBuilder() - .setVorgangId(UploadBinaryFileTestFactory.VORGANG_ID) - .setField(UploadBinaryFileTestFactory.FIELD) - .setContentType(OzgFileTestFactory.CONTENT_TYPE) - .setSize(OzgFileTestFactory.SIZE) - .setFileName(OzgFileTestFactory.NAME); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/GrpcUploadBinaryFileRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/GrpcUploadBinaryFileRequestTestFactory.java deleted file mode 100644 index 99ff41ceeb55009751675252628871e18efea6aa..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/GrpcUploadBinaryFileRequestTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import com.google.protobuf.ByteString; - -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest.Builder; - -public class GrpcUploadBinaryFileRequestTestFactory { - - public static GrpcUploadBinaryFileRequest createDataRequest() { - return createBuilder().setFileContent(ByteString.copyFrom(BinaryFileTestFactory.DATA)).build(); - } - - public static GrpcUploadBinaryFileRequest createMetadataRequest() { - return createBuilder().setMetadata(GrpcUploadBinaryFileMetaDataTestFactory.create()).build(); - } - - public static Builder createBuilder() { - return GrpcUploadBinaryFileRequest.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileContentTypeValidatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileContentTypeValidatorTest.java deleted file mode 100644 index 1439fb1c0f11c5851771610d18f171ce803a3ebe..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileContentTypeValidatorTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Map; - -import jakarta.validation.ConstraintValidatorContext; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -class UploadBinaryFileContentTypeValidatorTest { - - @Mock - private BinaryFileProperties properties; - @Spy - @InjectMocks - private UploadBinaryFileContentTypeValidator validator; - - @Nested - class TestIsValid { - - @Mock - private ConstraintValidatorContext context; - - @Test - void shouldGetConfiguredContentTypes() { - callValidator(); - - verify(validator).getConfiguredContentTypes(UploadBinaryFileTestFactory.FIELD); - } - - @Test - void shouldReturnTrueIfConfigurationIsMissing() { - var result = callValidator(); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalseIfContentTypeIsNotConfigured() { - givenConfiguredContentTypes(List.of("dummy/abc", "dummy/xyz")); - - var result = callValidator(); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnTrueIfContentTypeIsConfigured() { - givenConfiguredContentTypes(List.of(BinaryFileTestFactory.CONTENT_TYPE)); - - var result = callValidator(); - - assertThat(result).isTrue(); - } - - private void givenConfiguredContentTypes(List<String> contentTypes) { - doReturn(contentTypes).when(validator).getConfiguredContentTypes(UploadBinaryFileTestFactory.FIELD); - } - - private boolean callValidator() { - return validator.isValid(UploadBinaryFileTestFactory.create(), context); - } - } - - @Nested - class TestGetConfiguredContentTypes { - - @Test - void shouldReturnEmptyCollection() { - var contentTypes = validator.getConfiguredContentTypes(UploadBinaryFileTestFactory.FIELD); - - assertThat(contentTypes).isEmpty(); - } - - @Test - void shouldReturnContentTypes() { - var expectedContentTypes = List.of(LoremIpsum.getInstance().getWords(1), LoremIpsum.getInstance().getWords(1)); - givenConfiguredContentTypes(expectedContentTypes); - - var contentTypes = validator.getConfiguredContentTypes(UploadBinaryFileTestFactory.FIELD); - - assertThat(contentTypes).containsExactlyInAnyOrderElementsOf(expectedContentTypes); - } - - private void givenConfiguredContentTypes(List<String> contentTypes) { - when(properties.getContentTypes()).thenReturn(Map.of(UploadBinaryFileTestFactory.FIELD, contentTypes)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileSizeValidatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileSizeValidatorTest.java deleted file mode 100644 index 0190e84875fc1e8b0faa009786073b129eae00c6..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileSizeValidatorTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.Map; - -import jakarta.validation.ConstraintValidatorContext; - -import org.hibernate.validator.constraintvalidation.HibernateConstraintValidatorContext; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.util.unit.DataSize; - -class UploadBinaryFileSizeValidatorTest { - - @Spy - @InjectMocks - private UploadBinaryFileSizeValidator validator = new UploadBinaryFileSizeValidator(); - @Mock - private BinaryFileProperties properties; - - @Nested - class TestIsValid { - - @Mock - private ConstraintValidatorContext context; - @Mock - private HibernateConstraintValidatorContext unwrappedContext; - - @BeforeEach - void mockMaxValidSize() { - doReturn(unwrappedContext).when(validator).getUnwrappedContext(any(), any()); - doReturn(DataSize.ofMegabytes(3)).when(validator).getMaxValidSize(anyString()); - } - - @Test - void shouldCallGetMaxValidSize() { - validator.isValid(UploadBinaryFileTestFactory.create(), context); - - verify(validator).getMaxValidSize(UploadBinaryFileTestFactory.FIELD); - } - - @Test - void shouldReturnTrue() { - var result = validator.isValid(UploadBinaryFileTestFactory.create(), context); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalse() { - var result = validator.isValid(UploadBinaryFileTestFactory.createBuilder().size(DataSize.ofMegabytes(3).toBytes() + 1).build(), null); - - assertThat(result).isFalse(); - } - - @Nested - class TestDynamicPayload { - - @Captor - private ArgumentCaptor<DynamicViolationParameter> captor; - - @Test - void shouldSetMaxValue() { - validator.isValid(UploadBinaryFileTestFactory.create(), context); - - verify(unwrappedContext).withDynamicPayload(captor.capture()); - assertThat(String.valueOf(captor.getValue().getMap().get("max"))).isEqualTo("3"); - } - } - } - - @Nested - class TestGetMaxValidSize { - - @Test - void shouldReturnDefaultValueOnEmptyMap() { - when(properties.getMaxFileSize()).thenReturn(Collections.emptyMap()); - - var maxFileSize = validator.getMaxValidSize(BinaryFileTestFactory.FIELD); - - assertThat(maxFileSize.toBytes()).isEqualTo(DataSize.ofMegabytes(UploadBinaryFileSizeValidator.DEFAULT_MAX_SIZE).toBytes()); - } - - @Test - void shouldReturnDefaultValueOnMissingField() { - when(properties.getMaxFileSize()).thenReturn(Map.of("not match", DataSize.ofMegabytes(3))); - - var maxFileSize = validator.getMaxValidSize(BinaryFileTestFactory.FIELD); - - assertThat(maxFileSize.toBytes()).isEqualTo(DataSize.ofMegabytes(UploadBinaryFileSizeValidator.DEFAULT_MAX_SIZE).toBytes()); - } - - @Test - void shouldReturnPropertiesValue() { - when(properties.getMaxFileSize()).thenReturn(Map.of(BinaryFileTestFactory.FIELD, DataSize.ofMegabytes(3))); - - var maxFileSize = validator.getMaxValidSize(BinaryFileTestFactory.FIELD); - - assertThat(maxFileSize.toBytes()).isEqualTo(DataSize.ofMegabytes(3).toBytes()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileTestFactory.java deleted file mode 100644 index 0224fedcd8f78e793877cbae8c08be73d929800e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/UploadBinaryFileTestFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.binaryfile; - -import static de.ozgcloud.alfa.common.file.OzgFileTestFactory.*; - -import java.io.InputStream; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -public class UploadBinaryFileTestFactory { - - static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - static final String FIELD = BinaryFileTestFactory.FIELD; - static final InputStream UPLOAD_STREAM = BinaryFileTestFactory.STREAM; - - public static UploadBinaryFileRequest create() { - return createBuilder().build(); - } - - public static UploadBinaryFileRequest.UploadBinaryFileRequestBuilder createBuilder() { - return UploadBinaryFileRequest.builder() - .name(NAME) - .vorgangId(VORGANG_ID) - .field(FIELD) - .size(SIZE) - .contentType(CONTENT_TYPE) - .uploadStream(UPLOAD_STREAM); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/CallContextAttachingInterceptorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/CallContextAttachingInterceptorTest.java deleted file mode 100644 index bedbd3fd1379a5f187a947f1dff459e3e9e03f5f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/CallContextAttachingInterceptorTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.callcontext; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.callcontext.CallContextAttachingInterceptor.CallContextAttachingClientCall; -import io.grpc.ClientCall; -import io.grpc.ClientCall.Listener; -import io.grpc.Metadata; - -class CallContextAttachingInterceptorTest<A, B> { - - @InjectMocks - private CallContextAttachingInterceptor interceptor; - @Mock - private ContextService contextService; - - private CallContextAttachingClientCall<A, B> clientCall; - @Mock - private ClientCall<A, B> delegateCall; - - @Mock - private Listener<B> responseListener; - - @Mock - private Metadata contextMetadata; - @Mock - private Metadata inputMetadata; - - @BeforeEach - void initClientCall() { - clientCall = interceptor.new CallContextAttachingClientCall<A, B>(delegateCall); - } - - @BeforeEach - void mockContextService() { - when(contextService.buildCallContextMetadata()).thenReturn(contextMetadata); - } - - @Test - void shouldCallUserService() { - clientCall.start(responseListener, inputMetadata); - - verify(contextService).buildCallContextMetadata(); - } - - @Test - void shouldMergeMetas() { - clientCall.start(responseListener, inputMetadata); - - verify(inputMetadata).merge(contextMetadata); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/CallContextTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/CallContextTestFactory.java deleted file mode 100644 index 1e173d64c19cb98a8b4e24efb9d03888b49054e8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/CallContextTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.callcontext; - -import static de.ozgcloud.alfa.common.callcontext.ContextService.*; - -import java.util.Map; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class CallContextTestFactory { - - public static final String CLIENT_NAME = "TEST_CLIENT"; - - static Map<String, String> createContextMap() { - return Map.of( - KEY_USER_ID, UserProfileTestFactory.ID.toString(), - KEY_USER_NAME, UserProfileTestFactory.FULLNAME); - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/ContextServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/ContextServiceTest.java deleted file mode 100644 index 43560b04c7ffb6c1d1a744047b8f4bec8acd4ade..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/callcontext/ContextServiceTest.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.callcontext; - -import static de.ozgcloud.alfa.common.callcontext.ContextService.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collection; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.context.ApplicationContext; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.RequestAttributes; -import de.ozgcloud.alfa.RequestAttributesTestFactory; -import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -class ContextServiceTest { - - static final String APPLICATION_ID = LoremIpsum.getInstance().getName(); - - @InjectMocks - private ContextService service; - - @Mock - private CurrentUserService userService; - @Mock - private ApplicationContext context; - @Spy - private RequestAttributes reqAttributes = RequestAttributesTestFactory.create(); - - @BeforeEach - void initMocks() { - when(context.getId()).thenReturn(APPLICATION_ID); - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - } - - @DisplayName("Get context metas") - @Nested - class TestGetContextMetas { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(any())).thenReturn(Boolean.TRUE); - } - - @Test - void shouldHaveUserId() { - var metadata = service.buildCallContextMetadata(); - - assertThat(GrpcUtil.getFromHeaders(KEY_USER_ID, metadata)).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - @Test - void shouldHaveUserName() { - var metadata = service.buildCallContextMetadata(); - - assertThat(GrpcUtil.getFromHeaders(KEY_USER_NAME, metadata)).isEqualTo(UserProfileTestFactory.FULLNAME); - } - - @Test - void shouldHaveClientName() { - var metadata = service.buildCallContextMetadata(); - - assertThat(GrpcUtil.getFromHeaders(KEY_CLIENT_NAME, metadata)).isEqualTo(APPLICATION_ID); - } - - @Test - void shouldLimitAccessToOrgaId() { - var metadata = service.buildCallContextMetadata(); - metadata.put(GrpcUtil.createKeyOf(KEY_ACCESS_LIMITED_ORGAID), "orgaid_2".getBytes()); - - assertThat(GrpcUtil.getCollection(KEY_ACCESS_LIMITED_ORGAID, metadata)).isInstanceOf(Collection.class).hasSize(2) - .contains(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID, "orgaid_2"); - } - - @DisplayName("access limited") - @Nested - class TestAccessLimitedByUserRole { - - @Test - void shouldHaveTrueOnRoleVerwaltungUser() { - when(userService.hasRole(anyString())).thenReturn(Boolean.FALSE); - - var metadata = service.buildCallContextMetadata(); - - assertThat(GrpcUtil.getFromHeaders(KEY_ACCESS_LIMITED, metadata)).isEqualTo(Boolean.TRUE.toString()); - } - - @Test - void shouldHaveFalseOnRoleVerwaltungPoststelle() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(Boolean.TRUE); - - var metadata = service.buildCallContextMetadata(); - - assertThat(GrpcUtil.getFromHeaders(KEY_ACCESS_LIMITED, metadata)).isEqualTo(Boolean.FALSE.toString()); - } - - @Test - void shouldHaveFalseOnRoleEinheitlicherAnsprechpartner() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(Boolean.FALSE); - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(Boolean.TRUE); - - var metadata = service.buildCallContextMetadata(); - - assertThat(GrpcUtil.getFromHeaders(KEY_ACCESS_LIMITED, metadata)).isEqualTo(Boolean.FALSE.toString()); - } - } - } - - @Nested - class TestCreateCallContest { - - @Test - void shouldCallContextGetApplicationName() { - service.createCallContext(); - - verify(context).getId(); - } - - @Test - void shouldContainClient() { - var callContext = service.createCallContext(); - - assertThat(callContext.getClient()).isEqualTo(APPLICATION_ID); - } - - @Test - void shouldCallUserService() { - service.createCallContext(); - - verify(userService).getUser(); - } - - @Test - void shoultHaveUserId() { - var context = service.createCallContext(); - - assertThat(context.getUser()).extracting(GrpcUser::getId).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - @Test - void shouldHaveFullName() { - var context = service.createCallContext(); - - assertThat(context.getUser()).extracting(GrpcUser::getName).isEqualTo(UserProfileTestFactory.FULLNAME); - } - - @Test - void shouldHaveRequestId() { - var context = service.createCallContext(); - - assertThat(context.getRequestId()).isEqualTo(RequestAttributesTestFactory.REQUEST_ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeRemoteServiceTest.java deleted file mode 100644 index 905ea76189b7249b36091e9ab3b70e132db2567d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeRemoteServiceTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcUpdateClientAttributeRequest; - -class ClientAttributeRemoteServiceTest { - private final ClientAttribute clientAttribute = ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT; - @Spy - @InjectMocks - private ClientAttributeRemoteService service; - - @Mock - private ClientAttributeServiceBlockingStub serviceStub; - - @Mock - private GrpcUpdateClientAttributeRequest request; - - @Nested - class TestSetBooleanReadOnlyClientAttribute { - private final Boolean value = false; - - @BeforeEach - void mockBuildRequest() { - doReturn(request).when(service).buildRequest(VorgangHeaderTestFactory.ID, clientAttribute, value); - } - - @Test - void shouldCallServiceStub() { - callService(); - - verify(serviceStub).update(request); - } - - @Test - void shouldCatchFunctionalException() { - when(serviceStub.update(any())).thenThrow(new RuntimeException()); - - assertDoesNotThrow(() -> callService()); - } - - private void callService() { - service.setBooleanReadOnlyClientAttribute(VorgangHeaderTestFactory.ID, clientAttribute, value); - } - } - - @Nested - class TestBuildRequest { - @Test - void shouldHaveAttribute() { - GrpcUpdateClientAttributeRequest request = callService(); - - assertThat(request.getAttribute()).isNotNull(); - } - - @Test - void shouldHaveVorgangId() { - GrpcUpdateClientAttributeRequest request = callService(); - - assertThat(request.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveAttributeName() { - GrpcUpdateClientAttributeRequest request = callService(); - - assertThat(request.getAttribute().getAttributeName()).isEqualTo(clientAttribute.getAttributeName()); - } - - @Test - void shouldHaveClientName() { - GrpcUpdateClientAttributeRequest request = callService(); - - assertThat(request.getAttribute().getClientName()).isEqualTo(clientAttribute.getClientName().toString()); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldHaveAttributeValue(boolean value) { - GrpcUpdateClientAttributeRequest request = callService(value); - - assertThat(request.getAttribute().getValue()).isNotNull(); - assertThat(request.getAttribute().getValue().getBoolValue()).isEqualTo(value); - } - - private GrpcUpdateClientAttributeRequest callService() { - return callService(false); - } - - private GrpcUpdateClientAttributeRequest callService(boolean value) { - return service.buildRequest(VorgangHeaderTestFactory.ID, clientAttribute, value); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeServiceTest.java deleted file mode 100644 index 59bd03ddbb440d66be7e8fb1c262cdaa0976692d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeServiceTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class ClientAttributeServiceTest { - @Spy - @InjectMocks - private ClientAttributeService service; - @Mock - private ClientAttributeRemoteService remoteService; - - @Nested - class TestResetNewPostfachNachricht { - private final ClientAttribute clientAttribute = ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT; - - @Test - void shouldCallRemoteService() { - service.resetPostfachNachricht(VorgangHeaderTestFactory.ID); - - verify(remoteService).setBooleanReadOnlyClientAttribute(VorgangHeaderTestFactory.ID, clientAttribute, false); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeUtilsTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeUtilsTest.java deleted file mode 100644 index 46a61a4ee166915dbf16f666ac21f85289c68b34..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/ClientAttributeUtilsTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import static org.assertj.core.api.Assertions.*; - -import java.util.List; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; - -class ClientAttributeUtilsTest { - private List<GrpcClientAttribute> attributeList; - - @Nested - class TestFind { - private GrpcClientAttribute expectedClientAttribute = GrpcClientAttributeTestFactory.create(); - - @Test - void shouldFindOne() { - attributeList = List.of( - GrpcClientAttributeTestFactory.createBuilder().setAttributeName("name1").setClientName("client1").build(), - GrpcClientAttributeTestFactory.createBuilder().setAttributeName(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT.getAttributeName()) - .setClientName(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT.getClientName().toString()).build()); - - var resultStream = ClientAttributeUtils.findGrpcValue(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, attributeList); - - assertThat(resultStream).contains(expectedClientAttribute.getValue()); - } - - @Test - void shouldNotFindOneDueToClientName() { - attributeList = List.of(GrpcClientAttributeTestFactory.createBuilder() - .setAttributeName(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT.getAttributeName()) - .setClientName("client2") - .build()); - - var resultStream = ClientAttributeUtils.findGrpcValue(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, attributeList); - - assertThat(resultStream).isEmpty(); - } - - @Test - void shouldNotFindOneDueToAttributeName() { - attributeList = List.of(GrpcClientAttributeTestFactory.createBuilder() - .setAttributeName("name2") - .setClientName(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT.getClientName().toString()) - .build()); - - var resultStream = ClientAttributeUtils.findGrpcValue(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, attributeList); - - assertThat(resultStream).isEmpty(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/GrpcClientAttributeTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/GrpcClientAttributeTestFactory.java deleted file mode 100644 index aa73dd563a41f81f9c1ed38e2f96592771cc7384..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/clientattribute/GrpcClientAttributeTestFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.clientattribute; - -import de.ozgcloud.alfa.common.callcontext.CallContextTestFactory; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; - -public class GrpcClientAttributeTestFactory { - static final GrpcAccessPermission ACCESS_PERMISSION = GrpcAccessPermission.READ_ONLY; - static final GrpcClientAttributeValue ATTRIBUTE_VALUE = GrpcClientAttributeValue.newBuilder().setBoolValue(true).build(); - - public static final String ATTRIBUTE_NAME = "testAttribute"; - public static final String CLIENT_NAME = CallContextTestFactory.CLIENT_NAME; - - public static GrpcClientAttribute create() { - return createBuilder().build(); - } - - public static GrpcClientAttribute.Builder createBuilder() { - return GrpcClientAttribute.newBuilder() - .setAccess(ACCESS_PERMISSION) - .setClientName(CLIENT_NAME) - .setAttributeName(ATTRIBUTE_NAME) - .setValue(ATTRIBUTE_VALUE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandBodyMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandBodyMapperTest.java deleted file mode 100644 index ec527fd0837547df369915e2a13ad3c3e149f744..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandBodyMapperTest.java +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.postfach.PostfachAddress; -import de.ozgcloud.alfa.postfach.PostfachAddressTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMail; -import de.ozgcloud.alfa.postfach.PostfachMailTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCommandBody; -import de.ozgcloud.vorgang.grpc.command.GrpcCommandBodyField; - -class CommandBodyMapperTest { - - private static final String FIELD = "FIELD"; - private static final String VALUE = "VALUE"; - - @Spy - private CommandBodyMapper mapper = Mappers.getMapper(CommandBodyMapper.class); - - @DisplayName("From object to map") - @Nested - class TestFromObjectToMap { - - @Test - void shouldMapAllValues() { - var commandAsObject = CommandTestFactory.create(); - - var mappedMap = mapper.fromObjectToMap(commandAsObject); - - assertThat(mappedMap) - .containsEntry("id", CommandTestFactory.ID) - .containsEntry("status", CommandTestFactory.STATUS.name()) - .containsEntry("order", CommandTestFactory.ORDER) - .containsEntry("relationId", CommandTestFactory.RELATION_ID) - .containsEntry("vorgangId", CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldNotMapClass() { - var commandAsObject = CommandTestFactory.create(); - - var mappedMap = mapper.fromObjectToMap(commandAsObject); - - assertThat(mappedMap).doesNotContainKey("class"); - } - - @Test - void shouldMapNullValue() { - var commandAsObject = CommandTestFactory.createBuilder().status(null).build(); - - var mappedMap = mapper.fromObjectToMap(commandAsObject); - - assertThat(mappedMap).containsEntry("status", null); - } - - @Test - void shouldNotMapVersion() { - var commandAsObject = WiedervorlageTestFactory.create(); - - var mappedMap = mapper.fromObjectToMap(commandAsObject); - - assertThat(mappedMap).doesNotContainKey("version"); - } - - @DisplayName("get value") - @Nested - class TestGetValue { - - @Test - void shouldMapPostfachMailMap() { - var postfachMailBody = PostfachMailTestFactory.create(); - - var mappedValue = mapper.getValue(postfachMailBody); - - assertThat(mappedValue).usingRecursiveComparison().isEqualTo(PostfachMailTestFactory.create()); - } - } - } - - @Nested - class TestMapToBody { - @Test - void shouldReturnEmptyBodyForNull() { - var result = mapper.mapToBody(null); - - assertThat(result).isNotNull(); - assertThat(result.getFieldList()).isEmpty(); - } - - @Test - void shouldReturnBodyWithField() { - var result = mapper.mapToBody(buildBodyMap()); - - assertThat(result.getFieldList()).hasSize(1); - assertThat(result.getFieldList().get(0).getName()).isEqualTo("FIELD"); - assertThat(result.getFieldList().get(0).getValue()).isEqualTo("VALUE"); - } - - private Map<String, String> buildBodyMap() { - return Map.of(FIELD, VALUE); - } - - @Test - void shouldFilterEntriesWithNullValue() { - var result = mapper.mapToBody(buildBodyMapWithNullValue()); - - assertThat(result.getFieldList()).isEmpty(); - } - - private Map<String, String> buildBodyMapWithNullValue() { - HashMap<String, String> bodyMap = new HashMap<>(); - bodyMap.put(FIELD, null); - return bodyMap; - } - } - - @Nested - class TestMapToBodyFields { - - @Captor - private ArgumentCaptor<Map<Object, Object>> mapCaptor; - - @Test - void shouldReturnEmptyListOnNull() { - var result = mapper.mapToBodyFields((CommandBody) null); - - assertThat(result).isEmpty(); - } - - @Test - void shouldContainFields() { - var fieldList = mapper.mapToBodyFields(PostfachMailTestFactory.create()); - - assertThat(fieldList).hasSize(13); - } - - @Test - void shouldNOTContainClassEntry() { - var fieldList = mapper.mapToBodyFields(PostfachMailTestFactory.create()); - - assertThat(fieldList).isNotEmpty().allMatch(field -> !StringUtils.equals(field.getName(), "class")); - } - - @Test - void shouldReturnField() { - var result = mapper.mapToBodyFields(buildBodyMap()); - - assertThat(result).hasSize(1); - assertThat(result.get(0).getName()).isEqualTo(FIELD); - assertThat(result.get(0).getValue()).isEqualTo(VALUE); - } - - private Map<Object, Object> buildBodyMap() { - return Map.of(FIELD, VALUE); - } - - @Test - void shouldMapNullAsEmptyValue() { - var result = mapper.mapToBodyFields(buildBodyMapWithNullValue()); - - assertThat(result).hasSize(1); - assertThat(result.get(0).getValue()).isEmpty(); - } - - private Map<Object, Object> buildBodyMapWithNullValue() { - HashMap<Object, Object> bodyMap = new HashMap<>(); - bodyMap.put(FIELD, null); - return bodyMap; - } - } - - @Nested - class TestMap { - - @Test - void shouldReturnMap() { - var result = mapper - .map(GrpcCommandBody.newBuilder().addField(GrpcCommandBodyField.newBuilder().setName(FIELD).setValue(VALUE).build()).build()); - - assertThat(result).hasSize(1).containsEntry(FIELD, VALUE); - } - } - - @DisplayName("map to body map") - @Nested - class TestMapToBodyMap { - - @DisplayName("for postfachMail") - @Nested - class TestForPostfachMail { - - private final CommandBody postfachMailCommandBody = PostfachMailTestFactory.create(); - private final CreateCommand command = CommandTestFactory.createCreateCommandBuilder().body(postfachMailCommandBody).build(); - private final String itemName = "PostfachMail"; - - @SuppressWarnings("unchecked") - @Test - void shouldMapFields() { - var bodyMap = mapToBodyMap(); - - var item = (Map<String, Object>) bodyMap.get(CommandBodyMapper.ITEM_PROPERTY); - assertThat(item).containsKey(PostfachMail.POSTFACH_ADDRESS_FIELD); - var postfachAddressMap = (Map<String, Object>) item.get(PostfachMail.POSTFACH_ADDRESS_FIELD); - assertThat((Integer) postfachAddressMap.get(PostfachAddress.TYPE_FIELD)).isEqualTo(PostfachAddressTestFactory.TYPE); - assertThat((String) postfachAddressMap.get(PostfachAddress.VERSION_FIELD)).isEqualTo(PostfachAddressTestFactory.VERSION); - } - - private Map<String, Object> mapToBodyMap() { - return mapper.mapToBodyMap(command, itemName); - } - } - - @DisplayName("for wiedervorlage") - @Nested - class TestForWiedervorlage { - - private final CommandBody wiedervorlageCommandBody = WiedervorlageTestFactory.create(); - private final CreateCommand command = CommandTestFactory.createCreateCommandBuilder().body(wiedervorlageCommandBody).build(); - private final String itemName = "Wiedervorlage"; - - @Test - void shouldContainsItemName() { - var mappedBody = mapToBodyMap(); - - var itemNameEntry = Map.entry(CommandBodyMapper.ITEM_NAME_PROPERTY, itemName); - assertThat(mappedBody).contains(itemNameEntry); - } - - @Test - void shouldContainsVorgangId() { - var mappedBody = mapToBodyMap(); - - var vorgangIdEntry = Map.entry(CommandBodyMapper.VORGANG_ID_PROPERTY, VorgangHeaderTestFactory.ID); - assertThat(mappedBody).contains(vorgangIdEntry); - } - - @Nested - class CreatedItem { - - @Test - void shouldContainsBetreff() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("betreff", WiedervorlageTestFactory.BETREFF)); - } - - @Test - void shouldContainsBeschreibung() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("beschreibung", WiedervorlageTestFactory.BESCHREIBUNG)); - } - - @Test - void shouldContainsFrist() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("frist", WiedervorlageTestFactory.FRIST)); - } - - @Test - void shouldContainsCreatedBy() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("createdBy", WiedervorlageTestFactory.CREATED_BY)); - } - - @Test - void shouldContainsCreatedAt() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("createdAt", WiedervorlageTestFactory.CREATED_AT)); - } - - @Test - void shouldContainsDone() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("done", WiedervorlageTestFactory.DONE)); - } - - @Test - void shouldContainsAttachments() { - var mappedItemMap = getMappedItemEntry(); - - assertThat(mappedItemMap).contains(Map.entry("attachments", List.of(BinaryFileTestFactory.FILE_ID))); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getMappedItemEntry() { - return (Map<String, Object>) mapToBodyMap().get(CommandBodyMapper.ITEM_PROPERTY); - } - } - - private Map<String, Object> mapToBodyMap() { - return mapper.mapToBodyMap(command, itemName); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandByRelationControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandByRelationControllerTest.java deleted file mode 100644 index 5027742b46a0daa8494613b632efb98b411e7b95..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandByRelationControllerTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static de.ozgcloud.alfa.common.command.CommandController.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.nio.charset.StandardCharsets; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -@DisplayName("Command by relation controller") -class CommandByRelationControllerTest { - - @Spy - @InjectMocks // NOSONAR - private CommandByRelationController controller; - @Mock - private CommandService service; - - private MockMvc mockMvc; - - @BeforeEach - void initMockMvc() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - @DisplayName("create Command by Vorgang") - class CreateCommandByVorgang { - - @Captor - private ArgumentCaptor<CreateCommand> createCommandCaptor; - - @BeforeEach - void initTest() { - when(service.createCommand(any(CreateCommand.class), anyLong())).thenReturn(CommandTestFactory.create()); - } - - @DisplayName("should return CREATED") - @Test - void returnCreated() throws Exception { - doRequest().andExpect(status().isCreated()); - } - - @DisplayName("should call service") - @Test - void callService() throws Exception { - doRequest(); - - verify(service).createCommand(createCommandCaptor.capture(), eq(CommandTestFactory.RELATION_VERSION)); - assertThat(createCommandCaptor.getValue().getOrder()).isEqualTo(CommandTestFactory.ORDER); - assertThat(createCommandCaptor.getValue().getVorgangId()).isEqualTo(CommandTestFactory.VORGANG_ID); - assertThat(createCommandCaptor.getValue().getRelationId()).isEqualTo(CommandTestFactory.RELATION_ID); - assertThat(createCommandCaptor.getValue().getRelationVersion()).isZero(); - } - - @DisplayName("should have location header") - @Test - void locationHeader() throws Exception { - doRequest() - .andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID)); - } - - private ResultActions doRequest() throws Exception { - return doRequest( - TestUtils.loadTextFile("jsonTemplates/command/createVorgangCommand.json.tmpl", CommandTestFactory.ORDER)); - } - - private ResultActions doRequest(String content) throws Exception { - return mockMvc - .perform(post(CommandByRelationController.COMMAND_BY_RELATION_PATH, VorgangHeaderTestFactory.ID, CommandTestFactory.RELATION_ID, - CommandTestFactory.RELATION_VERSION) - .contentType(MediaType.APPLICATION_JSON) - .characterEncoding(StandardCharsets.UTF_8.name()) - .content(content)) - .andExpect(status().is2xxSuccessful()); - } - } - - @DisplayName("Create by vorgang with relation id") - @Nested - class TestCreateByVorgang { - - private final CreateCommand command = CommandTestFactory.createCreateCommand(); - - @Test - void shouldCallSerice() { - controller.createCommand(command); - - verify(service).createCommand(command); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandControllerTest.java deleted file mode 100644 index 713476ea123bc88ca00e1bbb16b24270e9330d77..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandControllerTest.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static de.ozgcloud.alfa.common.command.CommandController.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.errorhandling.ExceptionController; -import de.ozgcloud.alfa.common.errorhandling.ProblemDetailMapper; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -class CommandControllerTest { - - @InjectMocks // NOSONAR - private CommandController controller; - @Mock - private CommandService service; - @Mock - private CommandModelAssembler modelAssembler; - @Mock - private ProblemDetailMapper problemDetailMapper; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ExceptionController(problemDetailMapper)).build(); - } - - @Nested - class TestGetCommand { - - private final Command command = CommandTestFactory.create(); - - @BeforeEach - void initTest() { - when(service.getById(anyString())).thenReturn(command); - } - - @Test - void shouldReturnOk() throws Exception { - doRequest().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - doRequest(); - - verify(service).getById(CommandTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - doRequest(); - - verify(modelAssembler).toModel(command); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(CommandController.COMMANDS_PATH + "/" + CommandTestFactory.ID)).andExpect(status().is2xxSuccessful()); - } - } - - @Nested - @DisplayName("Revoke Command") - class TestRevokeCommand { - - @Test - void shouldReturnOk() throws Exception { - when(service.revoke(anyString())).thenReturn(CommandTestFactory.create()); - - doRequest(CommandStatus.REVOKED).andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - when(service.revoke(anyString())).thenReturn(CommandTestFactory.create()); - - doRequest(CommandStatus.REVOKED); - - verify(service).revoke(CommandTestFactory.ID); - } - - @Test - void shouldReturnForbiddenForOtherStatus() throws Exception { - doRequest(CommandStatus.FINISHED).andExpect(status().isForbidden()); - } - - private ResultActions doRequest(CommandStatus statusToPatch) throws Exception { - return mockMvc.perform(patch(COMMANDS_PATH + "/" + CommandTestFactory.ID).contentType(MediaType.APPLICATION_JSON) - .content(TestUtils.loadTextFile("jsonTemplates/command/patchStatus.json", statusToPatch.name()))); - - } - } - - @Nested - class TestExistsPendingCommands { - - @Test - void shouldCallService() { - controller.existsPendingCommands(VorgangHeaderTestFactory.ID); - - verify(service).existsPendingCommands(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestGetPendingCommands { - - private final Command command = CommandTestFactory.create(); - private final Stream<Command> pendingCommands = Stream.of(command); - - @BeforeEach - void initTest() { - when(service.getPendingCommands(anyString())).thenReturn(pendingCommands); - } - - @Test - void shouldReturnOk() throws Exception { - doRequest().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - doRequest(); - - verify(service).getPendingCommands(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - doRequest(); - - verify(modelAssembler).toCollectionModel(pendingCommands); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(CommandController.COMMANDS_PATH) - .param(CommandController.PARAM_PENDING, Boolean.toString(true)) - .param(CommandController.PARAM_VORGANG_ID, VorgangHeaderTestFactory.ID)) - .andExpect(status().is2xxSuccessful()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java deleted file mode 100644 index d6cb0b73c7bd7d7108e61664307d81694bc560b8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMailTestFactory; -import de.ozgcloud.alfa.vorgang.RedirectRequestTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import de.ozgcloud.common.test.TestUtils; - -@AutoConfigureMockMvc -@SpringBootTest -public class CommandITCase { - - @Autowired - private MockMvc mockMvc; - @MockBean - private CommandRemoteService commandRemoteService; - @MockBean - private VorgangController vorgangController; - - @Nested - @WithMockUser - class TestAssignUser { - - @Captor - private ArgumentCaptor<CreateCommand> commandCaptor; - - @BeforeEach - void initTests() { - when(commandRemoteService.createCommand(any())).thenReturn(CommandTestFactory.create()); - } - - @Test - void shouldExtractUserId() throws Exception { - createCommand(); - - verify(commandRemoteService).createCommand(commandCaptor.capture()); - assertThat(commandCaptor.getValue().getBody()).hasFieldOrPropertyWithValue("assignedTo", UserProfileTestFactory.ID); - } - - private void createCommand() throws Exception { - mockMvc.perform(post(buildUrl()).with(csrf()).content(createContent()).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isCreated()); - } - - private String createContent() { - return CommandTestFactory.buildCreateCommandWithBodyContent(CommandOrder.ASSIGN_USER, - TestUtils.loadTextFile("jsonTemplates/command/commandAssignedToBody", - TestUtils.addQuote("/api/users/" + UserProfileTestFactory.ID.toString()))); - } - - private String buildUrl() { - return String.format("/api/vorgangs/%s/relations/%s/%d/commands", VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, - VorgangHeaderTestFactory.VERSION); - } - } - - @DisplayName("Validation") - @Nested - class TestValidation { - - @DisplayName("of forwarding request") - @WithMockUser - @Nested - class TestRedirectRequest { - - @DisplayName("with null/empty email") - @WithMockUser - @Nested - class TestOnNullOrEmptyEmail { - - @Test - void shouldThrowErrorForEmailOnly() throws Exception { - var requestContent = buildRedirectRequest(RedirectRequestTestFactory.createBuilder() - .password(ArrayUtils.EMPTY_CHAR_ARRAY) - .email(null).build()); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.redirectRequest.email")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - } - - @DisplayName("with invalid email and password") - @WithMockUser - @Nested - class TestOnInvalidEmailAndPassword { - - @Test - void shouldThrowExceptionForEachOne() throws Exception { - var requestContent = buildRedirectRequest(RedirectRequestTestFactory.createBuilder() - .password(ArrayUtils.EMPTY_CHAR_ARRAY) - .email("local@@domain.com") - .build()); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(2)); - } - } - - @WithMockUser - @Nested - class TestEmail { - - private static final String FIELD = "email"; - - @Test - void shouldReturnErrorOnNullEMail() throws Exception { - var requestContent = buildRedirectRequestWithEmail(null); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.redirectRequest." + FIELD)) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @Test - void shouldReturnErrorOnInvalidEMail() throws Exception { - var requestContent = buildRedirectRequestWithEmail("local@@domain.com"); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.redirectRequest." + FIELD)) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_INVALID)); - } - - private String buildRedirectRequestWithEmail(String eMail) { - return buildRedirectRequest(RedirectRequestTestFactory.createBuilder().email(eMail).build()); - } - } - - @WithMockUser - @Nested - class TestPassword { - - private final String FIELD = "password"; - - @Test - void shouldReturnErrorOnToShortPassword() throws Exception { - var requestContent = buildRedirectRequestWithPassword(RandomStringUtils.randomAlphabetic(7)); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.redirectRequest." + FIELD)) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_SIZE)) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters[0].name").value("min")) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters[0].value").value(8)) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters[1].name").value("max")) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters[1].value").value(40)); - } - - @Test - void shouldReturnErrorOnToLongPassword() throws Exception { - var requestContent = buildRedirectRequestWithPassword(RandomStringUtils.randomAlphabetic(41)); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.redirectRequest." + FIELD)) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_SIZE)); - } - - private String buildRedirectRequestWithPassword(String password) { - return buildRedirectRequest(RedirectRequestTestFactory.createBuilder().password(password.toCharArray()).build()); - } - } - - private String buildRedirectRequest(RedirectRequest request) { - return RedirectRequestTestFactory - .createRedirectRequestContent(CommandTestFactory.createCreateCommandBuilder().redirectRequest(request).build()); - } - } - - @WithMockUser - @Nested - class TestPostfachMail { - - @BeforeEach - void mockVorgangController() { - when(vorgangController.getVorgang(anyString())).thenReturn(VorgangWithEingangTestFactory.create()); - } - - @WithMockUser - @Nested - class TestSubject { - - @BeforeEach - void initMockCommand() { - when(commandRemoteService.createCommand(any(CreateCommand.class))).thenReturn(CommandTestFactory.create()); - } - - @Test - void shouldReturnErrorOnNullSubject() throws Exception { - var requestContent = PostfachMailTestFactory - .buildSendPostfachMailContent(PostfachMailTestFactory.createBuilder().subject(null).build()); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.body.subject")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @Test - void shouldReturnErrorOnTooLongSubject() throws Exception { - var requestContent = PostfachMailTestFactory - .buildSendPostfachMailContent( - PostfachMailTestFactory.createBuilder().subject(RandomStringUtils.randomAlphanumeric(71)).build()); - - doRequest(requestContent).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.body.subject")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_MAX_SIZE)); - } - - @Test - void shouldProceedOnValidSubject() throws Exception { - var requestContent = PostfachMailTestFactory.buildSendPostfachMailContent(); - - doRequest(requestContent).andExpect(status().isCreated()); - } - } - - @WithMockUser - @Nested - class TestMailBody { - - @Test - void shouldReturnErrorOnNull() throws Exception { - var request = PostfachMailTestFactory - .buildSendPostfachMailContent(PostfachMailTestFactory.createBuilder().mailBody(null).build()); - - doRequest(request).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createCommand.command.body.mailBody")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @Test - void shouldProceedOnValidInput() throws Exception { - when(commandRemoteService.createCommand(any(CreateCommand.class))).thenReturn(CommandTestFactory.create()); - - var content = PostfachMailTestFactory.buildSendPostfachMailContent(); - - doRequest(content).andExpect(status().isCreated()); - } - } - } - - ResultActions doRequest(String content) throws Exception { - return mockMvc.perform(post("/api/vorgangs/" + CommandTestFactory.VORGANG_ID + "/relations/" + CommandTestFactory.RELATION_ID + "/" - + CommandTestFactory.RELATION_VERSION + "/commands") - .with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandMapperTest.java deleted file mode 100644 index 4cf5ef1cdaaabf01716b0b2c73a8f961ca151930..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandMapperTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.TimeMapper; -import de.ozgcloud.alfa.common.callcontext.CallContextMapper; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.alfa.vorgang.RedirectRequestTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest; - -class CommandMapperTest { - - @InjectMocks - private CommandMapper mapper = Mappers.getMapper(CommandMapper.class); - @Mock - private UserIdMapper userIdMapper; - @Mock - private GrpcObjectMapper grpcObjectMapper; - @Mock - private CommandBodyMapper bodyMapper; - @Mock - private TimeMapper timeMapper; - @Mock - private CallContextMapper callContextMapper; - - @Test - void shouldMapNonEnumOrder() { - var command = mapper.toCommand(GrpcCommandTestFactory.createBuilder() - .setOrderString(CommandOrder.SEND_POSTFACH_NACHRICHT.name()) - .build()); - - assertThat(command.getCommandOrder()).isEqualTo(CommandOrder.SEND_POSTFACH_NACHRICHT); - } - - @DisplayName("Map from grpc to command") - @Nested - class TestToCommand { - - @DisplayName("redirect request") - @Nested - class TestRedirectRequest { - - @Test - void shouldMapPasswordIfExists() { - var command = mapper.toCommand(GrpcCommandTestFactory.createBuilder() - .setRedirectRequest(GrpcRedirectRequest.newBuilder() - .setPassword(RedirectRequestTestFactory.PASSWORD_AS_STR) - .setEmail(RedirectRequestTestFactory.EMAIL) - .build()) - .build()); - - assertThat(command.getRedirectRequest().getPassword()).isEqualTo(RedirectRequestTestFactory.PASSWORD); - assertThat(command.getRedirectRequest().getEmail()).isEqualTo(RedirectRequestTestFactory.EMAIL); - } - - @Test - void shouldNotMapPasswordIfEmpty() { - var command = mapper.toCommand(GrpcCommandTestFactory.createBuilder() - .setRedirectRequest(GrpcRedirectRequest.newBuilder() - .setEmail(RedirectRequestTestFactory.EMAIL) - .build()) - .build()); - - assertThat(command.getRedirectRequest().getPassword()).isNull(); - assertThat(command.getRedirectRequest().getEmail()).isEqualTo(RedirectRequestTestFactory.EMAIL); - } - } - } - - @DisplayName("Map Body") - @Nested - class TestMapBody { - - private GrpcCommand command = GrpcCommandTestFactory.create(); - - @DisplayName("on existing body object at command") - @Nested - class TestOnExistingBodyObject { - - @Test - void shouldCallGrpcObjectMapper() { - mapper.mapBody(command); - - verify(grpcObjectMapper).mapFromGrpc(command.getBodyObj()); - } - - @Test - void shouldMapFromCommandBodyObject() { - var bodyObjectMap = Map.<String, Object>of("test-key", "test-value"); - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(bodyObjectMap); - - var result = mapper.mapBody(command); - - assertThat(result).isEqualTo(bodyObjectMap); - } - } - - @DisplayName("on empty body object at command") - @Nested - class TestOnEmptyBodyObject { - - private Map<String, String> mappedBody = Map.of("test-key", "test-value"); - - @BeforeEach - void mockMapper() { - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(Collections.emptyMap()); - when(bodyMapper.map(any())).thenReturn(mappedBody); - } - - @Test - void shouldCallBodyMapper() { - mapper.mapBody(command); - - verify(bodyMapper).map(command.getBody()); - } - - @Test - void shouldReturnMappedResult() { - var result = mapper.mapBody(command); - - assertThat(result).isEqualTo(mappedBody); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java deleted file mode 100644 index 01567b0ff4b2aadac73038fcec78b3ba327a479c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static de.ozgcloud.alfa.common.command.CommandModelAssembler.*; -import static de.ozgcloud.alfa.common.command.CommandTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.springframework.context.ApplicationContext; -import org.springframework.core.env.Environment; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class CommandModelAssemblerTest { - - private static final String COMMAND_SINGLE_PATH = "/api/commands/" + CommandTestFactory.ID; - - @InjectMocks - private CommandModelAssembler modelAssembler; - - @BeforeEach - void init() { - var applicationContext = mock(ApplicationContext.class); - lenient().when(applicationContext.getEnvironment()).thenReturn(mock(Environment.class)); - new UserProfileUrlProvider().setApplicationContext(applicationContext); - } - - @Test - void shouldHaveSelfLink() { - var model = modelAssembler.toModel(CommandTestFactory.create()); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref).isEqualTo(COMMAND_SINGLE_PATH); - } - - @Nested - @DisplayName("Link to effected Resource") - class TestEffectedResourceLink { - - @DisplayName("on vorgang") - @Nested - class TestOnVorgang { - - private static final String VORGANG_URL = "/api/vorgangs/" + RELATION_ID; - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "FINISHED", "REVOKED" }) - void shouldBePresentOnStatus(CommandStatus status) { - var model = toModelWithStatus(status); - - assertThat(model.getLink(REL_EFFECTED_RESOURCE)).isPresent().get().extracting(Link::getHref).isEqualTo(VORGANG_URL); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "FINISHED", "REVOKED", "ERROR" }) - void shouldNOTbePresentOtherWise(CommandStatus status) { - var model = toModelWithStatus(status); - - assertThat(model.getLink(REL_EFFECTED_RESOURCE)).isEmpty(); - } - - private EntityModel<Command> toModelWithStatus(CommandStatus status) { - return modelAssembler.toModel(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_ANNEHMEN.name()).status(status).build()); - } - } - - @DisplayName("on forwarding") - @Nested - class TestOnForwarding { - - private static final String FORWARDING_URL = "/api/forwardings?vorgangId=" + VorgangHeaderTestFactory.ID; - - @ParameterizedTest - @ValueSource(strings = { "FORWARD_SUCCESSFULL", "FORWARD_FAILED", "REDIRECT_VORGANG" }) - void shouldHaveLinkToForwarding(String order) { - var model = toModelWithOrder(order); - - assertThat(model.getLink(CommandModelAssembler.REL_EFFECTED_RESOURCE)).isPresent().get() - .extracting(Link::getHref).isEqualTo(FORWARDING_URL); - } - } - - @DisplayName("on postfach") - @Nested - class TestOnPostfach { - - private static final String POSTFACH_URL = "/api/postfachMails?vorgangId=" + VorgangHeaderTestFactory.ID; - - @ParameterizedTest - @ValueSource(strings = { "SEND_POSTFACH_MAIL" }) - void shouldHaveLinkToPostfach(String order) { - var model = toModelWithOrder(order); - - assertThat(model.getLink(CommandModelAssembler.REL_EFFECTED_RESOURCE)).isPresent().get() - .extracting(Link::getHref).isEqualTo(POSTFACH_URL); - } - } - - @DisplayName("on bescheid") - @Nested - class TestOnBescheid { - - private static final String BESCHEID_URL = "/api/bescheids?vorgangId=" + VorgangHeaderTestFactory.ID; - - @ParameterizedTest - @ValueSource(strings = { "CREATE_BESCHEID", "UPDATE_BESCHEID" }) - void shouldHaveLinkToBescheidDokument(String order) { - var model = modelAssembler - .toModel(CommandTestFactory.createBuilder().order(order).createdResource(RELATION_ID).build()); - - assertThat(model.getLink(CommandModelAssembler.REL_EFFECTED_RESOURCE)).isPresent().get() - .extracting(Link::getHref).isEqualTo(BESCHEID_URL); - } - } - - @DisplayName("on document") - @Nested - class TestOnDocument { - - private static final String DOCUMENT_URL = "/api/bescheids/documents/" + RELATION_ID; - - @Test - void shouldHaveLinkToBescheidDokument() { - var model = modelAssembler.toModel( - CommandTestFactory.createBuilder().order(CommandOrder.CREATE_BESCHEID_DOCUMENT_FROM_FILE.name()) - .createdResource(RELATION_ID) - .build()); - - assertThat(model.getLink(CommandModelAssembler.REL_EFFECTED_RESOURCE)).isPresent().get() - .extracting(Link::getHref).isEqualTo(DOCUMENT_URL); - } - } - - @DisplayName("on collaboration") - @Nested - class TestOnCollaboration { - - private static final String COLLABORATIONS_URL = "/api/vorgangs/" + VORGANG_ID + "/collaborations"; - - @Test - void shouldHaveLinkToCollaborations() { - var model = toModelWithOrder("CREATE_COLLABORATION_REQUEST"); - - assertThat(model.getLink(CommandModelAssembler.REL_EFFECTED_RESOURCE)).isPresent().get() - .extracting(Link::getHref).isEqualTo(COLLABORATIONS_URL); - } - } - - @DisplayName("on unknown Order") - @Nested - class TestOnUnknownOrder { - @Test - void shouldNotAddEffectedResourceLink() { - var model = modelAssembler.toModel( - CommandTestFactory.createBuilder().order("UnknownOrder") - .createdResource(RELATION_ID) - .build()); - - assertThat(model.getLink(CommandModelAssembler.REL_EFFECTED_RESOURCE)).isNotPresent(); - } - - @Nested - class TestEffectedResourceLinkByOrderType { - @Test - void shouldThrowIllegalArgumentException() { - var command = CommandTestFactory.createBuilder().order("UnknownOrder") - .createdResource(RELATION_ID) - .build(); - - assertThrows(IllegalArgumentException.class, () -> modelAssembler.effectedResourceLinkByOrderType(command)); - } - } - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "UNBEKANNT" }) - void shouldBeAbleToBuildLinkForEveryOrder(CommandOrder order) { - var link = modelAssembler.effectedResourceLinkByOrderType(CommandTestFactory.createBuilder().order(order.name()).build()); - - assertThat(link).isNotNull(); - } - - @Test - void shouldAddLinkForTypeVORGANG_LIST() { - var link = modelAssembler - .effectedResourceLinkByOrderType(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_LOESCHEN.name()).build()); - - assertThat(link.getHref()).isEqualTo("/api/vorgangs"); - } - } - - @DisplayName("Revoke link") - @Nested - class TestRevokeLink { - - @DisplayName("related to command") - @Nested - class TestRelatedToCommand { - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "REDIRECT_VORGANG", "FORWARD_SUCCESSFULL", - "FORWARD_FAILED", "ASSIGN_USER", "SEND_POSTFACH_MAIL", "SEND_POSTFACH_NACHRICHT", "RESEND_POSTFACH_MAIL", "CREATE_ATTACHED_ITEM", - "UPDATE_ATTACHED_ITEM", "PATCH_ATTACHED_ITEM", "RECEIVE_POSTFACH_NACHRICHT", "VORGANG_LOESCHEN", "DELETE_ATTACHED_ITEM", - "VORGANG_ZUM_LOESCHEN_MARKIEREN", "LOESCH_ANFORDERUNG_ZURUECKNEHMEN", "CREATE_BESCHEID", "PROCESS_VORGANG", "SET_AKTENZEICHEN", - "DELETE_BESCHEID", "UPDATE_BESCHEID", "CREATE_BESCHEID_DOCUMENT_FROM_FILE", "CREATE_BESCHEID_DOCUMENT", "SEND_BESCHEID", - "UNBEKANNT", "CREATE_COLLABORATION_REQUEST" }) - void shouldBePresentOnOrder(CommandOrder order) { - var model = toModelWithOrder(order.name()); - - assertThat(model.getLink(REL_REVOKE)).isPresent().get().extracting(Link::getHref).isEqualTo(COMMAND_SINGLE_PATH); - } - } - - @DisplayName("related to loeschAnforderung") - @Nested - class TestRelatedToLoeschAnforderung { - - @ParameterizedTest - @ValueSource(strings = { "VORGANG_ZUM_LOESCHEN_MARKIEREN", "LOESCH_ANFORDERUNG_ZURUECKNEHMEN" }) - void shouldNotBePresentOnOrder(String order) { - var model = toModelWithOrder(order); - - assertThat(model.getLink(REL_REVOKE)).isNotPresent(); - } - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "VORGANG_ANNEHMEN", "VORGANG_VERWERFEN", "VORGANG_ZURUECKHOLEN", "VORGANG_BEARBEITEN", - "VORGANG_BESCHEIDEN", "VORGANG_ZURUECKSTELLEN", "VORGANG_ABSCHLIESSEN", "VORGANG_WIEDEREROEFFNEN", "VORGANG_ZUM_LOESCHEN_MARKIEREN", - "LOESCH_ANFORDERUNG_ZURUECKNEHMEN" }) - void shouldNOTBePresentOnOrder(CommandOrder order) { - var model = toModelWithOrder(order.name()); - - assertThat(model.getLink(REL_REVOKE)).isNotPresent(); - } - - @Test - void shouldNotHaveLinkIfCommandFailed() { - var command = CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_ANNEHMEN.name()).status(CommandStatus.ERROR).build(); - var model = modelAssembler.toModel(command); - - assertThat(model.getLink(REL_REVOKE)).isNotPresent(); - } - } - - private EntityModel<Command> toModelWithOrder(String order) { - return modelAssembler.toModel(CommandTestFactory.createBuilder().order(order).build()); - } - - @DisplayName("Update link") - @Nested - class TestUpdateLink { - - @ParameterizedTest - @EnumSource(names = { "PENDING", "REVOKE_PENDING" }) - void shouldHave(CommandStatus status) { - var model = modelAssembler.toModel(CommandTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(REL_UPDATE)).isPresent().get().extracting(Link::getHref).isEqualTo(COMMAND_SINGLE_PATH); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "PENDING", "REVOKE_PENDING" }) - void shouldNotHaveLink(CommandStatus status) { - var model = modelAssembler.toModel(CommandTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(REL_UPDATE)).isNotPresent(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandOrderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandOrderTest.java deleted file mode 100644 index 6f047c1566a1a68dce2883ad810f91b48c69f345..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandOrderTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; - -class CommandOrderTest { - @Nested - class TestGetOrder { - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "UNBEKANNT" }) - void shouldReturnCommandOrder(CommandOrder order) { - var resultOrder = CommandOrder.fromOrder(order.name()); - - assertThat(resultOrder).isEqualTo(order); - } - - @Test - void shouldReturnUnknown() { - var resultOrder = CommandOrder.fromOrder("SOME_UNKNOWN_ORDER"); - - assertThat(resultOrder).isEqualTo(CommandOrder.UNBEKANNT); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandRemoteServiceTest.java deleted file mode 100644 index 459c21226fe0334d1eed41b9212b054ba289de45..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandRemoteServiceTest.java +++ /dev/null @@ -1,551 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apache.commons.lang3.ArrayUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.vorgang.RedirectRequestTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectTestFactory; -import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse; -import de.ozgcloud.vorgang.grpc.command.GrpcCommandsResponse; -import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcExistsPendingCommandsRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcExistsPendingCommandsResponse; -import de.ozgcloud.vorgang.grpc.command.GrpcFindCommandsRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsResponse; -import de.ozgcloud.vorgang.grpc.command.GrpcRevokeCommandRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcSetCommandExecutedRequest; - -class CommandRemoteServiceTest { - - @Spy - @InjectMocks - private CommandRemoteService service; - @Mock - private CommandServiceBlockingStub commandServiceStub; - @Mock - private CommandMapper mapper; - @Mock - private CommandBodyMapper bodyMapper; - @Mock - private GrpcObjectMapper grpcObjectMapper; - @Mock - private ContextService contextService; - - private GrpcCallContext grpcCallContext = GrpcCallContext.newBuilder().build(); - - @Nested - @DisplayName("Create CreateCommand") - class TestCreateCommand { - - private GrpcCreateCommandRequest request = GrpcCreateCommandRequest.newBuilder().build(); - private CreateCommand createCommand = CommandTestFactory.createCreateCommand(); - - @Nested - class CallGrpcEndpoint { - - private Command resultCommand = CommandTestFactory.create(); - - @BeforeEach - void initTest() { - doReturn(request).when(service).buildCreateCommandRequest(any()); - when(commandServiceStub.createCommand(any())).thenReturn(GrpcCommandResponse.newBuilder().build()); - when(mapper.toCommand(any())).thenReturn(resultCommand); - } - - @Test - void shouldCreateRequest() { - service.createCommand(createCommand); - - verify(service).buildCreateCommandRequest(createCommand); - } - - @Test - void shouldCallServiceStub() { - service.createCommand(createCommand); - - verify(commandServiceStub).createCommand(request); - } - - @Test - void shouldReturnResultCommand() { - var result = service.createCommand(createCommand); - - assertThat(result).isSameAs(resultCommand); - } - } - - @DisplayName("build request") - @Nested - class TestBuildRequest { - - @BeforeEach - void initTest() { - when(contextService.createCallContext()).thenReturn(grpcCallContext); - when(grpcObjectMapper.fromMap(any())).thenReturn(GrpcObjectTestFactory.create()); - } - - @Test - void shouldCreateRequest() { - var request = buildRequest(); - - assertThat(request).isNotNull(); - } - - @Test - void shouldHaveOrderString() { - var request = buildRequest(); - - assertThat(request.getOrderString()).isEqualTo(CommandTestFactory.ORDER); - } - - @Test - void shouldHaveCallContext() { - var request = buildRequest(); - - assertThat(request.getCallContext()).isSameAs(grpcCallContext); - } - - @Test - void shouldHaveRelationId() { - var request = buildRequest(); - - assertThat(request.getRelationId()).isEqualTo(CommandTestFactory.RELATION_ID); - } - - @Test - void shouldHaveVorgangId() { - var request = buildRequest(); - - assertThat(request.getVorgangId()).isEqualTo(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldCallBodyMapper() { - buildRequest(); - - verify(bodyMapper).fromObjectToMap(any(CommandBody.class)); - } - - @Test - void shouldCallObjectMapper() { - buildRequest(); - - verify(grpcObjectMapper).fromMap(any()); - } - - @Test - void shouldHaveVersion() { - var request = buildRequest(); - - assertThat(request.getRelationVersion()).isEqualTo(CommandTestFactory.RELATION_VERSION); - } - - @Test - void shouldHaveRedirectRequest() { - var command = CommandTestFactory.createCreateCommandBuilder().body(null).redirectRequest(RedirectRequestTestFactory.create()).build(); - - var request = service.buildCreateCommandRequest(command); - - assertThat(request.getRedirectRequest().getPassword()).isEqualTo(RedirectRequestTestFactory.PASSWORD_AS_STR); - assertThat(request.getRedirectRequest().getEmail()).isEqualTo(RedirectRequestTestFactory.EMAIL); - } - - @ParameterizedTest - @EnumSource - void shouldHaveOrder(CommandOrder order) { - var request = service.buildCreateCommandRequest(CommandTestFactory.createCreateCommandBuilder().order(order.name()).build()); - - assertThat(request.getOrderString()).isEqualTo(order.name()); - } - - private GrpcCreateCommandRequest buildRequest() { - return service.buildCreateCommandRequest( - CommandTestFactory.createCreateCommandBuilder().body(WiedervorlageTestFactory.create()).build()); - } - } - - @DisplayName("build forward request") - @Nested - class TestBuildForwardRequest { - - @Test - void shouldNotSetPassword() { - var request = RedirectRequestTestFactory.createBuilder().password(ArrayUtils.EMPTY_CHAR_ARRAY).build(); - - var result = service.buildForwardRequest(request); - - assertThat(result.getPassword()).isBlank(); - } - - @Test - void shouldSetPassword() { - var request = RedirectRequestTestFactory.createBuilder().password(RedirectRequestTestFactory.PASSWORD).build(); - - var result = service.buildForwardRequest(request); - - assertThat(result.getPassword()).isEqualTo(RedirectRequestTestFactory.PASSWORD_AS_STR); - } - - @Test - void shouldSetEmail() { - var request = RedirectRequestTestFactory.create(); - - var result = service.buildForwardRequest(request); - - assertThat(result.getEmail()).isEqualTo(RedirectRequestTestFactory.EMAIL); - } - } - } - - @Nested - @DisplayName("Revoke Command") - class TestRevokeCommand { - - @Nested - class CreateRequest { - - @BeforeEach - void initTest() { - when(contextService.createCallContext()).thenReturn(grpcCallContext); - } - - @Test - void shouldReturnRequest() { - var request = service.createRevokeRequest(CommandTestFactory.ID); - - assertThat(request).isNotNull().isInstanceOf(GrpcRevokeCommandRequest.class); - } - - @Test - void shouldHaveCallContext() { - var request = service.createRevokeRequest(CommandTestFactory.ID); - - assertThat(request.getContext()).isNotNull().isSameAs(grpcCallContext); - verify(contextService).createCallContext(); - } - - @Test - void shouldHaveCommandId() { - var request = service.createRevokeRequest(CommandTestFactory.ID); - - assertThat(request.getId()).isEqualTo(CommandTestFactory.ID); - } - } - - @Nested - class SendRequest { - - private GrpcRevokeCommandRequest request = GrpcRevokeCommandRequest.newBuilder().build(); - - @BeforeEach - void initTest() { - doReturn(request).when(service).createRevokeRequest(anyString()); - when(commandServiceStub.revokeCommand(any())).thenReturn(GrpcCommandResponse.newBuilder().build()); - } - - @Test - void shouldCreateRequest() { - service.revokeCommand(CommandTestFactory.ID); - - verify(service).createRevokeRequest(CommandTestFactory.ID); - } - - @Test - void shouldCallGrpc() { - service.revokeCommand(CommandTestFactory.ID); - - verify(commandServiceStub).revokeCommand(request); - } - - @Test - void shouldMapCommand() { - service.revokeCommand(CommandTestFactory.ID); - - verify(mapper).toCommand(any()); - } - } - } - - @Nested - @DisplayName("Get command") - class TestGetCommand { - - @Nested - class CreateRequest { - - @BeforeEach - void initTest() { - when(contextService.createCallContext()).thenReturn(grpcCallContext); - } - - @Test - void shouldReturnRequest() { - var request = service.createGetCommandRequest(CommandTestFactory.ID); - - assertThat(request).isNotNull().isInstanceOf(GrpcGetCommandRequest.class); - } - - @Test - void shouldHaveCallContext() { - var request = service.createGetCommandRequest(CommandTestFactory.ID); - - assertThat(request.getContext()).isNotNull().isSameAs(grpcCallContext); - verify(contextService).createCallContext(); - } - - @Test - void shouldHaveCommandId() { - var request = service.createGetCommandRequest(CommandTestFactory.ID); - - assertThat(request.getId()).isEqualTo(CommandTestFactory.ID); - } - } - - @DisplayName("send request") - @Nested - class SendRequest { - - private GrpcGetCommandRequest request = GrpcGetCommandRequest.newBuilder().build(); - - @BeforeEach - void initTest() { - doReturn(request).when(service).createGetCommandRequest(anyString()); - when(commandServiceStub.getCommand(any())).thenReturn(GrpcCommand.newBuilder().build()); - } - - @Test - void shouldCreateRequest() { - service.getCommand(CommandTestFactory.ID); - - verify(service).createGetCommandRequest(CommandTestFactory.ID); - } - - @Test - void shouldCallGrpc() { - service.getCommand(CommandTestFactory.ID); - - verify(commandServiceStub).getCommand(request); - } - - @Test - void shouldMapCommand() { - service.getCommand(CommandTestFactory.ID); - - verify(mapper).toCommand(any()); - } - } - } - - @Nested - class TestExistsPendingCommands { - - private final GrpcExistsPendingCommandsRequest request = GrpcExistsPendingCommandsRequest.newBuilder() - .setContext(grpcCallContext) - .setVorgangId(VorgangHeaderTestFactory.ID).build(); - - @BeforeEach - void mockServiceStub() { - when(commandServiceStub.existsPendingCommands(any())) - .thenReturn(GrpcExistsPendingCommandsResponse.newBuilder().setExistsPendingCommands(true).build()); - - when(contextService.createCallContext()).thenReturn(grpcCallContext); - } - - @Test - void shouldCallServiceStub() { - service.existsPendingCommands(VorgangHeaderTestFactory.ID); - - verify(commandServiceStub).existsPendingCommands(request); - } - - @Test - void shouldCallContextService() { - service.existsPendingCommands(VorgangHeaderTestFactory.ID); - - verify(contextService).createCallContext(); - } - - @Test - void shouldReturnValue() { - var result = service.existsPendingCommands(VorgangHeaderTestFactory.ID); - - assertThat(result).isTrue(); - } - } - - @Nested - class TestFindCommands { - - private final GrpcCommand grpcCommand = GrpcCommand.newBuilder().build(); - private final GrpcCommandsResponse response = GrpcCommandsResponse.newBuilder().addAllCommand(Collections.singleton(grpcCommand)).build(); - - @Captor // NOSONAR - private ArgumentCaptor<GrpcFindCommandsRequest> requestCaptor; - - @BeforeEach - void init() { - when(commandServiceStub.findCommands(any())).thenReturn(response); - when(contextService.createCallContext()).thenReturn(grpcCallContext); - } - - @Test - void shouldCallServiceStub() { - service.findCommands(VorgangHeaderTestFactory.ID, Optional.empty(), Optional.empty()); - - verify(commandServiceStub).findCommands(notNull()); - } - - @Test - void shouldRequestWithVorgangId() { - service.findCommands(VorgangHeaderTestFactory.ID, Optional.empty(), Optional.empty()); - - verify(commandServiceStub).findCommands(requestCaptor.capture()); - - assertThat(requestCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldRequestWithStatus() { - service.findCommands(VorgangHeaderTestFactory.ID, Optional.of(CommandStatus.FINISHED), Optional.empty()); - - verify(commandServiceStub).findCommands(requestCaptor.capture()); - - assertThat(requestCaptor.getValue().getStatusList()).contains(CommandStatus.FINISHED.name()); - } - - @Test - void shouldRequestWithOrder() { - service.findCommands(VorgangHeaderTestFactory.ID, Optional.empty(), Optional.of(CommandOrder.REDIRECT_VORGANG.name())); - - verify(commandServiceStub).findCommands(requestCaptor.capture()); - - assertThat(requestCaptor.getValue().getOrderString()).isEqualTo(CommandOrder.REDIRECT_VORGANG.name()); - } - - @Test - void shouldCallMapper() { - service.findCommands(VorgangHeaderTestFactory.ID, Optional.empty(), Optional.empty()).toList(); - - verify(mapper).toCommand(grpcCommand); - } - } - - @Nested - class TestGetPendingCommands { - - private final GrpcGetPendingCommandsRequest request = GrpcGetPendingCommandsRequest.newBuilder() - .setContext(grpcCallContext) - .setVorgangId(VorgangHeaderTestFactory.ID).build(); - private final GrpcCommand grpcCommand = GrpcCommand.newBuilder().build(); - private final Set<GrpcCommand> commandList = Collections.singleton(grpcCommand); - private final GrpcGetPendingCommandsResponse response = GrpcGetPendingCommandsResponse.newBuilder().addAllCommand(commandList).build(); - private final Command command = CommandTestFactory.create(); - - @BeforeEach - void mockServiceStub() { - when(commandServiceStub.getPendingCommands(any())).thenReturn(response); - when(contextService.createCallContext()).thenReturn(grpcCallContext); - } - - @Test - void shouldCallServiceStub() { - service.getPendingCommands(VorgangHeaderTestFactory.ID); - - verify(commandServiceStub).getPendingCommands(request); - } - - @Test - void shouldCallContextService() { - service.getPendingCommands(VorgangHeaderTestFactory.ID); - - verify(contextService).createCallContext(); - } - - @Test - void shouldCallMapper() { - var result = service.getPendingCommands(VorgangHeaderTestFactory.ID); - forceStreamOperationsDone(result); - - verify(mapper).toCommand(grpcCommand); - } - - @Test - void shouldReturnValue() { - when(mapper.toCommand(any())).thenReturn(command); - - var result = service.getPendingCommands(VorgangHeaderTestFactory.ID); - - assertThat(result.toList().get(0)).isEqualTo(command); - } - - private void forceStreamOperationsDone(Stream<Command> stream) { - stream.collect(Collectors.toList()).stream(); - } - } - - @DisplayName("Finish command") - @Nested - class TestFinishCommand { - - @Test - void shouldCallServiceStub() { - var request = GrpcSetCommandExecutedRequest.newBuilder().setCommandId(CommandTestFactory.ID).build(); - - service.finishCommand(CommandTestFactory.ID); - - verify(commandServiceStub).setCommandExecuted(request); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java deleted file mode 100644 index 10a51f8f48f414160e9090155affc6b64ea45915..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandServiceTest.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Map; -import java.util.Optional; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class CommandServiceTest { - - @Spy - @InjectMocks - private CommandService service; - @Mock - private CommandRemoteService remoteService; - - @Captor - private ArgumentCaptor<CreateCommand> createCommandCaptor; - - @Nested - class TestCreateCommand { - - private final CreateCommand command = CommandTestFactory.createCreateCommand(); - - @Nested - class TestWithCreateCommandOnly { - - @Test - void shouldCallRemoteService() { - service.createCommandDeprecated(command); - - verify(remoteService).createCommand(any(CreateCommand.class)); - } - - @Test - void shouldHaveSetRelationVersion() { - service.createCommandDeprecated(command); - - verify(remoteService).createCommand(createCommandCaptor.capture()); - assertThat(createCommandCaptor.getValue().getRelationVersion()).isEqualTo(CommandService.NO_RELATION_VERSION); - } - } - - @Nested - class TestWithRelationVersion { - - @Test - void shouldCallRemoteService() { - service.createCommand(command, CommandTestFactory.RELATION_VERSION); - - verify(remoteService).createCommand(any(CreateCommand.class)); - } - - @Test - void shouldHaveSetRelationVersion() { - service.createCommand(command, CommandTestFactory.RELATION_VERSION); - - verify(remoteService).createCommand(createCommandCaptor.capture()); - assertThat(createCommandCaptor.getValue().getRelationVersion()).isEqualTo(CommandTestFactory.RELATION_VERSION); - } - } - } - - @Nested - class TestCreateCommandWithItemName { - - private final CreateCommand command = CommandTestFactory.createCreateCommand(); - - @Nested - class WithoutValidation { - - @Test - void shouldCallRemoteService() { - service.createCommand(command, CommandTestFactory.RELATION_VERSION); - - verify(remoteService).createCommand(any(CreateCommand.class)); - } - - @Test - void shouldHaveSetRelationVersion() { - service.createCommand(command, CommandTestFactory.RELATION_VERSION); - - verify(remoteService).createCommand(createCommandCaptor.capture()); - assertThat(createCommandCaptor.getValue().getRelationVersion()).isEqualTo(CommandTestFactory.RELATION_VERSION); - } - } - } - - @Nested - class TestGetById { - - @BeforeEach - void init() { - when(remoteService.getCommand(CommandTestFactory.ID)).thenReturn(CommandTestFactory.create()); - } - - @Test - void shouldCallRemoteService() { - service.getById(CommandTestFactory.ID); - - verify(remoteService).getCommand(CommandTestFactory.ID); - verify(service, never()).handleDeleteLoeschAnforderung(any()); - } - - @DisplayName("As deleteLoeschAnforderung") - @Nested - class TestAsDeleteLoeschAnforderungCommand { - - private final Command command = CommandTestFactory.createBuilder().order(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()) - .build(); - - @BeforeEach - void init() { - when(remoteService.getCommand(CommandTestFactory.ID)).thenReturn(command); - } - - @Test - void shouldMarkAsDone() { - doNothing().when(service).handleDeleteLoeschAnforderung(any()); - - service.getById(CommandTestFactory.ID); - - verify(service).handleDeleteLoeschAnforderung(command); - } - } - } - - @DisplayName("Handle deleteLoeschAnforderung") - @Nested - class TestHandleDeleteLoeschAnforderung { - - private final Command command = CommandTestFactory.create(); - - @Test - void shouldCallIsDeletedAttachedItemCommandDone() { - doReturn(false).when(service).isDeleteAttachedItemCommandFinished(any()); - - service.handleDeleteLoeschAnforderung(command); - - verify(service).isDeleteAttachedItemCommandFinished(command); - } - - @Test - void shouldCallIsChangeStatusCommandDone() { - doReturn(true).when(service).isDeleteAttachedItemCommandFinished(any()); - doReturn(false).when(service).isChangeStatusCommandFinished(any()); - - service.handleDeleteLoeschAnforderung(command); - - verify(service).isChangeStatusCommandFinished(command); - } - - @Test - void shouldCallRemoteServiceIfCommandsFinisihed() { - doReturn(true).when(service).isDeleteAttachedItemCommandFinished(any()); - doReturn(true).when(service).isChangeStatusCommandFinished(any()); - - service.handleDeleteLoeschAnforderung(command); - - verify(remoteService).finishCommand(command.getId()); - } - - @DisplayName("Is deleteAttachedItemCommand finished") - @Nested - class TestIsDeletedAttachedItemCommandFinished { - - private final String deleteAttachedItemCommandId = UUID.randomUUID().toString(); - private final Command command = CommandTestFactory.createBuilder() - .body(Map.of(DeleteLoeschAnforderung.DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD, deleteAttachedItemCommandId)).build(); - - @Test - void shouldGetCommandById() { - when(remoteService.getCommand(any())).thenReturn(CommandTestFactory.create()); - - service.isDeleteAttachedItemCommandFinished(command); - - verify(remoteService).getCommand(deleteAttachedItemCommandId); - } - - @Test - void shouldReturnTrueIfCommandIsFinished() { - when(remoteService.getCommand(any())).thenReturn(CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build()); - - var isFinished = service.isDeleteAttachedItemCommandFinished(command); - - assertThat(isFinished).isTrue(); - } - } - - @DisplayName("Is changeStatusCommand finished") - @Nested - class TestIsChangeStatusCommandFinished { - - private final String changeStatusCommandId = UUID.randomUUID().toString(); - private final Command command = CommandTestFactory.createBuilder() - .body(Map.of(DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD, changeStatusCommandId)).build(); - - @Test - void shouldGetCommandById() { - when(remoteService.getCommand(any())).thenReturn(CommandTestFactory.create()); - - service.isChangeStatusCommandFinished(command); - - verify(remoteService).getCommand(changeStatusCommandId); - } - - @Test - void shouldReturnTrueIfCommandIsFinished() { - when(remoteService.getCommand(any())).thenReturn(CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build()); - - var isFinished = service.isChangeStatusCommandFinished(command); - - assertThat(isFinished).isTrue(); - } - } - } - - @Nested - class TestRevoke { - - @Test - void shouldCallRemoteService() { - service.revoke(CommandTestFactory.RELATION_ID); - - verify(remoteService).revokeCommand(CommandTestFactory.RELATION_ID); - } - } - - @Nested - class TestExistsPendingCommands { - - @Test - void shouldCallRemoteService() { - service.existsPendingCommands(VorgangHeaderTestFactory.ID); - - verify(remoteService).existsPendingCommands(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestGetPendingCommands { - - @Test - void shouldCallRemoteService() { - service.getPendingCommands(VorgangHeaderTestFactory.ID); - - verify(remoteService).getPendingCommands(VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Find finished commands") - @Nested - class TestFindFinishedCommands { - - @Test - void shouldCallRemoteService() { - service.findFinishedCommands(VorgangHeaderTestFactory.ID); - - verify(remoteService).findCommands(VorgangHeaderTestFactory.ID, Optional.of(CommandStatus.FINISHED), Optional.empty()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandTestFactory.java deleted file mode 100644 index 86f7d8b1248c0a5510627998093a2972fc419727..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandTestFactory.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.time.ZonedDateTime; -import java.util.Random; -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -public class CommandTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - public static final String RELATION_ID = UUID.randomUUID().toString(); - private static final ZonedDateTime CREATED_AT = ZonedDateTime.now(); - public static final CommandStatus STATUS = CommandStatus.FINISHED; - public static final String ORDER = LoremIpsum.getInstance().getWords(1); - - public static final long RELATION_VERSION = new Random().nextLong(); - - public static Command create() { - return createBuilder().build(); - } - - public static Command.CommandBuilder createBuilder() { - return Command.builder() - .id(ID) - .vorgangId(VORGANG_ID) - .relationId(RELATION_ID) - .createdAt(CREATED_AT) - .status(STATUS) - .order(ORDER) - .createdBy(UserProfileTestFactory.ID) - .createdByName(UserProfileTestFactory.FULLNAME); - } - - public static CreateCommand createCreateCommand() { - return createCreateCommandBuilder().build(); - } - - public static CreateCommand.CreateCommandBuilder createCreateCommandBuilder() { - return CreateCommand.builder() - .vorgangId(VORGANG_ID) - .relationId(RELATION_ID) - .relationVersion(RELATION_VERSION) - .order(ORDER); - } - - public static String buildStatusPatchContent(CommandStatus status) { - return TestUtils.loadTextFile("jsonTemplates/command/statusPatch.json.tmpl", status.name()); - } - - public static String buildCreateVorgangCommandContent(String order) { - return TestUtils.loadTextFile("jsonTemplates/command/createVorgangCommand.json.tmpl", order); - } - - public static String buildCreateCommandContent(CommandOrder order) { - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithBody.json.tmpl", - order.name(), - null); - - } - - public static String buildCreateCommandWithBodyContent(CommandOrder order, String body) { - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithBody.json.tmpl", - order.name(), - body); - - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcCommandResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcCommandResponseTestFactory.java deleted file mode 100644 index f0ee57a7b9c32a1946ae0c58bc374af9381d0437..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcCommandResponseTestFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse; - -public class GrpcCommandResponseTestFactory { - - public static final String COMMAND_ID = CommandTestFactory.ID; - public static final CommandStatus COMMAND_STATUS = CommandStatus.PENDING; - - public static GrpcCommandResponse create() { - return createBuilder().build(); - } - - public static GrpcCommandResponse.Builder createBuilder() { - return GrpcCommandResponse.newBuilder() - .setCommand(createGrpcCommand()); - } - - public static GrpcCommand createGrpcCommand() { - return GrpcCommand.newBuilder() - .setId(COMMAND_ID) - .setStatus(COMMAND_STATUS.name()) - .build(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcCommandTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcCommandTestFactory.java deleted file mode 100644 index 7c4735289e3826524661c05ca1d66a22e78f9a67..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcCommandTestFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.GrpcCallContextTestFactory; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; -import de.ozgcloud.vorgang.grpc.command.GrpcCommand; -import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; - -public class GrpcCommandTestFactory { - - private static final String RELATION_ID = UUID.randomUUID().toString(); - private static final CommandStatus STATUS = CommandStatus.PENDING; - private static final String ORDER = LoremIpsum.getInstance().getWords(1); - private static final GrpcCallContext CALL_CONTEXT = GrpcCallContextTestFactory.create(); - - public static GrpcCommand create() { - return createBuilder().build(); - } - - public static GrpcCommand.Builder createBuilder() { - return GrpcCommand.newBuilder() - .setStatus(STATUS.name()) - .setRelationId(RELATION_ID) - .setOrderString(ORDER); - } - - public static GrpcCreateCommandRequest createCommandRequest() { - return createCommandRequestBuilder().build(); - } - - public static GrpcCreateCommandRequest.Builder createCommandRequestBuilder() { - return GrpcCreateCommandRequest.newBuilder() - .setCallContext(CALL_CONTEXT) - .setRelationId(RELATION_ID) - .setOrderString(ORDER); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcPostfachCommandTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcPostfachCommandTestFactory.java deleted file mode 100644 index d36003abe00beb33820bed0c5abff2cc455726d6..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/GrpcPostfachCommandTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import de.ozgcloud.alfa.common.GrpcCallContextTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMailTestFactory; -import de.ozgcloud.nachrichten.postfach.GrpcResendPostfachMailRequest; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; - -public class GrpcPostfachCommandTestFactory { - - private static final String POSTFACH_ID = PostfachMailTestFactory.ID; - private static final String COMMAND_ID = CommandTestFactory.ID; - private static final GrpcCallContext CALL_CONTEXT = GrpcCallContextTestFactory.create(); - - public static GrpcResendPostfachMailRequest createResendPostfachMailRequest() { - return createResendPostfachMailRequestBuilder().build(); - } - - public static GrpcResendPostfachMailRequest.Builder createResendPostfachMailRequestBuilder() { - return GrpcResendPostfachMailRequest.newBuilder() - .setContext(CALL_CONTEXT) - .setPostfachMailId(POSTFACH_ID) - .setCommandId(COMMAND_ID); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/RequiredOrderValidatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/RequiredOrderValidatorTest.java deleted file mode 100644 index b26e6739dfdd625a3738dee1699b5be559d17782..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/RequiredOrderValidatorTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import jakarta.validation.ConstraintValidatorContext; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; - -class RequiredOrderValidatorTest { - - private final RequiredOrderValidator validator = new RequiredOrderValidator(); - - @Mock - private RequiredOrder requiredOrder; - - @Mock - private ConstraintValidatorContext constraintValidatorContext; - - @Nested - class TestIsValid { - private CommandOrder commandOrder = CommandOrder.VORGANG_ANNEHMEN; - - @BeforeEach - void init() { - when(requiredOrder.value()).thenReturn(commandOrder); - validator.initialize(requiredOrder); - } - - @Test - void shouldReturnTrue() { - var validationResult = validator.isValid(CommandTestFactory.createCreateCommandBuilder().order(commandOrder.name()).build(), - constraintValidatorContext); - - assertThat(validationResult).isTrue(); - } - - @Test - void shouldReturnFalse() { - var validationResult = validator.isValid( - CommandTestFactory.createCreateCommandBuilder().order(CommandOrder.ASSIGN_USER.name()).build(), - constraintValidatorContext); - - assertThat(validationResult).isFalse(); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilterITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilterITCase.java deleted file mode 100644 index 764bc5f39eb114bbc834886d62ebd898572fb892..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilterITCase.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -@SpringBootTest -@AutoConfigureMockMvc -@WithMockUser -class DownloadTokenAuthenticationFilterITCase { - - @SpyBean - private DownloadTokenAuthenticationFilter filter; - - @Autowired - private MockMvc mockMvc; - - @Autowired - private DownloadTokenProperties downloadTokenProperties; - - @Test - void shouldNotCallFilter() throws Exception { - performRequest(DownloadTokenController.DOWNLOAD_TOKEN_PATH).andExpect(status().isBadRequest()); - - verify(filter, never()).doFilterInternal(any(), any(), any()); - } - - @Test - void shouldCallFilter() throws Exception { - String token = DownloadTokenTestFactory.createToken(downloadTokenProperties.getSecret(), downloadTokenProperties.getValidity()); - - performRequest(DownloadTokenController.DOWNLOAD_TOKEN_PATH + "?" + DownloadTokenController.PARAM_TOKEN + "=" + token) - .andExpect(status().isOk()); - - verify(filter).doFilterInternal(any(), any(), any()); - } - - @Test - void shouldCallFilterWhenNoOrganisationseinheitIds() throws Exception { - String token = DownloadTokenTestFactory.createTokenBuilder(downloadTokenProperties.getSecret(), downloadTokenProperties.getValidity()) - .setClaims(DownloadTokenTestFactory.CLAIMS_WITHOUT_ORGANSIATIONSEINHEIT_IDS).compact(); - - performRequest(DownloadTokenController.DOWNLOAD_TOKEN_PATH + "?" + DownloadTokenController.PARAM_TOKEN + "=" + token) - .andExpect(status().isOk()); - - verify(filter).doFilterInternal(any(), any(), any()); - } - - @Test - void shouldReturnUnauthorised() throws Exception { - String token = DownloadTokenTestFactory.createToken("badSecret".repeat(8), downloadTokenProperties.getValidity()); - - performRequest(DownloadTokenController.DOWNLOAD_TOKEN_PATH + "?" + DownloadTokenController.PARAM_TOKEN + "=" + token) - .andExpect(status().isUnauthorized()); - } - - ResultActions performRequest(String path) throws Exception { - return mockMvc.perform(get(path)); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilterTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilterTest.java deleted file mode 100644 index c03ae28b69492afb7463e0694c0b0d51a6160868..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenAuthenticationFilterTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.util.UUID; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class DownloadTokenAuthenticationFilterTest { - - @InjectMocks - private DownloadTokenAuthenticationFilter filter; - @Mock - private FilterChain filterChain; - @Mock - private HttpServletRequest request; - @Mock - private HttpServletResponse response; - @Mock - private DownloadTokenService downloadTokenService; - - @Test - void shouldCallDoFilter() throws IOException, ServletException { - doFilterInternal(); - - verify(filterChain).doFilter(request, response); - } - - @Nested - class TestWithTokenParamter { - - final String TOKEN = UUID.randomUUID().toString(); - - @BeforeEach - void mockRequestParameter() { - when(request.getParameter(anyString())).thenReturn(TOKEN); - } - - @Test - void shouldVerifyTokenIfPresent() throws Exception { - doFilterInternal(); - - verify(downloadTokenService).handleToken(request, TOKEN); - } - } - - private void doFilterInternal() throws ServletException, IOException { - filter.doFilterInternal(request, response, filterChain); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenControllerTest.java deleted file mode 100644 index 4dfa24de9f5a5ea9511f6103a0e18752b4139f70..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenControllerTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.UUID; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.common.test.TestUtils; - -class DownloadTokenControllerTest { - - @InjectMocks // NOSONAR - private DownloadTokenController controller; - @Mock - private DownloadTokenService service; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - final static String TOKEN = UUID.randomUUID().toString(); - - @BeforeEach - void mock() { - when(service.createToken(any())).thenReturn(TOKEN); - } - - @Test - void shouldGenerateToken() throws Exception { - callEndpoint(createRequest(BinaryFileTestFactory.ID)); - - verify(service).createToken(any()); - } - - @Test - void shouldGenerateTokenWhenNoFileId() throws Exception { - callEndpoint(createRequest(StringUtils.EMPTY)); - - verify(service).createToken(any()); - } - - @Test - void shouldHaveReponse() throws Exception { - callEndpoint(createRequest(BinaryFileTestFactory.ID)) - .andExpect(header().string("Location", "http://localhost" + DownloadTokenController.DOWNLOAD_TOKEN_PATH + "?" - + DownloadTokenController.PARAM_TOKEN + "=" + TOKEN)); - } - - private ResultActions callEndpoint(String content) throws Exception { - return mockMvc.perform( - post(DownloadTokenController.DOWNLOAD_TOKEN_PATH) - .contentType(MediaType.APPLICATION_JSON) - .content(content)) - .andExpect(status().isCreated()); - } - - private String createRequest(String fileId) { - return TestUtils.loadTextFile("jsonTemplates/downloadTokenRequest.json.tmpl", fileId); - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenServiceTest.java deleted file mode 100644 index 803c3d6915a147440840eefdb4d407eb549c11fb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenServiceTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static de.ozgcloud.alfa.JwtTokenUtil.*; -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.auth0.jwt.exceptions.JWTVerificationException; - -import de.ozgcloud.alfa.JwtTokenUtil; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import io.jsonwebtoken.Claims; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -class DownloadTokenServiceTest { - - @InjectMocks - private DownloadTokenService service; - @Mock - private CurrentUserService userService; - @Mock - private JwtTokenUtil jwtTokenUtil; - @Mock - private HttpServletRequest request; - @Mock - private HttpServletResponse response; - - private final static String FAKE_TOKEN = "xxx"; - private final static Collection<String> ORGE_IDS = List.of("258994"); - - @Nested - class TestCreateToken { - - final FileId fileId = FileId.createNew(); - - final UserProfile user = UserProfileTestFactory.create(); - - @BeforeEach - void mockUserService() { - when(userService.getUser()).thenReturn(user); - } - - @Test - void shouldCallUserService() { - service.createToken(fileId); - - verify(userService).getUser(); - } - - @Test - void shouldCallJwtTokenUtil() { - service.createToken(fileId); - - verify(jwtTokenUtil).generateToken(fileId, user); - } - } - - @Nested - class TestHandleToken { - - @Test - void shouldVerifyTokenIfPresent() throws Exception { - mockClaims(FIRSTNAME_CLAIM, LASTNAME_CLAIM); - - handleToken(); - - verify(jwtTokenUtil).verifyToken(FAKE_TOKEN); - } - - @Test - void shouldGetUserFromTokenWithoutUserFirstname() { - mockClaims(null, FIRSTNAME_CLAIM); - - UserProfile user = service.getUserFromToken(FAKE_TOKEN).getUser(); - - assertThat(user).isNotNull(); - } - - @Test - void shouldGetUserFromTokenWithoutUserLastname() { - mockClaims(FIRSTNAME_CLAIM, null); - - UserProfile user = service.getUserFromToken(FAKE_TOKEN).getUser(); - - assertThat(user).isNotNull(); - } - - @Test - void shouldGetOrganisationseinheitIdsFromToken() { - mockClaims(FIRSTNAME_CLAIM, LASTNAME_CLAIM); - - UserProfile user = service.getUserFromToken(FAKE_TOKEN).getUser(); - - assertThat(user.getOrganisationseinheitIds()).isEqualTo(ORGE_IDS); - } - - private void mockClaims(String firstnameClaim, String lastnameClaim) { - Claims claims = mock(Claims.class); - - when(claims.get(FIRSTNAME_CLAIM, String.class)).thenReturn(firstnameClaim); - when(claims.get(LASTNAME_CLAIM, String.class)).thenReturn(lastnameClaim); - when(claims.get(USERID_CLAIM, String.class)).thenReturn(UserProfileTestFactory.ID.toString()); - - when(jwtTokenUtil.getOrganisationseinheitIdsFromToken(any())).thenReturn(ORGE_IDS); - when(jwtTokenUtil.getAllClaimsFromToken(any())).thenReturn(Optional.of(claims)); - } - - @Test - void shouldThrowExceptionOnInvalidToken() throws Exception { - doThrow(JWTVerificationException.class).when(jwtTokenUtil).verifyToken(anyString()); - - assertThrows(TechnicalException.class, () -> handleToken()); - } - - @Test - void shouldNotFilterOnInvalidToken() throws Exception { - doThrow(JWTVerificationException.class).when(jwtTokenUtil).verifyToken(anyString()); - - assertThrows(TechnicalException.class, () -> handleToken()); - } - - } - - void handleToken() { - service.handleToken(request, FAKE_TOKEN); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenTestFactory.java deleted file mode 100644 index 321dbca828695ddfa88c06a1cda81809eaab0cac..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/downloadtoken/DownloadTokenTestFactory.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.downloadtoken; - -import static de.ozgcloud.alfa.JwtTokenUtil.*; - -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import io.jsonwebtoken.JwtBuilder; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; - -public class DownloadTokenTestFactory { - static final String TYP = "typ"; - static final String SUBJECT = "subject"; - static final String FIRSTNAME_CLAIM_VALUE = UserProfileTestFactory.FIRSTNAME; - static final String LASTNAME_CLAIM_VALUE = UserProfileTestFactory.LASTNAME; - final static Collection<String> ORGE_IDS = List.of("258994"); - static final List<?> ROLE_CLAIM_VALUE = List.of(); - static final long VALIDITY = 5000; - static final Map<String, Object> CLAIMS = new HashMap<>(Map.of( - FIRSTNAME_CLAIM, FIRSTNAME_CLAIM_VALUE, - LASTNAME_CLAIM, LASTNAME_CLAIM_VALUE, - ROLE_CLAIM, ROLE_CLAIM_VALUE, - ORGANSIATIONSEINHEIT_IDS_CLAIM, ORGE_IDS)); - static final Map<String, Object> CLAIMS_WITHOUT_ORGANSIATIONSEINHEIT_IDS = new HashMap<>(Map.of( - FIRSTNAME_CLAIM, FIRSTNAME_CLAIM_VALUE, - LASTNAME_CLAIM, LASTNAME_CLAIM_VALUE, - ROLE_CLAIM, ROLE_CLAIM_VALUE)); - - public static String createToken(String secret, long validity) { - return createTokenBuilder(secret, validity).compact(); - } - - public static JwtBuilder createTokenBuilder(String secret, long validity) { - return Jwts.builder() - .setClaims(CLAIMS) - .setSubject(SUBJECT) - .setHeaderParam(TYP, TOKEN_TYPE) - .setIssuer(TOKEN_ISSUER).setIssuedAt(new Date(System.currentTimeMillis())) - .setExpiration(new Date(System.currentTimeMillis() + validity)) - .setAudience(TOKEN_AUDIENCE) - .signWith(SignatureAlgorithm.HS512, secret.getBytes()); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ExceptionControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ExceptionControllerTest.java deleted file mode 100644 index 63d45e7d6156f69437713000a6728a438acdb551..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ExceptionControllerTest.java +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; - -import jakarta.validation.ConstraintViolationException; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpStatus; -import org.springframework.http.ProblemDetail; -import org.springframework.security.access.AccessDeniedException; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.common.errorhandling.TechnicalException; - -class ExceptionControllerTest { - - @Spy - @InjectMocks - private ExceptionController exceptionController; - - @Mock - private ProblemDetailMapper problemDetailMapper; - - @Nested - class TestHandleFunctionalException { - - private final FunctionalException exception = new FunctionalException(() -> ExceptionTestFactory.MESSAGE_CODE); - - @Test - void shouldHaveMessageCode() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessageCode()).isEqualTo(ExceptionTestFactory.MESSAGE_CODE); - } - - @Test - void shouldHaveMessage() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessage()).isEqualTo(exception.getMessage()); - assertThat(error.getIssues().get(0).getMessage()).contains(exception.getExceptionId()); - } - - @Test - void shouldHaveExceptionId() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getExceptionId()).isEqualTo(exception.getExceptionId()); - } - - private ApiError handleException() { - return exceptionController.handleFunctionalException(exception); - } - } - - @Nested - class TestHandleAccessDeniedException { - - private final AccessDeniedException exception = new AccessDeniedException(ExceptionTestFactory.MESSAGE); - - @BeforeEach - void mockExceptionId() { - doReturn(ExceptionTestFactory.EXCEPTION_ID).when(exceptionController).createExceptionId(); - } - - @Test - void shouldHaveMessageCode() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessageCode()).isEqualTo(ExceptionController.ACCESS_DENIED_MESSAGE_CODE); - } - - @Test - void shouldHaveMessage() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessage()).contains(exception.getMessage()); - assertThat(error.getIssues().get(0).getMessage()).contains(ExceptionTestFactory.EXCEPTION_ID); - } - - @Test - void shouldHaveExceptionId() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getExceptionId()).isEqualTo(ExceptionTestFactory.EXCEPTION_ID); - } - - private ApiError handleException() { - return exceptionController.handleAccessDeniedException(exception); - } - } - - @Nested - class TestHandleResourceNotFoundException { - - private final ResourceNotFoundException exception = new ResourceNotFoundException(String.class, 42L); - - @Test - void shouldHaveMessageCode() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessageCode()).isEqualTo(ExceptionController.RESOURCE_NOT_FOUNT_MESSAGE_CODE); - } - - @Test - void shouldHaveMessage() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessage()).isEqualTo(exception.getMessage()); - assertThat(error.getIssues().get(0).getMessage()).contains(exception.getExceptionId()); - } - - @Test - void shouldHaveExceptionId() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getExceptionId()).isEqualTo(exception.getExceptionId()); - } - - private ApiError handleException() { - return exceptionController.handleResourceNotFoundException(exception); - } - } - - @Nested - class TestContraintValidationException { - - @Nested - class TestHandleConstraintViolationException { - private final String exceptionMessage = LoremIpsum.getInstance().getWords(5); - - private final ConstraintViolationException exception = new ConstraintViolationException(exceptionMessage, - Collections.singleton(ExceptionTestFactory.buildMockedConstraintViolation())); - - @Test - void shouldGetMessageWithExceptionId() { - handleException(); - - verify(problemDetailMapper).buildMessageWithExceptionId(exception); - } - - @Test - void shouldBuildConstraintViolationProblemDetail() { - handleException(); - - verify(problemDetailMapper).fromConstraintViolationException(exception); - } - - @Test - void shouldReturnBuiltProblemDetail() { - var expectedProblemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.UNPROCESSABLE_ENTITY, exceptionMessage); - when(problemDetailMapper.fromConstraintViolationException(exception)).thenReturn(expectedProblemDetail); - - var problemDetail = handleException(); - - assertThat(problemDetail).isEqualTo(expectedProblemDetail); - } - - private ProblemDetail handleException() { - return exceptionController.handleConstraintViolationException(exception); - } - } - - } - - @Nested - class TestHandleTechnicalException { - - private final TechnicalException exception = new TechnicalException(ExceptionTestFactory.MESSAGE, new Throwable()); - - @Test - void shouldHaveMessageCode() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessageCode()).isEqualTo(ExceptionController.RUNTIME_MESSAGE_CODE); - } - - @Test - void shouldHaveMessage() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessage()).isEqualTo(exception.getMessage()); - assertThat(error.getIssues().get(0).getMessage()).contains(exception.getExceptionId()); - } - - @Test - void shouldHaveExceptionId() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getExceptionId()).isEqualTo(exception.getExceptionId()); - } - - private ApiError handleException() { - return exceptionController.handleTechnicalException(exception); - } - } - - @Nested - class TestHandleRuntimeException { - - private final RuntimeException exception = new RuntimeException(ExceptionTestFactory.MESSAGE); - - @BeforeEach - void mockExceptionId() { - doReturn(ExceptionTestFactory.EXCEPTION_ID).when(exceptionController).createExceptionId(); - } - - @Test - void shouldHaveMessageCode() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessageCode()).isEqualTo(ExceptionController.RUNTIME_MESSAGE_CODE); - } - - @Test - void shouldHaveMessage() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getMessage()).contains(exception.getMessage()); - assertThat(error.getIssues().get(0).getMessage()).contains(ExceptionTestFactory.EXCEPTION_ID); - } - - @Test - void shouldHaveExceptionId() { - var error = handleException(); - - assertThat(error.getIssues()).hasSize(1); - assertThat(error.getIssues().get(0).getExceptionId()).isEqualTo(ExceptionTestFactory.EXCEPTION_ID); - } - - private ApiError handleException() { - return exceptionController.handleRuntimeException(exception); - } - } - - @DisplayName("Handle OrderNotAllowedException") - @Nested - class TestOrderNotAllowedException { - - private final OrderNotAllowedException exception = new OrderNotAllowedException(LegacyOrder.EDIT_WIEDERVORLAGE); - - @Test - void shouldHaveMessage() { - var apiError = exceptionController.handleFunctionalException(exception); - - var messageString = "Order 'EDIT_WIEDERVORLAGE' is not allowed. Expected 'VORGANG_LOESCHEN or LOESCH_ANFORDERUNG_ZURUECKNEHMEN'."; - assertThat(apiError.getIssues().get(0).getMessage()).contains(messageString); - } - - @Test - void shouldHaveExceptionId() { - var apiError = exceptionController.handleFunctionalException(exception); - - assertThat(apiError.getIssues()).hasSize(1).first().extracting(Issue::getExceptionId) - .isEqualTo(exception.getExceptionId()); - } - - @Test - void shouldHaveMessageCode() { - var apiError = exceptionController.handleFunctionalException(exception); - - var messageCode = "loeschanforderung.order_not_allowed"; - assertThat(apiError.getIssues()).hasSize(1).first().extracting(Issue::getMessageCode).isEqualTo(messageCode); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ExceptionTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ExceptionTestFactory.java deleted file mode 100644 index 8c1926b0b8ec797eabd43df8bdce9dd06fd5ee19..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ExceptionTestFactory.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Map; -import java.util.UUID; - -import jakarta.validation.ConstraintViolation; -import jakarta.validation.Path; -import jakarta.validation.metadata.ConstraintDescriptor; - -import org.hibernate.validator.engine.HibernateConstraintViolation; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.DynamicViolationParameter; - -public class ExceptionTestFactory { - - static final String EXCEPTION_ID = UUID.randomUUID().toString(); - - static final String PARAM_NAME = "param"; - static final String PARAM_VALUE = "3"; - static final String PARAM_DYNAMIC_VALUE = "20"; - static final String MESSAGE = LoremIpsum.getInstance().getWords(5); - static final String MESSAGE_CODE = "message.code"; - private static final String PATH_PREFIX = "createCommandByRelation"; - static final String PATH_FIELD = "command.wiedervorlage.betreff"; - public static final String PATH = PATH_PREFIX + "." + PATH_FIELD; - - public static ConstraintViolation<?> buildMockedConstraintViolation() { - return ExceptionTestFactory.buildMockedConstraintViolationWithDynamicPayload(null); - } - - @SuppressWarnings({ "unchecked" }) - public static <T> ConstraintViolation<T> buildMockedConstraintViolationWithDynamicPayload(DynamicViolationParameter dynamicViolationParameter) { - var violation = mock(ConstraintViolation.class); - var hibernateViolation = mock(HibernateConstraintViolation.class); - var constraintDescriptor = mock(ConstraintDescriptor.class); - - var path = mock(Path.class); - when(path.toString()).thenReturn(PATH); - when(violation.getPropertyPath()).thenReturn(path); - when(violation.getMessage()).thenReturn(MESSAGE); - when(violation.getConstraintDescriptor()).thenReturn(constraintDescriptor); - when(violation.getInvalidValue()).thenReturn(PARAM_VALUE); - when(constraintDescriptor.getAttributes()).thenReturn(Map.of(PARAM_NAME, PARAM_DYNAMIC_VALUE)); - when(violation.unwrap(any())).thenReturn(hibernateViolation); - when(hibernateViolation.getDynamicPayload(any())).thenReturn(dynamicViolationParameter); - - return violation; - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/FunctionalExceptionTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/FunctionalExceptionTest.java deleted file mode 100644 index 759c8397b04ddab4abceff70cb4bec0d30a70f1f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/FunctionalExceptionTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import static org.assertj.core.api.Assertions.*; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.Test; - -class FunctionalExceptionTest { - - @Test - void shouldIncludeExceptionId() { - var exception = new FunctionalException(() -> StringUtils.EMPTY); - - assertThat(exception.getMessage()).contains(exception.getExceptionId()); - assertThat(exception.getExceptionId()).isNotNull(); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionControllerTest.java deleted file mode 100644 index aa1200ad64f51c406d55bff42fcc395f959f1a64..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionControllerTest.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import de.ozgcloud.alfa.common.GrpcUtil; -import io.grpc.Metadata; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; - -class GrpcExceptionControllerTest { - - @InjectMocks - private GrpcExceptionController grpcExceptionController; - - @Nested - class TestNotFoundStatusException { - - private final StatusRuntimeException notFoundException = GrpcExceptionTestFactory.createGrpcNotFoundStatusRuntimeException(); - - @Test - void shouldHaveMessageCode() { - var response = grpcExceptionController.handleStatusRuntimeException(notFoundException); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessageCode()) - .isEqualTo(GrpcExceptionController.GRPC_NOT_FOUND_ERROR_CODE_KEY.getErrorCode()); - } - - @Test - void shouldHaveMessage() { - var response = grpcExceptionController.handleStatusRuntimeException(notFoundException); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessage()).isEqualTo("NOT_FOUND: " + GrpcExceptionTestFactory.NOT_FOUND_DESCRIPTION); - } - - @Test - void shouldHaveHttpStatusCode() { - var response = grpcExceptionController.handleStatusRuntimeException(notFoundException); - - assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); - } - - @Test - void shouldNotHaveExceptionId() { - var response = grpcExceptionController.handleStatusRuntimeException(notFoundException); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isNull(); - } - - @Nested - class TestWithMetaData { - - private final StatusRuntimeException notFoundExceptionWithMetadata = GrpcExceptionTestFactory - .createGrpcNotFoundStatusException(GrpcExceptionTestFactory.createMetaData()); - - @Test - void shouldHaveExceptionId() { - var response = grpcExceptionController.handleStatusRuntimeException(notFoundExceptionWithMetadata); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isEqualTo(GrpcExceptionTestFactory.METADATA_EXCEPTION_ID_VALUE); - } - } - } - - @Nested - class TestInternalStatusException { - - private final StatusRuntimeException internalException = GrpcExceptionTestFactory.createGrpcInternalStatusException(); - - @Test - void shouldHaveMessageCode() { - var response = grpcExceptionController.handleStatusRuntimeException(internalException); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessageCode()) - .isEqualTo(GrpcExceptionController.GRPC_INTERNAL_ERROR_CODE_KEY.getErrorCode()); - } - - @Test - void shouldHaveMessage() { - var response = grpcExceptionController.handleStatusRuntimeException(internalException); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessage()).isEqualTo("INTERNAL: " + GrpcExceptionTestFactory.TECHNICAL_DESCRIPTION); - } - - @Test - void shouldHaveHttpStatusCode() { - var response = grpcExceptionController.handleStatusRuntimeException(internalException); - - assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); - } - - @Test - void shouldNotHaveExceptionId() { - var response = grpcExceptionController.handleStatusRuntimeException(internalException); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isNull(); - } - - @Nested - class TestWithMetaData { - - private final StatusRuntimeException internalExceptionWithMetadata = GrpcExceptionTestFactory - .createGrpcInternalStatusException(GrpcExceptionTestFactory.createMetaData()); - - @Test - void shouldHaveErrorCodeAsMessageCode() { - var response = grpcExceptionController.handleStatusRuntimeException(internalExceptionWithMetadata); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessageCode()).isEqualTo(GrpcExceptionTestFactory.METADATA_ERROR_CODE_VALUE); - } - - @Test - void shouldHaveExceptionId() { - var response = grpcExceptionController.handleStatusRuntimeException(internalExceptionWithMetadata); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isEqualTo(GrpcExceptionTestFactory.METADATA_EXCEPTION_ID_VALUE); - } - } - } - - @Nested - class TestStatusUnavailableException { - - private final StatusRuntimeException unavailableException = GrpcExceptionTestFactory.createGrpcUnavailableStatusException(); - - @Test - void shouldHaveMessageCode() { - var response = handleUnavailableException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessageCode()) - .isEqualTo(GrpcExceptionController.GRPC_INTERNAL_ERROR_CODE_KEY.getErrorCode()); - } - - @Test - void shouldHaveMessage() { - var response = handleUnavailableException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessage()).isEqualTo("UNAVAILABLE"); - } - - @Test - void shouldHaveHttpStatusCode() { - var response = handleUnavailableException(); - - assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE); - } - - @Test - void shouldNotHaveExceptionId() { - var response = handleUnavailableException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isNotNull(); - } - - private ResponseEntity<ApiError> handleUnavailableException() { - return handleException(unavailableException); - } - - @Nested - class TestWithMetadata { - - private final StatusRuntimeException unavailableExceptionWithMetadata = GrpcExceptionTestFactory - .createGrpcUnavailableStatusException(GrpcExceptionTestFactory.createMetaData()); - - @Test - void shouldNotHaveExceptionId() { - var response = handleUnavailableException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isEqualTo(GrpcExceptionTestFactory.METADATA_EXCEPTION_ID_VALUE); - } - - private ResponseEntity<ApiError> handleUnavailableException() { - return handleException(unavailableExceptionWithMetadata); - } - } - } - - @Nested - class TestPermissionDeniedException { - - private final StatusRuntimeException permissionDeniedException = GrpcExceptionTestFactory.createGrpcPermissionDeniedStatusException(); - - @Test - void shouldHaveMessageCode() { - var response = handlePermissionDeniedException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessageCode()) - .isEqualTo(GrpcExceptionController.GRPC_PERMISSION_DENIED_CODE_KEY.getErrorCode()); - } - - @Test - void shouldHaveMessage() { - var response = handlePermissionDeniedException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getMessage()) - .isEqualTo("PERMISSION_DENIED: " + GrpcExceptionTestFactory.PERMISSION_DENIED_DESCRIPTION); - } - - @Test - void shouldHaveHttpStatusCode() { - var response = handlePermissionDeniedException(); - - assertThat(response.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN); - } - - @Test - void shouldNotHaveExceptionId() { - var response = handlePermissionDeniedException(); - - assertThat(response.getBody().getIssues()).hasSize(1); - assertThat(response.getBody().getIssues().get(0).getExceptionId()).isNotNull(); - } - - private ResponseEntity<ApiError> handlePermissionDeniedException() { - return handleException(permissionDeniedException); - } - } - - private ResponseEntity<ApiError> handleException(StatusRuntimeException exception) { - return grpcExceptionController.handleStatusRuntimeException(exception); - } - - @Nested - class TestMapToIssueParams { - - @Test - void shouldMapParams() { - var params = grpcExceptionController.mapToIssueParams( - GrpcExceptionTestFactory.createMetaDataWithSingleEntry("param_key", "param_value")); - - assertThat(params).hasSize(1); - assertThat(params.get(0).getName()).isEqualTo("param_key"); - assertThat(params.get(0).getValue()).isEqualTo("param_value"); - } - - @Test - void shouldNotMapErrorCode() { - var metadata = GrpcExceptionTestFactory.createMetaDataWithSingleEntry( - GrpcExceptionController.KEY_ERROR_CODE, GrpcExceptionTestFactory.METADATA_ERROR_CODE_VALUE); - - var params = grpcExceptionController.mapToIssueParams(metadata); - - assertThat(params).isEmpty(); - } - - @Test - void shouldNotMapExceptionId() { - var metadata = GrpcExceptionTestFactory.createMetaDataWithSingleEntry( - GrpcExceptionController.KEY_EXCEPTION_ID, GrpcExceptionTestFactory.METADATA_EXCEPTION_ID_VALUE); - - var params = grpcExceptionController.mapToIssueParams(metadata); - - assertThat(params).isEmpty(); - } - } - - @DisplayName("Get message code") - @Nested - class TestGetMessageCode { - - @Test - void shouldReturnErrorCode() { - var messageCodeValue = "ErrorCode"; - - var messageCode = getMessageCode( - new StatusRuntimeException(Status.UNKNOWN, createMetadata(GrpcExceptionController.KEY_ERROR_CODE, messageCodeValue))); - - assertThat(messageCode).isEqualTo(messageCodeValue); - } - - @Test - void shouldReturnServiceCode() { - var messageCodeValue = "ServiceCode"; - - var messageCode = getMessageCode(new StatusRuntimeException(Status.UNKNOWN, createMetadata(GrpcUtil.SERVICE_KEY, messageCodeValue))); - - assertThat(messageCode).isEqualTo(messageCodeValue); - } - - @Test - void shouldReturnDefault() { - var messageCode = getMessageCode(new StatusRuntimeException(Status.UNKNOWN)); - - assertThat(messageCode).isEqualTo(GrpcExceptionController.GRPC_INTERNAL_ERROR_CODE_KEY.getErrorCode()); - } - - private String getMessageCode(StatusRuntimeException exception) { - return grpcExceptionController.getMessageCode(exception); - } - - private Metadata createMetadata(String key, String value) { - var metadata = new Metadata(); - metadata.put(GrpcUtil.keyOfString(key), value); - return metadata; - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionTestFactory.java deleted file mode 100644 index a843d05257bba5780a46c57e8b1d39b28939fe5e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/GrpcExceptionTestFactory.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import org.springframework.security.access.AccessDeniedException; - -import de.ozgcloud.alfa.common.GrpcUtil; -import io.grpc.Metadata; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; - -public class GrpcExceptionTestFactory { - - public static final String NOT_FOUND_DESCRIPTION = "Not Found Exception message"; - public static final String TECHNICAL_DESCRIPTION = "Technical Exception message"; - public static final String PERMISSION_DENIED_DESCRIPTION = "PermissionsDenied Exception message"; - public static final String PERMISSION_DENIED_CAUSE_MSG = "AccessDenied cause message"; - - public static final String METADATA_ERROR_CODE_VALUE = "Error_Code"; - public static final String METADATA_EXCEPTION_ID_VALUE = "42"; - - public static StatusRuntimeException createGrpcUnavailableStatusException(Metadata metadata) { - return new StatusRuntimeException(buildUnavailableStatus(), metadata); - } - - public static StatusRuntimeException createGrpcUnavailableStatusException() { - return new StatusRuntimeException(buildUnavailableStatus()); - } - - public static Status buildUnavailableStatus() { - return Status.UNAVAILABLE.withCause(new RuntimeException()); - } - - public static StatusRuntimeException createGrpcNotFoundStatusException(Metadata metadata) { - return new StatusRuntimeException(buildNotFoundStatus(), metadata); - } - - public static StatusRuntimeException createGrpcNotFoundStatusRuntimeException() { - return new StatusRuntimeException(buildNotFoundStatus()); - } - - private static Status buildNotFoundStatus() { - return Status.NOT_FOUND.withDescription(NOT_FOUND_DESCRIPTION).withCause(new RuntimeException()); - } - - public static StatusRuntimeException createGrpcInternalStatusException(Metadata metaData) { - return new StatusRuntimeException(buildInternalStatus(), metaData); - } - - public static StatusRuntimeException createGrpcInternalStatusException() { - return new StatusRuntimeException(buildInternalStatus()); - } - - private static Status buildInternalStatus() { - return Status.INTERNAL.withDescription(TECHNICAL_DESCRIPTION).withCause(new RuntimeException()); - } - - public static StatusRuntimeException createGrpcPermissionDeniedStatusException() { - return new StatusRuntimeException(buildPermissionDeniedStatus()); - } - - public static Status buildPermissionDeniedStatus() { - return Status.PERMISSION_DENIED.withDescription(PERMISSION_DENIED_DESCRIPTION) - .withCause(new AccessDeniedException(PERMISSION_DENIED_CAUSE_MSG)); - } - - public static Metadata createMetaData() { - Metadata data = new Metadata(); - data.put(GrpcUtil.keyOfString(GrpcExceptionController.KEY_ERROR_CODE), METADATA_ERROR_CODE_VALUE); - data.put(GrpcUtil.keyOfString(GrpcExceptionController.KEY_EXCEPTION_ID), METADATA_EXCEPTION_ID_VALUE); - return data; - } - - public static Metadata createMetaDataWithSingleEntry(String key, String value) { - Metadata data = new Metadata(); - data.put(GrpcUtil.keyOfString(key), value); - return data; - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/IssueParamTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/IssueParamTestFactory.java deleted file mode 100644 index 1f4c3848694a0d850b87d87bec291b6907af26a5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/IssueParamTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import de.ozgcloud.alfa.common.errorhandling.IssueParam.IssueParamBuilder; - -public class IssueParamTestFactory { - public static final String PARAM_NAME = ExceptionTestFactory.PARAM_NAME; - public static final String PARAM_DYNAMIC_VALUE = ExceptionTestFactory.PARAM_DYNAMIC_VALUE; - - public static IssueParam create() { - return createBuilder() - .build(); - } - - public static IssueParamBuilder createBuilder() { - return IssueParam.builder().name(PARAM_NAME).value(PARAM_DYNAMIC_VALUE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ProblemDetailMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ProblemDetailMapperTest.java deleted file mode 100644 index 0770ff9b4f78e4b17a45fda538b888f270802bdd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/errorhandling/ProblemDetailMapperTest.java +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.errorhandling; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.AbstractMap.SimpleEntry; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Stream; - -import jakarta.validation.ConstraintViolation; -import jakarta.validation.ConstraintViolationException; -import jakarta.validation.metadata.ConstraintDescriptor; - -import org.hibernate.validator.engine.HibernateConstraintViolation; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpStatus; -import org.springframework.http.ProblemDetail; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.DynamicViolationParameter; -import de.ozgcloud.common.errorhandling.ExceptionUtil; - -class ProblemDetailMapperTest { - - @Spy - private ProblemDetailMapper mapper; - - @Nested - class TestFromConstraintViolationException { - private final String exceptionMessage = LoremIpsum.getInstance().getWords(5); - private final Set<ConstraintViolation<?>> violations = Collections.singleton(ExceptionTestFactory.buildMockedConstraintViolation()); - private final ConstraintViolationException exception = new ConstraintViolationException(exceptionMessage, violations); - private final String message = LoremIpsum.getInstance().getWords(5); - - @BeforeEach - void mockMapper() { - doReturn(message).when(mapper).buildMessageWithExceptionId(exception); - } - - @Test - void shouldGetMessageWithExcpetionId() { - callMapper(); - - verify(mapper).buildMessageWithExceptionId(exception); - } - - @Test - void shouldHaveStatusUnprocessableEntity() { - var problemDetail = callMapper(); - - assertThat(problemDetail.getStatus()).isEqualTo(HttpStatus.UNPROCESSABLE_ENTITY.value()); - } - - @Test - void shouldHaveMessageInDetail() { - var problemDetail = callMapper(); - - assertThat(problemDetail.getDetail()).contains(message); - } - - @Test - void shouldGetDetailedViolationList() { - callMapper(); - - verify(mapper).buildInvalidParams(violations); - } - - @Test - void shouldSetPropertyInvalidParams() { - var expectedInvalidParamsValue = Map.of(); - doReturn(Stream.of(expectedInvalidParamsValue)).when(mapper).buildInvalidParams(violations); - - var problemDetail = callMapper(); - - assertThat(problemDetail.getProperties()) - .containsExactly(new SimpleEntry<String, Object>(ProblemDetailMapper.INVALID_PARAMS, List.of(expectedInvalidParamsValue))); - } - - private ProblemDetail callMapper() { - return mapper.fromConstraintViolationException(exception); - } - } - - @Nested - class TestBuildMessageWithExceptionId { - - private final String exceptionMessage = LoremIpsum.getInstance().getWords(5); - private final String exceptionId = UUID.randomUUID().toString(); - private final ConstraintViolationException exception = new ConstraintViolationException(exceptionMessage, null); - - @BeforeEach - void mockCreateExcpetionId() { - doReturn(exceptionId).when(mapper).createExceptionId(); - } - - @Test - void shouldCreateExceptionId() { - callMapper(); - - verify(mapper).createExceptionId(); - } - - @Test - void shouldFormatMessageWithExceptionId() { - var messageWithId = callMapper(); - - assertThat(messageWithId).isEqualTo(ExceptionUtil.formatMessageWithExceptionId(exceptionMessage, exceptionId)); - } - - private String callMapper() { - return mapper.buildMessageWithExceptionId(exception); - } - } - - @Nested - class TestBuildInvalidParams { - - @Nested - class OnViolations { - private final Set<ConstraintViolation<?>> violations = Set.of(ExceptionTestFactory.buildMockedConstraintViolation(), - ExceptionTestFactory.buildMockedConstraintViolation()); - - @Test - void shouldCallBuildDetailedViolation() { - callMapper().toList(); - - violations.forEach(violation -> verify(mapper).buildDetailedViolation(violation)); - } - - @Test - void shouldReturnListWithDetailedViolations() { - Map<String, Object> detailsMap = Map.of(LoremIpsum.getInstance().getWords(1), LoremIpsum.getInstance().getWords(1)); - violations.forEach(violation -> doReturn(detailsMap).when(mapper).buildDetailedViolation(violation)); - - var detailedViolations = callMapper(); - - assertThat(detailedViolations).containsExactly(detailsMap, detailsMap); - } - - private Stream<Map<String, Object>> callMapper() { - return mapper.buildInvalidParams(violations); - } - } - - @Nested - class OnEmptyViolations { - private final Set<ConstraintViolation<?>> violations = Collections.emptySet(); - - @Test - void shouldCallNotBuildDetailedViolation() { - callMapper(); - - verify(mapper, never()).buildDetailedViolation(any()); - } - - @Test - void shouldReturnListWithDetailedViolations() { - var detailedViolations = callMapper(); - - assertThat(detailedViolations).isEmpty(); - } - - private Stream<Map<String, Object>> callMapper() { - return mapper.buildInvalidParams(violations); - } - } - } - - @Nested - class TestBuildDetailedViolation { - private final ConstraintViolation<?> violation = ExceptionTestFactory.buildMockedConstraintViolation(); - - @Test - void shouldContainFieldName() { - var expectedEntry = new SimpleEntry<>(ProblemDetailMapper.INVALID_PARAMS_KEY_NAME, ExceptionTestFactory.PATH); - - var detailedViolation = callMapper(); - - assertThat(detailedViolation).contains(expectedEntry); - } - - @Test - void shouldContainValue() { - var expectedEntry = new SimpleEntry<>(ProblemDetailMapper.INVALID_PARAMS_KEY_VALUE, ExceptionTestFactory.PARAM_VALUE); - - var detailedViolation = callMapper(); - - assertThat(detailedViolation).contains(expectedEntry); - } - - @Test - void shouldHandleNullValue() { - when(violation.getInvalidValue()).thenReturn(null); - var expectedEntry = new SimpleEntry<>(ProblemDetailMapper.INVALID_PARAMS_KEY_VALUE, - ProblemDetailMapper.PROVIDED_VALUE_WAS_NULL); - - var detailedViolation = callMapper(); - - assertThat(detailedViolation).contains(expectedEntry); - } - - @Test - void shouldContainReason() { - var expectedEntry = new SimpleEntry<>(ProblemDetailMapper.INVALID_PARAMS_KEY_REASON, ExceptionTestFactory.MESSAGE); - - var detailedViolation = callMapper(); - - assertThat(detailedViolation).contains(expectedEntry); - } - - @Test - void shouldBuildParameters() { - callMapper(); - - verify(mapper).buildParameters(violation); - } - - @Test - void shouldContainConstraintParameters() { - var issueParameter = IssueParamTestFactory.create(); - doReturn(Stream.of(issueParameter)).when(mapper).buildParameters(violation); - var expectedEntry = new SimpleEntry<String, Object>(ProblemDetailMapper.INVALID_PARAMS_KEY_CONSTRAINT_PARAMETERS, - List.of(issueParameter)); - - var detailedViolation = callMapper(); - - assertThat(detailedViolation).contains(expectedEntry); - } - - private Map<String, Object> callMapper() { - return mapper.buildDetailedViolation(violation); - } - } - - @Nested - class TestBuildParameters { - - @Mock - private ConstraintViolation<?> violation; - - @Mock - @SuppressWarnings("rawtypes") - private ConstraintDescriptor constraintDescriptor; - - @Mock - @SuppressWarnings("rawtypes") - private HibernateConstraintViolation hibernateConstraintViolation; - - @SuppressWarnings("unchecked") - @BeforeEach - void setUpViolationMocks() { - when(violation.getConstraintDescriptor()).thenReturn(constraintDescriptor); - when(violation.unwrap(HibernateConstraintViolation.class)).thenReturn(hibernateConstraintViolation); - when(constraintDescriptor.getAttributes()) - .thenReturn(Map.of(ExceptionTestFactory.PARAM_NAME, ExceptionTestFactory.PARAM_DYNAMIC_VALUE)); - } - - @Nested - class OnNonDynamicPayload { - - @Test - void shouldBuildIssueParam() { - var issueParams = mapper.buildParameters(violation); - - assertThat(issueParams).usingRecursiveFieldByFieldElementComparator().contains(IssueParamTestFactory.create()); - } - - } - - @Nested - class TestWithDynamicPayload { - - @SuppressWarnings("unchecked") - @Test - void shouldHaveReplacedIssueParameterName() { - var dynamicValue = LoremIpsum.getInstance().getWords(1); - var dynamicViolationParameter = DynamicViolationParameter.builder() - .map(Map.of(ExceptionTestFactory.PARAM_NAME, dynamicValue)) - .build(); - when(hibernateConstraintViolation.getDynamicPayload(DynamicViolationParameter.class)).thenReturn(dynamicViolationParameter); - var expectedIssueParam = IssueParamTestFactory.createBuilder().value(dynamicValue).build(); - - var issueParams = mapper.buildParameters(violation); - - assertThat(issueParams).usingRecursiveFieldByFieldElementComparator().contains(expectedIssueParam); - } - - @SuppressWarnings("unchecked") - @Test - void shouldIgnoreKeyNotPresentInEntry() { - var dynamicViolationParameter = DynamicViolationParameter.builder() - .map(Map.of(LoremIpsum.getInstance().getWords(1), LoremIpsum.getInstance().getWords(1))) - .build(); - when(hibernateConstraintViolation.getDynamicPayload(DynamicViolationParameter.class)).thenReturn(dynamicViolationParameter); - var expectedIssueParam = IssueParamTestFactory.create(); - - var issueParams = mapper.buildParameters(violation); - - assertThat(issueParams).usingRecursiveFieldByFieldElementComparator().contains(expectedIssueParam); - } - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/GrpcOzgFileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/GrpcOzgFileTestFactory.java deleted file mode 100644 index f0da6a2f9b239557cbc893698ff23a90f8bfe3f4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/GrpcOzgFileTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; - -public class GrpcOzgFileTestFactory { - - static final String ID = OzgFileTestFactory.ID.toString(); - static final String NAME = OzgFileTestFactory.NAME; - static final long SIZE = OzgFileTestFactory.SIZE; - - public static GrpcOzgFile create() { - return createBuilder().build(); - } - - public static GrpcOzgFile.Builder createBuilder() { - return GrpcOzgFile.newBuilder() - .setId(ID) - .setName(NAME) - .setSize(SIZE) - .setContentType(OzgFileTestFactory.CONTENT_TYPE); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileMapperTest.java deleted file mode 100644 index 844e676bcaabb1f22122472cf25339ef52e77ec6..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileMapperTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class OzgFileMapperTest { - - private final OzgFileMapper mapper = Mappers.getMapper(OzgFileMapper.class); - - @Test - void shouldMap() { - var file = mapper.toFile(GrpcOzgFileTestFactory.create()); - - assertThat(file).isNotNull().usingRecursiveComparison().isEqualTo(OzgFileTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java deleted file mode 100644 index 92c9d8bd0ebae27ccd777fd4d65225ddd659e564..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileRemoteServiceTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.attachment.GrpcGetAttachmentsResponseTestFactory; -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.representation.GrpcGetRepresentationsResponseTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.grpc.file.FileServiceGrpc.FileServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest; -import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsResponse; -import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsRequest; -import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsResponse; - -class OzgFileRemoteServiceTest { - - @InjectMocks - private OzgFileRemoteService remoteService; - @Mock - private FileServiceBlockingStub serviceStub; - @Mock - private OzgFileMapper mapper; - @Mock - private ContextService contextService; - - @Nested - class TestGetAttachments { - - private final GrpcGetAttachmentsResponse response = GrpcGetAttachmentsResponseTestFactory.create(); - - @BeforeEach - void mock() { - when(serviceStub.getAttachments(any())).thenReturn(response); - } - - @Test - void shouldCallFileStub() { - doServiceCall(); - - verify(serviceStub).getAttachments(any(GrpcGetAttachmentsRequest.class)); - } - - @Test - void shouldCallMapper() { - var ozgFileAsStream = doServiceCall(); - ozgFileAsStream = forceActionsDone(ozgFileAsStream); - - verify(mapper).toFile(GrpcOzgFileTestFactory.create()); - } - - private Stream<OzgFile> forceActionsDone(Stream<OzgFile> stream) { - return stream.toList().stream(); - } - - private Stream<OzgFile> doServiceCall() { - return remoteService.getAttachments(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestGetRepresentations { - - private final GrpcGetRepresentationsResponse response = GrpcGetRepresentationsResponseTestFactory.create(); - - @BeforeEach - void mock() { - when(serviceStub.getRepresentations(any())).thenReturn(response); - } - - @Test - void shouldCallFileStub() { - doServiceCall(); - - verify(serviceStub).getRepresentations(any(GrpcGetRepresentationsRequest.class)); - } - - @Test - void shouldCallMapper() { - var ozgFileAsStream = doServiceCall(); - ozgFileAsStream = forceActionsDone(ozgFileAsStream); - - verify(mapper).toFile(GrpcOzgFileTestFactory.create()); - } - - private Stream<OzgFile> forceActionsDone(Stream<OzgFile> stream) { - return stream.toList().stream(); - } - - private Stream<OzgFile> doServiceCall() { - return remoteService.getRepresentations(VorgangHeaderTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java deleted file mode 100644 index 6aa99519c133ebecd604de9b85fc177950fb4c4d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileServiceTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class OzgFileServiceTest { - - @InjectMocks - private OzgFileService service; - @Mock - private OzgFileRemoteService remoteService; - - @Nested - class TestGetAttachments { - - @Test - void shouldCallRemoteService() { - service.getAttachments(VorgangHeaderTestFactory.ID); - - verify(remoteService).getAttachments(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestGetRepresentations { - - @Test - void shouldCallRemoteService() { - service.getRepresentations(VorgangHeaderTestFactory.ID); - - verify(remoteService).getRepresentations(VorgangHeaderTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileTestFactory.java deleted file mode 100644 index 1e6c0db94bbb66d3db40251b2ca1f170dc271fb1..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/file/OzgFileTestFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.file; - -import static de.ozgcloud.alfa.common.AlfaTestUtils.*; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileId; - -public class OzgFileTestFactory { - - public static final FileId ID = FileId.from(createMongoDbObjectId()); - public static final String NAME = BinaryFileTestFactory.NAME; - public static final long SIZE = BinaryFileTestFactory.SIZE; - public static final String CONTENT_TYPE = BinaryFileTestFactory.CONTENT_TYPE; - - public static OzgFile create() { - return createBuilder().build(); - } - - public static OzgFile createWithUniqueId() { - return createBuilder() - .id(FileId.from(createMongoDbObjectId())) - .build(); - } - - public static OzgFile.OzgFileBuilder createBuilder() { - return OzgFile.builder() - .id(ID) - .name(NAME) - .size(SIZE) - .contentType(CONTENT_TYPE); - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserHelperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserHelperTest.java deleted file mode 100644 index 724e34a13c49a515b4a0e99f4ba02af68dc9cccb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserHelperTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -class CurrentUserHelperTest { - - @DisplayName("Prepare role for check") - @Nested - class TestPrepareRoleForCheck { - - @Test - void shouldAddPrefixIfMissing() { - var roleWithoutPrefix = UserRole.VERWALTUNG_USER; - - var role = CurrentUserHelper.prepareRoleForCheck(roleWithoutPrefix); - - assertThat(role).isEqualTo(String.format("%s%s", CurrentUserHelper.ROLE_PREFIX, UserRole.VERWALTUNG_USER)); - } - - @Test - void shouldReturnRoleIfPrefixAlreadyExists() { - var roleWithPrefix = String.format("ROLE_%s", UserRole.VERWALTUNG_USER); - - var role = CurrentUserHelper.prepareRoleForCheck(roleWithPrefix); - - assertThat(role).isEqualTo(roleWithPrefix); - } - - @Test - void shouldReturnPassingRoleIfNonNull() { - var role = CurrentUserHelper.prepareRoleForCheck(null); - - assertThat(role).isNull(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserServiceITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserServiceITCase.java deleted file mode 100644 index 80a08bf7c33db35bf74799f581223be7ff3ee3ee..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserServiceITCase.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.test.context.support.WithMockUser; - -import de.ozgcloud.common.test.ITCase; - -@ITCase -class CurrentUserServiceITCase { - - @Autowired - private CurrentUserService service; - - @Nested - class TestHasRole { - - @WithMockUser(roles = "VERWALTUNG_LOESCHEN") - @Test - void shouldHaveUserRole() { - var result = service.hasRole(UserRole.VERWALTUNG_USER); - - assertThat(result).isTrue(); - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserServiceTest.java deleted file mode 100644 index a340011edd71d088e89383d2fe5b77f5ac890dd2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/CurrentUserServiceTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.security.access.hierarchicalroles.RoleHierarchy; -import org.springframework.security.oauth2.jwt.Jwt; - -import de.ozgcloud.alfa.JwtTestFactory; - -class CurrentUserServiceTest { - - @Spy - @InjectMocks - private CurrentUserService service; - @Mock - private UserService userService; - @Mock - private RoleHierarchy roleHierarchy; - - @Nested - class TestGetOrganisationseinheit { - - @Mock - private Jwt jwt; - - @Test - void shouldReturnOrganisationseinheitIdsFromMap() { - when(jwt.getClaim(CurrentUserService.USER_ATTRIBUTE_ORGANISATIONSEINHEIT_ID)).thenReturn(List.of("1", "2")); - - var result = service.getOrganisationsEinheitIds(jwt); - - assertThat(result).containsExactly("1", "2"); - } - - @Test - void shouldReturnOrgaIdAsString() { - when(jwt.getClaim(CurrentUserService.USER_ATTRIBUTE_ORGANISATIONSEINHEIT_ID)).thenReturn(List.of("1", 2)); - - var result = service.getOrganisationsEinheitIds(jwt); - - assertThat(result).containsExactly("1", "2"); - } - - @Test - void shouldReturnEmptyList() { - when(jwt.getClaim(CurrentUserService.USER_ATTRIBUTE_ORGANISATIONSEINHEIT_ID)).thenReturn(Collections.emptyList()); - - var result = service.getOrganisationsEinheitIds(jwt); - - assertThat(result).isEmpty(); - } - - @Test - void shouldReturnEmptyListIfNotExists() { - var result = service.getOrganisationsEinheitIds(null); - - assertThat(result).isEmpty(); - } - } - - @Nested - class TestGetUserId { - - @Test - void shouldReturnValueFromClaim() { - doReturn(Optional.of(UserProfileTestFactory.ID.toString())).when(service).getSingleClaimValue(any()); - - var id = service.getUserId(); - - assertThat(id).isEqualTo(UserProfileTestFactory.ID); - } - } - - @DisplayName("Get single claim value") - @Nested - class TestGetSingleClaimValue { - - @DisplayName("on existing claim") - @Nested - class TestOnExistingClaim { - - private static final String ATTRIBUTE_NAME = "userId"; - private static final String ATTRIBUTE_VALUE = "deadbeef"; - private static final Map<String, Object> CLAIMS = Map.of(ATTRIBUTE_NAME, ATTRIBUTE_VALUE); - - @Test - void shouldReturnUserAttribute() { - doReturn(Optional.of(JwtTestFactory.create(CLAIMS))).when(service).getCurrentSecurityToken(); - - var attribute = service.getSingleClaimValue(ATTRIBUTE_NAME); - - assertThat(attribute).isPresent().hasValue(ATTRIBUTE_VALUE); - } - } - - @DisplayName("on missing claim") - @Nested - class TestOnMissingClaim { - - private static final String ATTRIBUTE_NAME = "non_existing_claim"; - private static final Map<String, Object> CLAIMS = Collections.<String, Object>singletonMap("dummyClaim", "DummyClaimValue"); - - @Test - void shouldReturnEmpty() { - doReturn(Optional.of(JwtTestFactory.create(CLAIMS))).when(service).getCurrentSecurityToken(); - - var attribute = service.getSingleClaimValue(ATTRIBUTE_NAME); - - assertThat(attribute).isEmpty(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/GrpcUserProfileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/GrpcUserProfileTestFactory.java deleted file mode 100644 index fef21518ab0a5d372995818e2718ec04157d7f1b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/GrpcUserProfileTestFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import de.ozgcloud.user.userprofile.GrpcGetUserProfileRequest; -import de.ozgcloud.user.userprofile.GrpcGetUserProfileResponse; -import de.ozgcloud.user.userprofile.GrpcUserProfile; - -public class GrpcUserProfileTestFactory { - - public static GrpcGetUserProfileRequest createGetUserProfileRequest() { - return GrpcGetUserProfileRequest.newBuilder().setUserId(UserProfileTestFactory.ID.toString()).build(); - } - - public static GrpcGetUserProfileResponse createGetUserProfileResponse() { - return GrpcGetUserProfileResponse.newBuilder().setUserProfile(create()).build(); - } - - public static GrpcUserProfile create() { - return createBuilder().build(); - } - - public static GrpcUserProfile.Builder createBuilder() { - return GrpcUserProfile.newBuilder() - .setId(UserProfileTestFactory.ID.toString()) - .setFirstName(UserProfileTestFactory.FIRSTNAME) - .setLastName(UserProfileTestFactory.LASTNAME); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/GrpcUserTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/GrpcUserTestFactory.java deleted file mode 100644 index 55db0f6e8200c606c86c9bb4684afe036c71ac3e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/GrpcUserTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Collections; -import java.util.UUID; - -import de.ozgcloud.vorgang.grpc.command.GrpcUser; - -public class GrpcUserTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String NAME = UserProfileTestFactory.FULLNAME; - public static final String ROLE = UserProfileTestFactory.ROLE; - - public static GrpcUser create() { - return createBuilder().build(); - } - - public static GrpcUser.Builder createBuilder() { - return GrpcUser.newBuilder() - .setId(ID) - .setName(NAME) - .addAllRoles(Collections.singleton(ROLE)); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserManagerPropertiesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserManagerPropertiesTestFactory.java deleted file mode 100644 index 336fa4919da926c7b3f4e2754327f5805218faf3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserManagerPropertiesTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -public class UserManagerPropertiesTestFactory { - - public static final String PROFILE_TEMPLATE = "profile template"; - - public static UserManagerProperties create() { - var properties = new UserManagerProperties(); - - properties.setProfileTemplate(PROFILE_TEMPLATE); - - return properties; - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserManagerUrlProviderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserManagerUrlProviderTest.java deleted file mode 100644 index 0e97b04d902975b88fb2b6b3d28d8b5c537f7a3e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserManagerUrlProviderTest.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class UserManagerUrlProviderTest { - - private static final String DUMMY_URL = "dummyUrl/"; - private static final String DUMMY_PROFILE_TEMPLATE = "dummyProfileTemplate"; - private static final String DUMMY_PROFILE_SEARCH_TEMPLATE = "dummyProfileSearchTemplate"; - - @InjectMocks - private UserManagerUrlProvider urlProvider; - @Mock - private UserManagerProperties userManagerProperties; - - @DisplayName("Get user profile template") - @Nested - class TestGetUserProfileTemplate { - - @Test - void shouldGetUrlFromProperties() { - urlProvider.getUserProfileTemplate(); - - verify(userManagerProperties).getUrl(); - } - - @Test - void shouldGetUserProfileTemplateFromProperties() { - urlProvider.getUserProfileTemplate(); - - verify(userManagerProperties).getProfileTemplate(); - } - - @Test - void shouldReturnValue() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - when(userManagerProperties.getProfileTemplate()).thenReturn(DUMMY_PROFILE_TEMPLATE); - - var profileTemplate = urlProvider.getUserProfileTemplate(); - - assertThat(profileTemplate).isEqualTo("dummyUrl/dummyProfileTemplate"); - } - } - - @DisplayName("Get user profile search template") - @Nested - class TestGetUserProfileSearchTemplate { - - @Test - void shouldGetUrlFromProperties() { - urlProvider.getSearchUserProfilesTemplate(); - - verify(userManagerProperties).getUrl(); - } - - @Test - void shouldGetUserProfileSearchTemplateFromProperties() { - urlProvider.getSearchUserProfilesTemplate(); - - verify(userManagerProperties).getSearchTemplate(); - } - - @Test - void shouldReturnValue() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - when(userManagerProperties.getSearchTemplate()).thenReturn(DUMMY_PROFILE_SEARCH_TEMPLATE); - - var profileTemplate = urlProvider.getSearchUserProfilesTemplate(); - - assertThat(profileTemplate.toUriString()).isEqualTo("dummyUrl/dummyProfileSearchTemplate"); - } - } - - @DisplayName("Is configured for user profile") - @Nested - class TestIsConfiguredForUserProfile { - - @Test - void shouldGetUserManagerPropertiesUrl() { - urlProvider.isConfiguredForUserProfile(); - - verify(userManagerProperties).getUrl(); - } - - @Test - void shouldGetUserManagerPropertiesProfileTemplate() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - - urlProvider.isConfiguredForUserProfile(); - - verify(userManagerProperties).getProfileTemplate(); - } - - @Test - void shouldReturnTrueIfUrlAndProfileTemplateExists() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - when(userManagerProperties.getProfileTemplate()).thenReturn(DUMMY_PROFILE_TEMPLATE); - - var isConfigured = urlProvider.isConfiguredForUserProfile(); - - assertThat(isConfigured).isTrue(); - } - - @Test - void shouldReturnFalseIfUrlNotExists() { - when(userManagerProperties.getUrl()).thenReturn(StringUtils.EMPTY); - - var isConfigured = urlProvider.isConfiguredForUserProfile(); - - assertThat(isConfigured).isFalse(); - } - - @Test - void shouldReturnFalseIfProfileTemplateNotExists() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - when(userManagerProperties.getProfileTemplate()).thenReturn(StringUtils.EMPTY); - - var isConfigured = urlProvider.isConfiguredForUserProfile(); - - assertThat(isConfigured).isFalse(); - } - } - - @DisplayName("Is configured for search user profile") - @Nested - class TestIsConfiguredForSearchUserProfile { - - @Test - void shouldGetUserManagerPropertiesUrl() { - urlProvider.isConfiguredForSearchUserProfile(); - - verify(userManagerProperties).getUrl(); - } - - @Test - void shouldGetUserManagerPropertiesSearchTemplate() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - - urlProvider.isConfiguredForSearchUserProfile(); - - verify(userManagerProperties).getSearchTemplate(); - } - - @Test - void shouldReturnTrueIfUrlAndSearchTemplateExists() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - when(userManagerProperties.getSearchTemplate()).thenReturn(DUMMY_PROFILE_SEARCH_TEMPLATE); - - var isConfigured = urlProvider.isConfiguredForSearchUserProfile(); - - assertThat(isConfigured).isTrue(); - } - - @Test - void shouldReturnFalseIfUrlNotExists() { - when(userManagerProperties.getUrl()).thenReturn(StringUtils.EMPTY); - - var isConfigured = urlProvider.isConfiguredForSearchUserProfile(); - - assertThat(isConfigured).isFalse(); - } - - @Test - void shouldReturnFalseIfProfileTemplateNotExists() { - when(userManagerProperties.getUrl()).thenReturn(DUMMY_URL); - when(userManagerProperties.getSearchTemplate()).thenReturn(StringUtils.EMPTY); - - var isConfigured = urlProvider.isConfiguredForSearchUserProfile(); - - assertThat(isConfigured).isFalse(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserProfileMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserProfileMapperTest.java deleted file mode 100644 index 4a8edec1e369fc32eaf1244d286cc64122dcf07d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserProfileMapperTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -import de.ozgcloud.user.userprofile.GrpcUserProfile; - -class UserProfileMapperTest { - - private UserProfileMapper mapper = Mappers.getMapper(UserProfileMapper.class); - - @DisplayName("Map from") - @Nested - class TestMapFrom { - - @Test - void shouldMapFirstName() { - var userProfile = map(); - - assertThat(userProfile.getFirstName()).isEqualTo(UserProfileTestFactory.FIRSTNAME); - } - - @Test - void shouldMapLastName() { - var userProfile = map(); - - assertThat(userProfile.getLastName()).isEqualTo(UserProfileTestFactory.LASTNAME); - } - - @Test - void shouldMapId() { - var userProfile = map(); - - assertThat(userProfile.getId()).isEqualTo(UserProfileTestFactory.ID); - } - - @Test - void shouldProceedWithNull() { - Assertions.assertDoesNotThrow(() -> mapper.mapFrom(GrpcUserProfile.newBuilder().build())); - } - - private UserProfile map() { - return mapper.mapFrom(GrpcUserProfileTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserProfileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserProfileTestFactory.java deleted file mode 100644 index 901d7bbbde457d357b0e0764ab5282c2dfd8dbf0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserProfileTestFactory.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import java.util.Collections; -import java.util.UUID; - -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; - -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; - -public class UserProfileTestFactory { - - public static final UserId EXTERNAL_ID = UserId.from(UUID.randomUUID().toString()); - public static final UserId INTERNAL_ID = UserId.from(UUID.randomUUID().toString()); - public static final UserId ID = INTERNAL_ID; - public static final String FIRSTNAME = "Vaneßa"; - public static final String LASTNAME = "Täst"; - public static final String FULLNAME = String.format("%s %s", FIRSTNAME, LASTNAME); - public static final String ROLE = "TEST_USER"; - public static final GrantedAuthority AUTHORITY = new SimpleGrantedAuthority(ROLE); - - public static final String SYSTEM_USER = "system_user_example"; - - public static UserProfile create() { - return createBuilder().build(); - } - - public static UserProfile.UserProfileBuilder createBuilder() { - return UserProfile.builder() - .id(ID) - .firstName(FIRSTNAME) - .lastName(LASTNAME) - .organisationseinheitId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID) - .authorities(Collections.singleton(AUTHORITY)); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserRemoteServiceTest.java deleted file mode 100644 index 8074182a6cb3e43a27e962badedf85697265a3ee..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserRemoteServiceTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc.UserProfileServiceBlockingStub; -import de.ozgcloud.user.userprofile.GrpcGetUserProfileRequest; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; - -class UserRemoteServiceTest { - - @Spy - @InjectMocks - private UserRemoteService service; - @Mock - private UserProfileServiceBlockingStub serviceStub; - @Mock - private UserProfileMapper mapper; - - @BeforeEach - void prepareStub() { - doReturn(serviceStub).when(service).getUserProfileServiceStub(); - } - - @DisplayName("Find by id") - @Nested - class TestFindById { - - @Captor - private ArgumentCaptor<GrpcGetUserProfileRequest> requestCaptor; - - @BeforeEach - void mock() { - when(serviceStub.getById(any())).thenReturn(GrpcUserProfileTestFactory.createGetUserProfileResponse()); - when(mapper.mapFrom(any())).thenReturn(UserProfileTestFactory.create()); - } - - @Test - void shouldCallRemoteService() { - service.getById(UserProfileTestFactory.ID); - - verify(serviceStub).getById(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getUserId()).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - @Test - void shouldCallMapper() { - service.getById(UserProfileTestFactory.ID); - - verify(mapper).mapFrom(GrpcUserProfileTestFactory.create()); - } - - @Test - void shouldReturnValue() { - var userProfile = service.getById(UserProfileTestFactory.ID); - - assertThat(userProfile).usingRecursiveComparison().isEqualTo(UserProfileTestFactory.create()); - } - } - - @DisplayName("Find by externalId") - @Nested - class TestFindByExternalId { - @Test - void shouldHandleNotFound() { - when(serviceStub.getByExternalId(any())).thenThrow(new StatusRuntimeException(Status.NOT_FOUND)); - - var result = service.getByExternalId(UserProfileTestFactory.EXTERNAL_ID); - - assertThat(result).isEmpty(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserServiceTest.java deleted file mode 100644 index a74a98b172e360e4bc45681dedea8efb99e697e9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserServiceTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.common.user; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import io.grpc.Metadata; -import io.grpc.Status; -import io.grpc.StatusRuntimeException; - -class UserServiceTest { - - @InjectMocks - private UserService service; - @Mock - private UserRemoteService remoteService; - - @DisplayName("Get by id") - @Nested - class TestGetById { - - @Test - void shouldCallRemoteService() { - getById(); - - verify(remoteService).getById(UserProfileTestFactory.ID); - } - - @Test - void shouldReturnNullOnNotFoundException() { - when(remoteService.getById(any())).thenThrow(new StatusRuntimeException(Status.NOT_FOUND)); - - var userProfile = getById(); - - assertThat(userProfile).isNull(); - } - - @SuppressWarnings("null") - @DisplayName("should throw unavailable exception if exception is other than not found") - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NOT_FOUND" }) - void shouldThrowServiceUnavailableException(Status.Code status) { - when(remoteService.getById(any())).thenThrow(new StatusRuntimeException(Status.fromCode(status), new Metadata())); - - assertThatThrownBy(() -> getById()).isInstanceOf(UserManagerUnavailableException.class); - } - - private UserProfile getById() { - return service.getById(UserProfileTestFactory.ID); - } - } - - @DisplayName("Get internalId") - @Nested - class TestGetInternalId { - - @Test - void shouldCallRemoteService() { - when(remoteService.getByExternalId(any())).thenReturn(Optional.of(UserProfileTestFactory.create())); - - getInternalId(); - - verify(remoteService).getByExternalId(UserProfileTestFactory.EXTERNAL_ID); - } - - private Optional<UserId> getInternalId() { - return service.getInternalId(UserProfileTestFactory.EXTERNAL_ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/zipdownload/ZipDownloadServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/zipdownload/ZipDownloadServiceTest.java deleted file mode 100644 index d99563514593561d1d90c7ef96f61cf00c3e3109..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/zipdownload/ZipDownloadServiceTest.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.common.zipdownload; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedConstruction; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.SneakyThrows; - -public class ZipDownloadServiceTest { - - @Spy - @InjectMocks - private ZipDownloadService service; - - @Mock - private BinaryFileService binaryFileService; - - @Nested - class TestWrite { - private final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - private final List<OzgFile> ozgFiles = List.of(OzgFileTestFactory.create()); - @Mock - private File zipFile; - - @Test - void shouldCreateZipFile() { - callService(); - - verify(service).createZipFile(ozgFiles); - } - - @Test - void shouldWriteZipFileContent() { - doReturn(zipFile).when(service).createZipFile(ozgFiles); - doNothing().when(service).writeZipFileContent(zipFile, outputStream); - - callService(); - - verify(service).writeZipFileContent(zipFile, outputStream); - } - - private void callService() { - service.write(ozgFiles, outputStream); - } - } - - @Nested - class TestCreateZipFile { - private final OzgFile file1 = OzgFileTestFactory.createWithUniqueId(); - private final OzgFile file2 = OzgFileTestFactory.createWithUniqueId(); - private final List<OzgFile> ozgFiles = List.of(file1, file2); - - private MockedConstruction<FileOutputStream> mockFileOutputStream; - private MockedConstruction<ZipOutputStream> mockZipOutputStream; - private File file; - private FileOutputStream fileOutputStream; - - @BeforeEach - void setUpMocks() { - mockFileOutputStream = mockConstruction(FileOutputStream.class, - (mock, context) -> { - file = (File) context.arguments().get(0); - }); - mockZipOutputStream = mockConstruction(ZipOutputStream.class, - (mock, context) -> { - fileOutputStream = (FileOutputStream) context.arguments().get(0); - }); - } - - @AfterEach - void cleanUp() { - mockFileOutputStream.close(); - mockZipOutputStream.close(); - } - - @Test - void shouldCreateZipOutputStream() { - callService(); - - assertThat(mockZipOutputStream.constructed()).hasSize(1); - assertThat(fileOutputStream).isEqualTo(mockFileOutputStream.constructed().get(0)); - } - - @Test - void shouldAddOzgFilesToZip() { - callService(); - - verify(service).addOzgFileToZip(file1, mockZipOutputStream.constructed().get(0)); - verify(service).addOzgFileToZip(file2, mockZipOutputStream.constructed().get(0)); - } - - @Test - void shouldReturnFile() { - var resultFile = callService(); - - assertThat(resultFile).isEqualTo(file); - } - - @Test - void shouldThrowTechnicalException() { - doThrow(TechnicalException.class).when(service).addOzgFileToZip(any(), any()); - - assertThrows(TechnicalException.class, this::callService); - } - - private File callService() { - return service.createZipFile(ozgFiles); - } - } - - @Nested - class TestAddOzgFileToZip { - private final OzgFile ozgFile = OzgFileTestFactory.create(); - - @Mock - private ZipOutputStream zipOutputStream; - - private MockedConstruction<ZipEntry> mockZipEntry; - private String entryName; - - @BeforeEach - void setUpMocks() { - mockZipEntry = mockConstruction(ZipEntry.class, - (mock, context) -> { - entryName = (String) context.arguments().get(0); - }); - } - - @AfterEach - void cleanUp() { - mockZipEntry.close(); - } - - @Test - void shouldCreateZipEntry() { - callService(); - - assertThat(mockZipEntry.constructed()).hasSize(1); - } - - @Test - void shouldSetZipEntryName() { - callService(); - - assertThat(entryName).isEqualTo(ozgFile.getName()); - } - - @Test - @SneakyThrows - void shouldPutNextEntry() { - callService(); - - verify(zipOutputStream).putNextEntry(mockZipEntry.constructed().get(0)); - } - - @Test - @SneakyThrows - void shouldWriteContent() { - callService(); - - verify(binaryFileService).writeFileContent(ozgFile.getId(), zipOutputStream); - } - - @Test - @SneakyThrows - void shouldCloseEntry() { - callService(); - - verify(zipOutputStream).closeEntry(); - } - - @Test - @SneakyThrows - void shouldThrowTechnicalException() { - doThrow(IOException.class).when(zipOutputStream).putNextEntry(any()); - - assertThrows(TechnicalException.class, this::callService); - } - - private void callService() { - service.addOzgFileToZip(ozgFile, zipOutputStream); - } - } - - @Nested - class TestWriteZipFileContent { - private MockedConstruction<FileInputStream> mockFileInputStream; - - private File argumentFile; - @Mock - private File file; - - @Mock - private FileOutputStream fileOutputStream; - - @AfterEach - void cleanUp() { - mockFileInputStream.close(); - } - - @Test - void shouldCreateFileInputStreamWithFileArgument() { - mockFileInputStream = mockConstruction(FileInputStream.class, - (mock, context) -> { - argumentFile = (File) context.arguments().get(0); - }); - - callService(); - - assertThat(mockFileInputStream.constructed()).hasSize(1); - assertThat(argumentFile).isEqualTo(file); - } - - @Test - @SneakyThrows - void shouldTransferToOutputStream() { - mockFileInputStream = mockConstruction(FileInputStream.class); - - callService(); - - verify(mockFileInputStream.constructed().get(0)).transferTo(fileOutputStream); - } - - @Test - void shouldThrowTechnicalException() { - mockFileInputStream = mockConstruction(FileInputStream.class, - (mock, context) -> { - when(mock.transferTo(fileOutputStream)).thenThrow(IOException.class); - }); - - assertThrows(TechnicalException.class, this::callService); - } - - private void callService() { - service.writeZipFileContent(file, fileOutputStream); - } - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportRemoteServiceTest.java deleted file mode 100644 index 7fceec25122e3a12cd7d85ff26b05ea071436658..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportRemoteServiceTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Iterator; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.archive.grpc.export.ExportServiceGrpc.ExportServiceBlockingStub; -import de.ozgcloud.archive.grpc.export.GrpcExportVorgangRequest; -import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; - -class ExportRemoteServiceTest { - - @Spy - @InjectMocks - private ExportRemoteService service; - @Mock - private ExportServiceBlockingStub exportServiceStub; - - @Nested - class TestExportVorgang { - - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - private static final ArgumentMatcher<GrpcExportVorgangRequest> HAS_VORGANG_ID = request -> request.getVorgangId().equals(VorgangHeaderTestFactory.ID); - - @Mock - private Iterator<GrpcExportVorgangResponse> responseIterator; - private MockedStatic<StreamedExportedVorgangFile> mockedStaticExportedFile; - - @BeforeEach - void init() { - mockedStaticExportedFile = mockStatic(StreamedExportedVorgangFile.class); - mockedStaticExportedFile.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); - when(exportServiceStub.exportVorgang(any(GrpcExportVorgangRequest.class))).thenReturn(responseIterator); - } - - @AfterEach - void cleanup() { - mockedStaticExportedFile.close(); - } - - @Test - void shouldExportVorgang() { - service.exportVorgang(VORGANG_ID); - - verify(exportServiceStub).exportVorgang(argThat(HAS_VORGANG_ID)); - } - - @Test - void shouldReturnExportedVorgangFile() { - var exportedVorgangFile = service.exportVorgang(VORGANG_ID); - - assertThat(exportedVorgangFile).isInstanceOf(StreamedExportedVorgangFile.class).extracting("responseIterator").isEqualTo(responseIterator); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java deleted file mode 100644 index 9dcbfaa1b949c077a24d281c7369ffd2353d912c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.io.OutputStream; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class ExportVorgangControllerTest { - - @Spy - @InjectMocks - private ExportVorgangController controller; - @Mock - private ExportRemoteService exportRemoteService; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestExportVorgang { - - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - public static final String EXPORTED_VORGANG_FILENAME = UUID.randomUUID().toString(); - - @Mock - private ExportedVorgangFile exportedVorgangFile; - - @BeforeEach - void init() { - when(exportedVorgangFile.getFileName()).thenReturn(EXPORTED_VORGANG_FILENAME); - when(exportRemoteService.exportVorgang(VORGANG_ID)).thenReturn(exportedVorgangFile); - } - - @Test - void shouldExportVorgang() throws Exception { - doRequest(); - - verify(exportRemoteService).exportVorgang(VORGANG_ID); - } - - @Test - void shouldHaveContentDispositonHeader() throws Exception { - doRequest().andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + EXPORTED_VORGANG_FILENAME)); - } - - @Test - void shouldHaveContentTypeHeader() throws Exception { - doRequest().andExpect(header().string(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM.toString())); - } - - @Test - void shouldWriteFileToOutputStream() throws Exception { - doRequest(); - - verify(exportedVorgangFile).writeToOutputStream(any(OutputStream.class)); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(asyncDispatch( - mockMvc.perform(get(ExportVorgangController.PATH + "/" + VorgangHeaderTestFactory.ID) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_OCTET_STREAM_VALUE)).andReturn())) - .andExpect(status().isOk()); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java deleted file mode 100644 index 756653dc959487e3fcc444bc110304ca08477e4e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.UriTemplate; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class ExportVorgangProcessorTest { - - @InjectMocks - private ExportVorgangProcessor processor; - @Mock - private DmsProperties dmsProperties; - @Mock - private VorgangController vorgangController; - - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @Nested - class TestProcess { - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - @DisplayName("Export link") - @Nested - class TestExportLink { - - @Test - void shouldAddLink() { - var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); - givenVorgangIsEditable(vorgang); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isPresent().get().extracting(Link::getHref) - .isEqualTo(ExportVorgangController.PATH + "/" + VorgangHeaderTestFactory.ID); - } - - @ParameterizedTest - @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ABGESCHLOSSEN") - void shouldNotAddLinkWhenVorgangIsNotAbgeschlossen(VorgangStatus status) { - var vorgang = vorgangInStatus(status); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); - } - - @Test - void shouldNotAddLinkWhenVorgangIsNotEditable() { - var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); - givenVorgangIsNotEditable(vorgang); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); - } - } - - @Nested - class TestArchiveLink { - - @Test - void shouldAddLink() { - givenDmsIsEnabled(); - var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); - givenVorgangIsEditable(vorgang); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(UriTemplate.of(CommandByRelationController.COMMAND_BY_RELATION_PATH) - .expand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString()); - } - - @ParameterizedTest - @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ABGESCHLOSSEN") - void shouldNotAddLinkWhenVorgangIsNotAbgeschlossen(VorgangStatus status) { - var vorgang = vorgangInStatus(status); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); - } - - @Test - void shouldNotAddLinkWhenDmsIsNotEnabled() { - givenDmsIsNotEnabled(); - var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); - } - - @Test - void shouldNotAddLinkWhenVorgangIsNotEditable() { - givenDmsIsEnabled(); - var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); - givenVorgangIsNotEditable(vorgang); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); - } - - void givenDmsIsEnabled() { - when(dmsProperties.isEnabled()).thenReturn(true); - } - - void givenDmsIsNotEnabled() { - when(dmsProperties.isEnabled()).thenReturn(false); - } - } - - void givenVorgangIsEditable(VorgangWithEingang vorgang) { - when(vorgangController.isEditable(vorgang)).thenReturn(true); - } - - void givenVorgangIsNotEditable(VorgangWithEingang vorgang) { - when(vorgangController.isEditable(vorgang)).thenReturn(false); - } - - private VorgangWithEingang vorgangInStatus(VorgangStatus status) { - return VorgangWithEingangTestFactory.createBuilder().status(status).build(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcExportVorgangResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcExportVorgangResponseTestFactory.java deleted file mode 100644 index 7daa54d2d59df5c99390d29372bb44090136574c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcExportVorgangResponseTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; -import de.ozgcloud.archive.grpc.export.GrpcFile; - -class GrpcExportVorgangResponseTestFactory { - - public static final GrpcFile VORGANG_FILE_WITH_NAME = GrpcFileTestFactory.createWithName(); - public static final GrpcFile VORGANG_FILE_WITH_CONTENT = GrpcFileTestFactory.createWithContent(); - - public static GrpcExportVorgangResponse createWithName() { - return createBuilder().setVorgangFile(VORGANG_FILE_WITH_NAME).build(); - } - - public static GrpcExportVorgangResponse createWithContent() { - return createBuilder().setVorgangFile(VORGANG_FILE_WITH_CONTENT).build(); - } - - public static GrpcExportVorgangResponse.Builder createBuilder() { - return GrpcExportVorgangResponse.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcFileTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcFileTestFactory.java deleted file mode 100644 index 1e006b43360a1a9ec8cd54f80baa3e8e9a6a587c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/GrpcFileTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import com.google.protobuf.ByteString; -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.archive.grpc.export.GrpcFile; - -class GrpcFileTestFactory { - - public static final String FILE_NAME = LoremIpsum.getInstance().getName(); - public static final ByteString FILE_CONTENT = ByteString.copyFromUtf8(LoremIpsum.getInstance().getWords(10)); - - public static GrpcFile createWithName() { - return createBuilder().setFileName(FILE_NAME).build(); - } - - public static GrpcFile createWithContent() { - return createBuilder().setFileContent(FILE_CONTENT).build(); - } - - public static GrpcFile.Builder createBuilder() { - return GrpcFile.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java deleted file mode 100644 index d02b5d5c63593e94101655bc86787d7ae73e515c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.Iterator; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.MockedStatic; - -import com.google.protobuf.ByteString; -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; -import de.ozgcloud.common.errorhandling.TechnicalException; - -class StreamedExportedVorgangFileTest { - - @Mock - private Iterator<GrpcExportVorgangResponse> responseIterator; - - @Nested - class TestContructor { - - private MockedStatic<StreamedExportedVorgangFile> mockedStatic; - - @BeforeEach - void init() { - mockedStatic = mockStatic(StreamedExportedVorgangFile.class); - mockedStatic.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); - } - - @AfterEach - void cleanup() { - mockedStatic.close(); - } - - @Test - void shouldGetFileNameFromResponseIterator() { - new StreamedExportedVorgangFile(responseIterator); - - mockedStatic.verify(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)); - } - - @Test - void shouldSetFileName() { - var exportedVorgangFile = new StreamedExportedVorgangFile(responseIterator); - - assertThat(exportedVorgangFile.getFileName()).isEqualTo(GrpcFileTestFactory.FILE_NAME); - } - } - - @Nested - class TestGetFileNameFrom { - - @Nested - class OnEmptyResponse { - - @BeforeEach - void init() { - when(responseIterator.hasNext()).thenReturn(false); - } - - @Test - void shouldThrowException() { - assertThatExceptionOfType(TechnicalException.class).isThrownBy(TestGetFileNameFrom.this::callTestedMethod); - } - } - - @Nested - class OnNotEmptyResponse { - - @BeforeEach - void init() { - when(responseIterator.hasNext()).thenReturn(true); - when(responseIterator.next()).thenReturn(GrpcExportVorgangResponseTestFactory.createWithName()); - } - - @Test - void shouldCallHasNext() { - callTestedMethod(); - - verify(responseIterator).hasNext(); - } - - @Test - void shouldCallNextOnce() { - callTestedMethod(); - - verify(responseIterator, times(1)).next(); - } - - @Test - void shouldReturnFileName() { - var fileName = callTestedMethod(); - - assertThat(fileName).isEqualTo(GrpcFileTestFactory.FILE_NAME); - } - } - - private String callTestedMethod() { - return StreamedExportedVorgangFile.getFileNameFrom(responseIterator); - } - } - - @Nested - class TestWriteToOutputStream { - - public static final ByteString FILE_CONTENT_1 = GrpcFileTestFactory.FILE_CONTENT; - public static final ByteString FILE_CONTENT_2 = ByteString.copyFromUtf8(LoremIpsum.getInstance().getWords(8)); - - @Mock - private OutputStream outputStream; - - private MockedStatic<StreamedExportedVorgangFile> mockedStatic; - - @BeforeEach - void init() { - mockedStatic = mockStatic(StreamedExportedVorgangFile.class); - mockedStatic.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); - when(responseIterator.hasNext()) - .thenReturn(true) - .thenReturn(true) - .thenReturn(false); - when(responseIterator.next()) - .thenReturn(GrpcExportVorgangResponseTestFactory.createWithContent()) - .thenReturn(GrpcExportVorgangResponseTestFactory.createBuilder().setVorgangFile( - GrpcFileTestFactory.createBuilder().setFileContent(FILE_CONTENT_2).build() - ).build()); - } - - @AfterEach - void cleanup() { - mockedStatic.close(); - } - - @Test - void shouldWriteFileContentInOrder() throws IOException { - var orderVerifier = inOrder(outputStream); - - new StreamedExportedVorgangFile(responseIterator).writeToOutputStream(outputStream); - - orderVerifier.verify(outputStream).write(FILE_CONTENT_1.toByteArray()); - orderVerifier.verify(outputStream).write(FILE_CONTENT_2.toByteArray()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintControllerTest.java deleted file mode 100644 index 65db36cca744c8fcbba14522d3d3279e952dacad..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintControllerTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import lombok.SneakyThrows; - -class HintControllerTest { - - @InjectMocks - private HintController controller; - @Mock - private HintService service; - @Mock - private HintModelAssembler modelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("GetAll") - @Nested - class TestGetAl { - - private List<Hint> hints = List.of(HintTestFactory.create()); - - @BeforeEach - void mockService() { - when(service.findHints()).thenReturn(hints); - } - - @SneakyThrows - @Test - void shouldReturnStatusOk() { - callEndpoint().andExpect(status().isOk()); - } - - @Test - void shouldCallService() { - callEndpoint(); - - verify(service).findHints(); - } - - @Test - void shouldCallModelAssembler() { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(hints); - } - - @SneakyThrows - private ResultActions callEndpoint() { - return mockMvc.perform(get(HintController.PATH)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintModelAssemblerTest.java deleted file mode 100644 index b053f76bf7c092364e3b9f337b7a3eb4207bde2d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintModelAssemblerTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import static org.assertj.core.api.Assertions.*; - -import java.util.List; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -class HintModelAssemblerTest { - - private HintModelAssembler modelAssembler = new HintModelAssembler(); - - @DisplayName("To collectionModel") - @Nested - class TestToCollectionModel { - - @Test - void shouldHaveSelfLink() { - var collectionModel = modelAssembler.toCollectionModel(List.of(HintTestFactory.create())); - - assertThat(collectionModel.getLink(IanaLinkRelations.SELF)).isPresent() - .get().extracting(Link::getHref).isEqualTo(HintController.PATH); - } - } - - @DisplayName("To model") - @Nested - class TestToModel { - - @Test - void shouldHaveSelfLink() { - var model = modelAssembler.toModel(HintTestFactory.create()); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref) - .isEqualTo(String.format("%s/%s", HintController.PATH, HintTestFactory.CODE)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintRootResourceProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintRootResourceProcessorTest.java deleted file mode 100644 index 5bc261f2eb1956a811d3d122e1096bae0d78dd76..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintRootResourceProcessorTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.hint; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.RootTestFactory; - -class HintRootResourceProcessorTest { - - @InjectMocks - private HintRootResourceProcessor processor; - @Mock - private HintService hintService; - - @DisplayName("HintsLink") - @Nested - class TestHintsLink { - - @Test - void shouldCallHintService() { - processor.process(EntityModel.of(RootTestFactory.create())); - - verify(hintService).hasHints(); - } - - @Test - void shouldBePresentIfHintsExists() { - when(hintService.hasHints()).thenReturn(true); - - var model = processor.process(EntityModel.of(RootTestFactory.create())); - - assertThat(model.getLink(HintRootResourceProcessor.HINTS_RELATION)).get().extracting(Link::getHref).isEqualTo(HintController.PATH); - } - - @Test - void shouldNotBePresentIfHintsExists() { - when(hintService.hasHints()).thenReturn(false); - - var model = processor.process(EntityModel.of(RootTestFactory.create())); - - assertThat(model.getLink(HintRootResourceProcessor.HINTS_RELATION)).isNotPresent(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintServiceTest.java deleted file mode 100644 index 45fc769c70501ce53a26d4feffbdb728c7d23586..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintServiceTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; - -class HintServiceTest { - - @Spy - @InjectMocks - private HintService service; - @Mock - private CurrentUserService currentUserService; - - @DisplayName("Find hints") - @Nested - class TestFindHints { - - @Test - void shouldCallGetHasUserNoOrganisationsEinheitIdHint() { - doReturn(Optional.empty()).when(service).getHasUserNoOrganisationsEinheitIdHint(); - - service.findHints(); - - verify(service).getHasUserNoOrganisationsEinheitIdHint(); - } - - @Test - void shouldReturnHintsIfPresent() { - var hint = HintTestFactory.create(); - doReturn(Optional.of(hint)).when(service).getHasUserNoOrganisationsEinheitIdHint(); - - var hints = service.findHints(); - - assertThat(hints).containsExactly(hint); - } - - @Test - void shouldReturnEmptyListIfPresent() { - doReturn(Optional.empty()).when(service).getHasUserNoOrganisationsEinheitIdHint(); - - var hints = service.findHints(); - - assertThat(hints).isEmpty(); - } - } - - @DisplayName("GetHasUserNoOrganisationsEinheitIdHint") - @Nested - class TestGetHasNoOrganisationsEinheitIdHint { - - @Test - void shouldCallHasOrganisationsEinheitId() { - doReturn(Collections.emptyList()).when(service).getOrganisationsEinheitIds(); - - service.getHasUserNoOrganisationsEinheitIdHint(); - - verify(service).getOrganisationsEinheitIds(); - } - - @Test - void shouldCallIsMissingMinimumRoles() { - doReturn(Collections.emptyList()).when(service).getOrganisationsEinheitIds(); - - service.getHasUserNoOrganisationsEinheitIdHint(); - - verify(service).hasOrganisationsEinheitIdRequiredRole(); - } - - @Test - void shouldReturnHintIfConditionMatch() { - doReturn(Collections.emptyList()).when(service).getOrganisationsEinheitIds(); - doReturn(true).when(service).hasOrganisationsEinheitIdRequiredRole(); - - var hint = service.getHasUserNoOrganisationsEinheitIdHint(); - - assertThat(hint).isPresent().get().extracting(Hint::getCode).isEqualTo(HintService.USER_NO_ORGANISATIONS_EINHEIT_ID_CODE); - } - - @Test - void shouldReturnEmptyIsConditionNotMatched() { - doReturn(List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID)).when(service).getOrganisationsEinheitIds(); - - var hint = service.getHasUserNoOrganisationsEinheitIdHint(); - - assertThat(hint).isNotPresent(); - } - - @DisplayName("Has OrganisationsEinheitId") - @Nested - class TestHasOrganisationsEinheitId { - - @BeforeEach - void mockUser() { - when(currentUserService.getUser()).thenReturn(UserProfileTestFactory.create()); - } - - @Test - void shouldGetUser() { - service.getOrganisationsEinheitIds(); - - verify(currentUserService).getUser(); - } - - @Test - void shouldReturnTrueIfIsNotEmpty() { - var hasOrganisationsEinheitId = service.getOrganisationsEinheitIds(); - - assertThat(hasOrganisationsEinheitId).isEqualTo(List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID)); - - } - - @Test - void shouldReturnFalseIfIsEmpty() { - when(currentUserService.getUser()).thenReturn(UserProfileTestFactory.createBuilder().clearOrganisationseinheitIds().build()); - - var hasOrganisationsEinheitId = service.getOrganisationsEinheitIds(); - - assertThat(hasOrganisationsEinheitId).isEmpty(); - } - } - - @DisplayName("Has organisationsEinheitId required role") - @Nested - class TestHasOrganisationsEinheitIdRelatedRole { - - @Test - void shouldCheckEinheitlicherAnsprechpartnerRole() { - service.hasOrganisationsEinheitIdRequiredRole(); - - verify(currentUserService).hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); - } - - @Test - void shouldCheckVerwaltungPoststelleRole() { - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - - service.hasOrganisationsEinheitIdRequiredRole(); - - verify(currentUserService).hasRole(UserRole.VERWALTUNG_POSTSTELLE); - } - - @Test - void shouldReturnFalseOnVerwaltungPoststelle() { - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - - var hasRequiredRole = service.hasOrganisationsEinheitIdRequiredRole(); - - assertThat(hasRequiredRole).isFalse(); - } - - @Test - void shouldReturnFalseOnEinheitlicherAnsprechpartner() { - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - - var hasRequiredRole = service.hasOrganisationsEinheitIdRequiredRole(); - - assertThat(hasRequiredRole).isFalse(); - } - - @Test - void shouldReturnFalseOnOtherRole() { - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - - var hasRequiredRole = service.hasOrganisationsEinheitIdRequiredRole(); - - assertThat(hasRequiredRole).isTrue(); - } - } - - @DisplayName("Has hints") - @Nested - class TestHasHints { - - @Test - void shouldCallFindHints() { - doReturn(Collections.emptyList()).when(service).findHints(); - - service.hasHints(); - - verify(service).findHints(); - } - - @Test - void shouldReturnFalseIfNoHintsFound() { - doReturn(List.of(HintTestFactory.create())).when(service).findHints(); - - var hasHints = service.hasHints(); - - assertThat(hasHints).isTrue(); - } - - @Test - void shouldReturnTrueIfHintsFound() { - doReturn(Collections.emptyList()).when(service).findHints(); - - var hasHints = service.hasHints(); - - assertThat(hasHints).isFalse(); - } - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintTestFactory.java deleted file mode 100644 index e90d1d75f9c290b7e415822bd16c8c6d802d0dcf..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/hint/HintTestFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.hint; - -public class HintTestFactory { - - public static String CODE = "random.test.code"; - - public static Hint create() { - return createBuilder().build(); - } - - public static Hint.HintBuilder createBuilder() { - return Hint.builder() - .code(CODE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/AktenzeichenChangeHistoryBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/AktenzeichenChangeHistoryBuilderTest.java deleted file mode 100644 index 31633e4f9addef894257611924b46f28cc0baa76..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/AktenzeichenChangeHistoryBuilderTest.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static de.ozgcloud.alfa.historie.AktenzeichenChangeHistoryBuilder.*; -import static de.ozgcloud.alfa.historie.ChangeHistoryBuilderTest.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; - -public class AktenzeichenChangeHistoryBuilderTest { - - private static final String ORGANISATIONSEINHEITEN_ID = UUID.randomUUID().toString(); - - private final Command previousCommand = commandFinishedAt(LocalDateTime.of(2023, 5, 1, 12, 0)); - private final Command command = commandFinishedAt(LocalDateTime.of(2023, 6, 1, 12, 0)); - private final List<Command> commands = List.of(previousCommand, command); - - @Spy - private AktenzeichenChangeHistoryBuilder builder = AktenzeichenChangeHistoryBuilder.builder() - .withCommands(commands) - .withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - - @Nested - class TestIsRelevant { - - @Test - void shouldReturnTrue() { - var command = CommandTestFactory.createBuilder() - .order(CommandOrder.SET_AKTENZEICHEN.name()) - .build(); - - var result = builder.isRelevant(command); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalse() { - var command = CommandTestFactory.createBuilder() - .order(CommandOrder.VORGANG_WIEDEREROEFFNEN.name()) - .build(); - - var result = builder.isRelevant(command); - - assertThat(result).isFalse(); - } - } - - @Nested - class TestToCommandWithChangeValues { - - private static final String EXPECTED_AKTENZEICHEN_BEFORE_CHANGE = LoremIpsum.getInstance().getWords(2); - private static final String EXPECTED_AKTENZEICHEN_AFTER_CHANGE = LoremIpsum.getInstance().getWords(2); - - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @BeforeEach - void init() { - when(builder.getAktenzeichenBeforeChange(commandWithPrevious)).thenReturn(EXPECTED_AKTENZEICHEN_BEFORE_CHANGE); - when(builder.getAktenzeichenAfterChange(commandWithPrevious)).thenReturn(EXPECTED_AKTENZEICHEN_AFTER_CHANGE); - } - - @Test - void shouldSetCommand() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.command()).isEqualTo(command); - } - - @Test - void shouldSetValueBeforeChange() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.valueBeforeChange()).isEqualTo(EXPECTED_AKTENZEICHEN_BEFORE_CHANGE); - } - - @Test - void shouldSetValueAfterChange() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.valueAfterChange()).isEqualTo(EXPECTED_AKTENZEICHEN_AFTER_CHANGE); - } - - private ChangeHistoryBuilder.CommandWithChangeValues callBuilder() { - return builder.toCommandWithChangeValues(commandWithPrevious); - } - } - - @Nested - class TestGetAktenzeichenBeforeChange { - - private final CommandWithPrevious commandWithoutPrevious = CommandWithPreviousTestFactory.createBuilder().command(previousCommand) - .previous(null).build(); - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @Test - void shouldReturnEmptyIfPreviousIsNull() { - var aktenzeichen = builder.getAktenzeichenBeforeChange(commandWithoutPrevious); - - assertThat(aktenzeichen).isEmpty(); - } - - @Test - void shouldGetAktenzeichenFromPreviousCommand() { - var expectedValue = LoremIpsum.getInstance().getWords(2); - when(builder.getAktenzeichen(previousCommand)).thenReturn(expectedValue); - - var aktenzeichen = builder.getAktenzeichenBeforeChange(commandWithPrevious); - - assertThat(aktenzeichen).isEqualTo(expectedValue); - } - } - - @Nested - class TestGetAktenzeichenAfterChange { - - private static final String EXPECTED_AKTENZEICHEN = LoremIpsum.getInstance().getWords(2); - - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @BeforeEach - void init() { - doReturn(EXPECTED_AKTENZEICHEN).when(builder).getAktenzeichen(command); - } - - @Test - void shouldGetAktenzeichenFromCommand() { - builder.getAktenzeichenAfterChange(commandWithPrevious); - - verify(builder).getAktenzeichen(command); - } - - @Test - void shouldReturnAktenzeichen() { - var result = builder.getAktenzeichenAfterChange(commandWithPrevious); - - assertThat(result).isEqualTo(EXPECTED_AKTENZEICHEN); - } - } - - @Nested - class TestGetAktenzeichen { - - private static final String AKTENZEICHEN = LoremIpsum.getInstance().getWords(1); - - @BeforeEach - void init() { - when(builder.getValueFromCommandBody(BODY_PROPERTY_AKTENZEICHEN, previousCommand)).thenReturn(AKTENZEICHEN); - } - - @Test - void shouldGetValueFromCommandBody() { - builder.getAktenzeichen(previousCommand); - - verify(builder).getValueFromCommandBody(BODY_PROPERTY_AKTENZEICHEN, previousCommand); - } - - @Test - void shouldReturnValueFromCommandBody() { - var value = builder.getAktenzeichen(previousCommand); - - assertThat(value).isEqualTo(AKTENZEICHEN); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/AssignedUserChangeHistoryBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/AssignedUserChangeHistoryBuilderTest.java deleted file mode 100644 index 6202fbd75b598382e5fd075607672f49c938285b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/AssignedUserChangeHistoryBuilderTest.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static de.ozgcloud.alfa.historie.AssignedUserChangeHistoryBuilder.*; -import static de.ozgcloud.alfa.historie.ChangeHistoryBuilderTest.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class AssignedUserChangeHistoryBuilderTest { - - private static final String ORGANISATIONSEINHEITEN_ID = UUID.randomUUID().toString(); - - private final Command previousCommand = commandFinishedAt(LocalDateTime.of(2023, 5, 1, 12, 0)); - private final Command command = commandFinishedAt(LocalDateTime.of(2023, 6, 1, 12, 0)); - private final List<Command> commands = List.of(previousCommand, command); - - @Mock - private UserProfileCache userProfileCache; - - @Spy - @InjectMocks - private AssignedUserChangeHistoryBuilder builder = AssignedUserChangeHistoryBuilder.builder() - .withCommands(commands) - .withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - - @Nested - class TestIsRelevant { - - @Test - void shouldReturnTrue() { - var command = CommandTestFactory.createBuilder() - .order(CommandOrder.ASSIGN_USER.name()) - .build(); - - var result = builder.isRelevant(command); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalse() { - var command = CommandTestFactory.createBuilder() - .order(CommandOrder.VORGANG_WIEDEREROEFFNEN.name()) - .build(); - - var result = builder.isRelevant(command); - - assertThat(result).isFalse(); - } - } - - @Nested - class TestToCommandWithChangeValues { - - private static final String ASSIGNED_USER_BEFORE_CHANGE = LoremIpsum.getInstance().getWords(2); - private static final String ASSIGNED_USER_AFTER_CHANGE = LoremIpsum.getInstance().getWords(2); - - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @BeforeEach - void init() { - doReturn(ASSIGNED_USER_BEFORE_CHANGE).when(builder).getAssignedUserBeforeChange(commandWithPrevious); - doReturn(ASSIGNED_USER_AFTER_CHANGE).when(builder).getAssignedUserAfterChange(commandWithPrevious); - } - - @Test - void shouldSetCommand() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.command()).isEqualTo(command); - } - - @Test - void shouldSetValueBeforeChange() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.valueBeforeChange()).isEqualTo(ASSIGNED_USER_BEFORE_CHANGE); - } - - @Test - void shouldSetValueAfterChange() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.valueAfterChange()).isEqualTo(ASSIGNED_USER_AFTER_CHANGE); - } - - private ChangeHistoryBuilder.CommandWithChangeValues callBuilder() { - return builder.toCommandWithChangeValues(commandWithPrevious); - } - } - - @Nested - class TestGetAssignedUserBeforeChange { - - private static final String EXPECTED_ASSIGNED_USER = LoremIpsum.getInstance().getWords(2); - - private final CommandWithPrevious commandWithoutPrevious = CommandWithPreviousTestFactory.createBuilder().command(previousCommand) - .previous(null).build(); - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @Test - void shouldReturnEmptyStringIfPreviousIsNull() { - var assignedUser = builder.getAssignedUserBeforeChange(commandWithoutPrevious); - - assertThat(assignedUser).isEmpty(); - } - - @Test - void shouldGetAssignedUserFromPreviousCommand() { - givenAssignedUserFromPreviousCommand(); - - callBuilder(); - - verify(builder).getAssignedUserFullNameFromCommand(previousCommand); - } - - @Test - void shouldReturnAssignedUserRetrievedFromPreviousCommand() { - givenAssignedUserFromPreviousCommand(); - - var assignedUser = callBuilder(); - - assertThat(assignedUser).isEqualTo(EXPECTED_ASSIGNED_USER); - } - - private void givenAssignedUserFromPreviousCommand() { - doReturn(EXPECTED_ASSIGNED_USER).when(builder).getAssignedUserFullNameFromCommand(previousCommand); - } - - private String callBuilder() { - return builder.getAssignedUserBeforeChange(commandWithPrevious); - } - } - - @Nested - class TestGetAssignedUserAfterChange { - - private static final String EXPECTED_ASSIGNED_USER = LoremIpsum.getInstance().getWords(2); - - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @Test - void shouldGetAssignedUserFromCommand() { - givenAssignedUserFromCurrentCommand(); - - callBuilder(); - - verify(builder).getAssignedUserFullNameFromCommand(command); - } - - @Test - void shouldReturnAssignedUserRetrievedFromCommand() { - givenAssignedUserFromCurrentCommand(); - - var assignedUser = callBuilder(); - - assertThat(assignedUser).isEqualTo(EXPECTED_ASSIGNED_USER); - } - - private void givenAssignedUserFromCurrentCommand() { - doReturn(EXPECTED_ASSIGNED_USER).when(builder).getAssignedUserFullNameFromCommand(command); - } - - private String callBuilder() { - return builder.getAssignedUserAfterChange(commandWithPrevious); - } - } - - @Nested - class TestGetAssignedUserFullNameFromCommand { - - private static final UserId USER_ID = UserId.from(UUID.randomUUID()); - private static final UserProfile USER_PROFILE = UserProfileTestFactory.create(); - private final Command command = previousCommand; - - @BeforeEach - void init() { - when(builder.getValueFromCommandBody(BODY_PROPERTY_ASSIGNED_USER, previousCommand)).thenReturn(USER_ID.toString()); - when(userProfileCache.getUserProfile(USER_ID)).thenReturn(USER_PROFILE); - } - - @Test - void shouldGetUserIdFromCommand() { - callBuilder(); - - verify(builder).getValueFromCommandBody(BODY_PROPERTY_ASSIGNED_USER, command); - } - - @Test - void shouldGetUserProfileForUserId() { - callBuilder(); - - verify(userProfileCache).getUserProfile(USER_ID); - } - - @Test - void shouldReturnUserFullName() { - var assignedUser = callBuilder(); - - assertThat(assignedUser).isEqualTo(UserProfileTestFactory.FULLNAME); - } - - private String callBuilder() { - return builder.getAssignedUserFullNameFromCommand(command); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/ChangeHistoryBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/ChangeHistoryBuilderTest.java deleted file mode 100644 index 41dbd9daa892b5f82555b700afdeed0c1f8071ce..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/ChangeHistoryBuilderTest.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.Mockito; -import org.mockito.Spy; -import org.testcontainers.shaded.org.apache.commons.lang3.NotImplementedException; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.historie.ChangeHistoryBuilder.CommandWithChangeValues; - -public class ChangeHistoryBuilderTest { - - private static final String ORGANISATIONSEINHEITEN_ID = UUID.randomUUID().toString(); - - private final Command previousCommand = commandFinishedAt(LocalDateTime.of(2023, 5, 1, 12, 0)); - private final Command command = commandFinishedAt(LocalDateTime.of(2023, 6, 1, 12, 0)); - private final List<Command> commands = List.of(previousCommand, command); - - @Spy - private TestChangeHistoryBuilder builder = new TestChangeHistoryBuilder() - .withCommands(commands) - .withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - - @Nested - class TestBuild { - - private final CommandWithChangeValues previousCommandWithChangeValues = new CommandWithChangeValues( - previousCommand, "a", "b"); - private final CommandWithChangeValues commandWithChangeValues = new CommandWithChangeValues( - command, "b", "c"); - private final List<CommandWithChangeValues> commandsWithChangeValues = List.of(previousCommandWithChangeValues, - commandWithChangeValues); - - @Test - void shouldCallInOrder() { - var orderVerifier = Mockito.inOrder(builder); - doReturn(commands.stream()).when(builder).retrieveRelevantCommands(); - doReturn(commandsWithChangeValues.stream()).when(builder).toCommandsWithChangeValues(notNull()); - - builder.build().toList(); - - orderVerifier.verify(builder).retrieveRelevantCommands(); - orderVerifier.verify(builder).inChronologicalOrder(notNull()); - orderVerifier.verify(builder).addPreviousCommand(notNull()); - orderVerifier.verify(builder).toCommandsWithChangeValues(notNull()); - orderVerifier.verify(builder).toVorgangChanges(notNull()); - } - } - - @Nested - class TestRetrieveRelevantCommands { - - @BeforeEach - void init() { - doReturn(false).when(builder).isRelevant(previousCommand); - doReturn(true).when(builder).isRelevant(command); - } - - @Test - void shouldCallIsRelevant() { - builder.retrieveRelevantCommands().toList(); - - verify(builder).isRelevant(previousCommand); - verify(builder).isRelevant(command); - } - - @Test - void shouldFilterOutIrrelevantCommands() { - var result = builder.retrieveRelevantCommands().toList(); - - assertThat(result).containsExactly(command); - } - } - - @Nested - class TestInChronologicalOrder { - - private final Stream<Command> unorderedCommands = Stream.of(command, previousCommand); - - @Test - void shouldSortAscendingByFinishedAt() { - var orderedCommands = builder.inChronologicalOrder(unorderedCommands); - - assertThat(orderedCommands).containsExactly(previousCommand, command); - } - } - - @Nested - class TestAddPreviousCommand { - - @Test - void shouldSetPreviousOfFirstCommandToNull() { - var commands = Stream.of(previousCommand); - - var commandsWithPrevious = builder.addPreviousCommand(commands); - - assertThat(commandsWithPrevious).first().extracting("previous").isNull(); - } - - @Test - void shouldSetPreviousOfSubsequentCommand() { - var commands = Stream.of(previousCommand, command); - - var commandsWithPrevious = builder.addPreviousCommand(commands); - - assertThat(commandsWithPrevious).element(1).extracting("previous").isEqualTo(previousCommand); - } - } - - @Nested - class TestToCommandsWithChangeValues { - - private final CommandWithPrevious commandWithoutPrevious = CommandWithPreviousTestFactory.createBuilder().command(previousCommand) - .previous(null).build(); - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - private final List<CommandWithPrevious> commandsWithPrevious = List.of(commandWithoutPrevious, commandWithPrevious); - - private final ChangeHistoryBuilder.CommandWithChangeValues previousCommandWithChangeValues = new ChangeHistoryBuilder.CommandWithChangeValues( - previousCommand, "a", "b"); - private final ChangeHistoryBuilder.CommandWithChangeValues commandWithChangeValues = new ChangeHistoryBuilder.CommandWithChangeValues( - command, "b", "c"); - - @BeforeEach - void init() { - doReturn(previousCommandWithChangeValues).when(builder).toCommandWithChangeValues(commandWithoutPrevious); - doReturn(commandWithChangeValues).when(builder).toCommandWithChangeValues(commandWithPrevious); - } - - @Test - void shouldMapToCommandWithChangeValues() { - callBuilder().toList(); - - verify(builder).toCommandWithChangeValues(commandWithoutPrevious); - verify(builder).toCommandWithChangeValues(commandWithPrevious); - } - - @Test - void shouldReturnMappedCommandWithChangeValues() { - var historieEntries = callBuilder().toList(); - - assertThat(historieEntries).containsExactly(previousCommandWithChangeValues, commandWithChangeValues); - } - - private Stream<CommandWithChangeValues> callBuilder() { - return builder.toCommandsWithChangeValues(commandsWithPrevious.stream()); - } - } - - @Nested - class TestToVorgangChange { - - private final ChangeHistoryBuilder.CommandWithChangeValues commandWithChangeValues = new ChangeHistoryBuilder.CommandWithChangeValues( - previousCommand, "a", "b"); - - @Test - void shouldSeValueBeforeChange() { - var vorgangChange = callBuilder(); - - assertThat(vorgangChange.getValueBeforeChange()).isNotBlank().isEqualTo(commandWithChangeValues.valueBeforeChange()); - } - - @Test - void shouldSeValueAfterChange() { - var vorgangChange = callBuilder(); - - assertThat(vorgangChange.getValueAfterChange()).isNotBlank().isEqualTo(commandWithChangeValues.valueAfterChange()); - } - - @Test - void shouldSetAuthorFullName() { - var vorgangChange = callBuilder(); - - assertThat(vorgangChange.getAuthorFullName()).isEqualTo(UserProfileTestFactory.FULLNAME); - } - - @Test - void shouldSetFinishedAt() { - var vorgangChange = callBuilder(); - - assertThat(vorgangChange.getFinishedAt()).isNotNull().isEqualTo(previousCommand.getFinishedAt()); - } - - @Test - void shouldSetOrder() { - var vorgangChange = callBuilder(); - - assertThat(vorgangChange.getOrder()).isNotNull().isEqualTo(previousCommand.getOrder()); - } - - @Test - void shouldSetOrganisationseinheitenID() { - var vorgangChange = callBuilder(); - - assertThat(vorgangChange.getOrganisationseinheitenID()).isEqualTo(ORGANISATIONSEINHEITEN_ID); - } - - private VorgangChange callBuilder() { - return builder.toVorgangChange(commandWithChangeValues); - } - } - - @Nested - class TestGetValueFromCommandBody { - - private static final String PROPERTY_NAME = LoremIpsum.getInstance().getWords(1); - - @ParameterizedTest - @NullAndEmptySource - void shouldReturnEmptyIfBodyIsNullOrEmpty(Map<String, ?> body) { - var command = previousCommand.toBuilder().body(body).build(); - - var value = builder.getValueFromCommandBody(PROPERTY_NAME, command); - - assertThat(value).isEmpty(); - } - - @Test - void shouldReturnEmptyIfPropertyIsNotPresentInBody() { - var command = previousCommand.toBuilder().body(Map.of("a", "b")).build(); - - var value = builder.getValueFromCommandBody(PROPERTY_NAME, command); - - assertThat(value).isEmpty(); - } - - @Test - void shouldReturnValueFromBody() { - var expectedValue = LoremIpsum.getInstance().getWords(2); - var command = previousCommand.toBuilder().body(Map.of(PROPERTY_NAME, expectedValue)).build(); - - var value = builder.getValueFromCommandBody(PROPERTY_NAME, command); - - assertThat(value).isEqualTo(expectedValue); - } - } - - static Command commandFinishedAt(LocalDateTime finishedAt) { - return CommandTestFactory.createBuilder() - .finishedAt(ZonedDateTime.of(finishedAt, ZoneId.of("UTC"))) - .build(); - } - - private static class TestChangeHistoryBuilder extends ChangeHistoryBuilder<TestChangeHistoryBuilder> { - - @Override - boolean isRelevant(Command command) { - throw new NotImplementedException(); - } - - @Override - CommandWithChangeValues toCommandWithChangeValues(CommandWithPrevious commandWithPrevious) { - throw new NotImplementedException(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/CommandWithPreviousTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/CommandWithPreviousTestFactory.java deleted file mode 100644 index 62e8bb35496025989832f015c25ebcb016a69395..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/CommandWithPreviousTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.historie.CommandWithPrevious.CommandWithPreviousBuilder; - -public class CommandWithPreviousTestFactory { - - public static final Command COMMAND = CommandTestFactory.create(); - public static final Command PREVIOUS_COMMAND = CommandTestFactory.create(); - - public static CommandWithPrevious create() { - return createBuilder().build(); - } - - public static CommandWithPreviousBuilder createBuilder() { - return new CommandWithPreviousBuilder() - .command(COMMAND) - .previous(PREVIOUS_COMMAND); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java deleted file mode 100644 index 1ef92ad05e6ac8dba3008de06a9ba844004f4c98..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.Map; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandStatus; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import de.ozgcloud.alfa.postfach.PostfachMail; -import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; - -class HistorieCommandHandlerTest { - - @Spy - @InjectMocks - private HistorieCommandHandler handler; - - @Mock - private VorgangAttachedItemService vorgangAttachedItemService; - - @Mock - private CommandService commandService; - - @DisplayName("Is historie command") - @Nested - class TestIsHistorieCommand { - - @Test - void shouldReturnTrueIfNoItemNameExists() { - var result = handler - .isHistorieCommand(Command.builder().order(CommandOrder.CREATE_ATTACHED_ITEM.name()).body(Collections.emptyMap()).build()); - - assertThat(result).isTrue(); - } - - @Test - void shouldCallIsLoeschAnforderungZuruecknehmenRevoked() { - var command = CommandTestFactory.create(); - - handler.isHistorieCommand(command); - - verify(handler).isLoeschAnforderungZuruecknehmenRevoked(command); - } - - @Test - void shouldReturnFalseOnLoeschAnforderungZuruecknehmenRevoked() { - doReturn(true).when(handler).isLoeschAnforderungZuruecknehmenRevoked(any()); - - var result = handler.isHistorieCommand(CommandTestFactory.create()); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnFalseOnDeleteVorgangAttachedItem() { - var result = handler.isHistorieCommand(CommandTestFactory.createBuilder().order(CommandOrder.DELETE_ATTACHED_ITEM.name()).build()); - - assertThat(result).isFalse(); - } - - @Test - void shouldCallIsDeleteVorgangAttachedItem() { - var command = CommandTestFactory.create(); - - handler.isHistorieCommand(command); - - verify(handler).isDeleteVorgangAttachedItem(command); - } - } - - @DisplayName("postfach nachricht verification") - @Nested - class TestIsOutgoingPostfachNachrichtenByOzgCloudNachrichtenManager { - - private final Command matchingCommand = CommandTestFactory.createBuilder() - .order(CommandOrder.CREATE_ATTACHED_ITEM.name()) - .body(Map.of("item", Map.of(HistorieCommandHandler.DIRECTION, HistorieCommandHandler.DIRECTION_OUTGOING), - HistorieCommandHandler.CLIENT, HistorieCommandHandler.OZGCLOUD_NACHRICHTEN_MANAGER)) - .build(); - - @DisplayName("should return true if the command is CREATED_ATTACHED_ITEM order outgoing by mailserice") - @Test - void shouldReturnTrue() { - var result = handler.isOutgoingPostfachNachrichtByOzgCloudNachrichtenManager(matchingCommand); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalseOnIncoming() { - var nonMatchingCommand = matchingCommand.toBuilder() - .body(Map.of("item", Map.of(HistorieCommandHandler.DIRECTION, HistorieCommandHandler.DIRECTION_INCOMMING), - HistorieCommandHandler.CLIENT, HistorieCommandHandler.OZGCLOUD_NACHRICHTEN_MANAGER)) - .build(); - - var result = handler.isOutgoingPostfachNachrichtByOzgCloudNachrichtenManager(nonMatchingCommand); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnFalseOnOtherClient() { - var nonMatchingCommand = matchingCommand.toBuilder() - .body(Map.of("item", Map.of(HistorieCommandHandler.DIRECTION, HistorieCommandHandler.DIRECTION_OUTGOING), - HistorieCommandHandler.CLIENT, "Alfa")) - .build(); - - var result = handler.isOutgoingPostfachNachrichtByOzgCloudNachrichtenManager(nonMatchingCommand); - - assertThat(result).isFalse(); - } - } - - @Nested - class TestIsLoscheAnforderungVorgangAttachedItem { - - @Test - void shouldReturnFalse() { - when(vorgangAttachedItemService.isLoeschAnforderung(VorgangAttachedItemTestFactory.ITEM_NAME)).thenReturn(false); - - var result = handler.isCreateLoeschAnforderungVorgangAttachedItem(Command.builder().order(CommandOrder.CREATE_ATTACHED_ITEM.name()) - .body(Map.of( - VorgangAttachedItem.FIELD_ITEM_NAME, - VorgangAttachedItemTestFactory.ITEM_NAME)) - .build()); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnTrue() { - when(vorgangAttachedItemService.isLoeschAnforderung(VorgangAttachedItemTestFactory.ITEM_NAME)).thenReturn(true); - - var result = handler.isCreateLoeschAnforderungVorgangAttachedItem(Command.builder().order(CommandOrder.CREATE_ATTACHED_ITEM.name()) - .body(Map.of( - VorgangAttachedItem.FIELD_ITEM_NAME, - VorgangAttachedItemTestFactory.ITEM_NAME)) - .build()); - - assertThat(result).isTrue(); - } - } - - @DisplayName("Is loesch anforderung zuruecknehmen revoked") - @Nested - class TestIsLoeschAnforderungZuruecknehmenRevoked { - - @DisplayName("on matchin order") - @Nested - class TestOnMatchingOrder { - - private final Command loeschAnforderungZuruecknehmen = CommandTestFactory.createBuilder() - .order(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()) - .body(Map.of(DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD, CommandTestFactory.ID)) - .build(); - - @Test - void shouldCallCommandService() { - when(commandService.getById(anyString())).thenReturn(CommandTestFactory.create()); - - handler.isLoeschAnforderungZuruecknehmenRevoked(loeschAnforderungZuruecknehmen); - - verify(commandService).getById(CommandTestFactory.ID); - } - - @Test - void shouldReturnTrueOnRevokedStatus() { - var revokedCommand = loeschAnforderungZuruecknehmen.toBuilder().status(CommandStatus.REVOKED).build(); - when(commandService.getById(anyString())).thenReturn(revokedCommand); - - var isRevoked = handler.isLoeschAnforderungZuruecknehmenRevoked(loeschAnforderungZuruecknehmen); - - assertThat(isRevoked).isTrue(); - } - - @Test - void shouldReturnFalseOnOtherStatus() { - var revokedCommand = loeschAnforderungZuruecknehmen.toBuilder().status(CommandStatus.FINISHED).build(); - when(commandService.getById(anyString())).thenReturn(revokedCommand); - - var isRevoked = handler.isLoeschAnforderungZuruecknehmenRevoked(loeschAnforderungZuruecknehmen); - - assertThat(isRevoked).isFalse(); - } - } - - @Test - void shouldReturnFalseOnNonMatchingOrder() { - var isRevoked = handler.isLoeschAnforderungZuruecknehmenRevoked(CommandTestFactory.create()); - - assertThat(isRevoked).isFalse(); - } - } - - @DisplayName("translate order") - @Nested - class TestTranslateOrders { - - @ParameterizedTest - @CsvSource(value = { "CREATE_KOMMENTAR;Kommentar", "CREATE_WIEDERVORLAGE;Wiedervorlage" }, delimiter = ';') - void shouldTranslateToCreateOrder(String target, String itemName) { - var command = handler.translateOrder(createCommand(itemName, CommandOrder.CREATE_ATTACHED_ITEM)); - - assertThat(command.getOrder()).isEqualTo(target); - } - - @ParameterizedTest - @CsvSource(value = { "EDIT_KOMMENTAR;Kommentar", "EDIT_WIEDERVORLAGE;Wiedervorlage" }, delimiter = ';') - void shouldTranslateToEditOrder(String target, String itemName) { - var command = handler.translateOrder(createCommand(itemName, CommandOrder.UPDATE_ATTACHED_ITEM)); - - assertThat(command.getOrder()).isEqualTo(target); - } - - @ParameterizedTest - @CsvSource(value = { "WIEDERVORLAGE_ERLEDIGEN;true", "WIEDERVORLAGE_WIEDEREROEFFNEN;false" }, delimiter = ';') - void shouldTranslateToWiedervolageErledigenOrWiedervolageWiedereroeffnen(String target, String doneValue) { - var command = handler.translateOrder( - createCommand(Wiedervorlage.class.getSimpleName(), CommandOrder.PATCH_ATTACHED_ITEM, Boolean.valueOf(doneValue))); - - assertThat(command.getOrder()).isEqualTo(target); - } - - @ParameterizedTest - @CsvSource(value = { "RECEIVE_POSTFACH_NACHRICHT;IN" }, delimiter = ';') - void shouldTranslateToReveivedIncomminNachricht(String target, String direction) { - var command = handler.translateOrder( - createCommand("OzgCloud_NachrichtenManager", CommandOrder.CREATE_ATTACHED_ITEM, direction)); - - assertThat(command.getOrder()).isEqualTo(target); - } - - @Test - void shouldHandleMissingDone() { - var command = handler.translateOrder(createCommand(Wiedervorlage.class.getSimpleName(), CommandOrder.PATCH_ATTACHED_ITEM)); - - assertThat(command.getCommandOrder()).isEqualTo(CommandOrder.PATCH_ATTACHED_ITEM); - } - - @Test - void shouldHandleUnkownOrder() { - var command = handler - .translateOrder(createCommand(Wiedervorlage.class.getSimpleName(), CommandOrder.VORGANG_ABSCHLIESSEN)); - - assertThat(command.getCommandOrder()).isEqualTo(CommandOrder.VORGANG_ABSCHLIESSEN); - } - - @Test - void shouldHandleMissingItemName() { - var command = CommandTestFactory.createBuilder().order(LegacyOrder.EDIT_KOMMENTAR).body(Map.of("item", Map.of("value", "test"))) - .build(); - - var translatedCommand = handler.translateOrder(command); - - assertThat(translatedCommand.getOrder()).isEqualTo(LegacyOrder.EDIT_KOMMENTAR); - } - - private Command createCommand(String itemName, CommandOrder order) { - return CommandTestFactory.createBuilder().order(order.name()) - .body(Map.of(VorgangAttachedItem.FIELD_ITEM_NAME, itemName, "item", Map.of("value", "test"))).build(); - } - - private Command createCommand(String itemName, CommandOrder order, boolean done) { - return CommandTestFactory.createBuilder().order(order.name()) - .body(Map.of(VorgangAttachedItem.FIELD_ITEM_NAME, itemName, "item", Map.of("done", done))) - .build(); - } - - private Command createCommand(String client, CommandOrder order, String direction) { - return CommandTestFactory.createBuilder().order(order.name()) - .body(Map.of(HistorieCommandHandler.CLIENT, client, VorgangAttachedItem.FIELD_ITEM_NAME, PostfachMail.class.getSimpleName(), - "item", - Map.of(HistorieCommandHandler.DIRECTION, direction))) - .build(); - } - - } - - @DisplayName("SEND_POSTFACH_MAIL") - @Nested - class TestSendPostfachMail { - - private Command command = CommandTestFactory.createBuilder().order(CommandOrder.SEND_POSTFACH_MAIL.name()).build(); - - @Test - void shouldHandleUnkownOrder() { - var translatedCommand = handler.translateOrder(command); - - assertThat(translatedCommand.getCommandOrder()).isEqualTo(CommandOrder.SEND_POSTFACH_NACHRICHT); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieControllerITCase.java deleted file mode 100644 index bfaafa8299319bfb36d60e0438031034204f2f26..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieControllerITCase.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -@WithMockUser -@AutoConfigureMockMvc -@SpringBootTest -class HistorieControllerITCase { - private final String PATH = HistorieController.PATH + "?vorgangId="; - - @MockBean - private CommandService service; - @MockBean - private VorgangAttachedItemService vorgangAttachedItemService; - - @Autowired - private MockMvc mockMvc; - - @DisplayName("Get all") - @WithMockUser - @Nested - class TestGetAll { - - @BeforeEach - void init() { - when(vorgangAttachedItemService.findLoeschAnforderung(any())).thenReturn(Stream.empty()); - when(service.findFinishedCommands(any())).thenReturn(createCommandStream()); - } - - private Stream<Command> createCommandStream() { - return List.of(CommandTestFactory.create()).stream(); - } - - @Test - void shouldReturnStatusOk() throws Exception { - mockMvc.perform(get(PATH + VorgangHeaderTestFactory.ID)).andExpect(status().isOk()); - } - - @Test - void shouldContainCommands() throws Exception { - var response = mockMvc.perform(get(PATH + VorgangHeaderTestFactory.ID)).andExpect(status().isOk()); - - response.andExpect(jsonPath("$._embedded.commandList[0].order").value(CommandTestFactory.ORDER)) - .andExpect(jsonPath("$._embedded.commandList[0]").isNotEmpty()); - - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieControllerTest.java deleted file mode 100644 index 14e39857f258c7116e8ea1fa130531c9560d8110..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieControllerTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class HistorieControllerTest { - private final String PATH = HistorieController.PATH + "?vorgangId="; - - @Nested - class TestGetHistorieList { - @Spy - @InjectMocks - private HistorieController controller; - - @Mock - private HistorieService service; - - @Mock - private HistorieModelAssembler modelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - when(service.findFinishedCommands(any())).thenReturn(createCommandStream()); - } - - private Stream<Command> createCommandStream() { - return List.of(CommandTestFactory.create()).stream(); - } - - @Test - void shouldCallService() throws Exception { - mockMvc.perform(get(PATH + VorgangHeaderTestFactory.ID)).andExpect(status().isOk()); - - verify(service).findFinishedCommands(any()); - } - - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java deleted file mode 100644 index e420daa620ba091986b8a5e62fffb0fc93e4a57d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -class HistorieModelAssemblerTest { - - private static final String CREATED_BY = "createdBy"; - - @InjectMocks - private HistorieModelAssembler modelAssembler; - @Mock - private UserManagerUrlProvider userManagerUrlProvider; - - private final String COMMAND_SINGLE_PATH = "/api/histories/" + CommandTestFactory.ID; - - private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @Test - void shouldHaveSelfLink() { - initUserProfileUrlProvider(urlProvider); - - var model = modelAssembler.toModel(CommandTestFactory.create()); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref).isEqualTo(COMMAND_SINGLE_PATH); - } - - @DisplayName("AssignedTo Link") - @Nested - class TestAssignedToLink { - - private final String userProfileTemplateDummy = "UserProfileTemplateDummy/%s"; - - @Nested - class TesOnConfiguredUserManager { - - @Test - void shouldBePresentOnExistingValue() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(true); - when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(userProfileTemplateDummy); - - var model = modelAssembler.toModel(CommandTestFactory.createBuilder() - .body(Map.of(HistorieModelAssembler.ASSIGNED_TO_BODY_FIELD, UserProfileTestFactory.ID)).build()); - - assertThat(model.getLink(HistorieModelAssembler.REL_ASSIGNED_TO)).isPresent().get().extracting(Link::getHref) - .isEqualTo("UserProfileTemplateDummy/" + UserProfileTestFactory.ID); - } - - @Test - void shouldNotBePresentOnMissingValue() { - var model = modelAssembler.toModel(CommandTestFactory.create()); - - assertThat(model.getLink(HistorieModelAssembler.REL_ASSIGNED_TO)).isNotPresent(); - } - } - - @Nested - class TestOnNotConfiguredUserManager { - - @Test - void shouldBePresentOnExistingValue() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(false); - - var model = modelAssembler.toModel(CommandTestFactory.createBuilder() - .body(Map.of(HistorieModelAssembler.ASSIGNED_TO_BODY_FIELD, UserProfileTestFactory.ID)).build()); - - assertThat(model.getLink(HistorieModelAssembler.REL_ASSIGNED_TO)).isNotPresent(); - } - - @Test - void shouldNotGetTemplateFromUserManagerUrlProvider() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(false); - - modelAssembler.toModel(CommandTestFactory.createBuilder() - .body(Map.of(HistorieModelAssembler.ASSIGNED_TO_BODY_FIELD, UserProfileTestFactory.ID)).build()); - - verify(userManagerUrlProvider, never()).getUserProfileTemplate(); - } - } - } - - @DisplayName("createdBy Link") - @Nested - class TestCreatedByLink { - @Test - void shouldExistingAtUser() { - initUserProfileUrlProvider(urlProvider); - - var model = modelAssembler.toModel(CommandTestFactory.create()); - - assertThat(model.getLink(CREATED_BY)).isPresent().get().extracting(Link::getHref) - .isEqualTo(ROOT_URL + USER_PROFILES_API_PATH + UserProfileTestFactory.ID); - } - - @Test - void shouldNotExistingAtSystemNotificationMAnager() { - var model = modelAssembler - .toModel(CommandTestFactory.createBuilder().createdBy(UserId.from(HistorieModelAssembler.SYSTEM_NOTIFICATION_MANAGER_PREFIX)) - .build()); - - assertThat(model.getLink(CREATED_BY)).isNotPresent(); - } - - @Test - void shouldNotBePresentOnNullValue() { - var model = modelAssembler.toModel(CommandTestFactory.createBuilder().createdBy(null).build()); - - assertThat(model.getLink(CREATED_BY)).isNotPresent(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieServiceTest.java deleted file mode 100644 index 6d6a75467c7bc45f9aaf65191a5e0dc9ceacce05..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieServiceTest.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class HistorieServiceTest { - - @Spy - @InjectMocks - private HistorieService service; - @Mock - private CommandService commandService; - @Mock - private HistorieCommandHandler historieCommandHandler; - @Spy - private List<HistorieProcessor> processors = new ArrayList<>(); - @Mock - private HistorieProcessor processor; - - @DisplayName("Find finished commands") - @Nested - class TestFindFinishedCommands { - - @BeforeEach - void mockProcessor() { - processors.add(processor); - } - - @DisplayName("process flow") - @Nested - class TestProcessFlow { - - private Command responseCommand = CommandTestFactory.create(); - - @Captor - private ArgumentCaptor<List<Command>> commandCaptor; - - @BeforeEach - void initMock() { - when(commandService.findFinishedCommands(any())).thenReturn(List.of(responseCommand).stream()); - when(historieCommandHandler.isHistorieCommand(any())).thenReturn(true); - when(historieCommandHandler.translateOrder(any())).thenAnswer(i -> i.getArgument(0)); - - } - - @Test - void shouldCallService() { - service.findFinishedCommands(CommandTestFactory.VORGANG_ID).toList(); - - verify(commandService).findFinishedCommands(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldFilterInvalidCommands() { - service.findFinishedCommands(CommandTestFactory.VORGANG_ID).toList(); - - verify(historieCommandHandler).isHistorieCommand(responseCommand); - } - - @Test - void shouldTranslateCommandOrderByCommandHandler() { - service.findFinishedCommands(CommandTestFactory.VORGANG_ID).toList(); - - verify(historieCommandHandler).translateOrder(responseCommand); - } - - @Test - void shouldProcessCommands() { - service.findFinishedCommands(CommandTestFactory.VORGANG_ID).toList(); - - verify(processor).process(commandCaptor.capture()); - assertThat(commandCaptor.getValue()).containsExactly(responseCommand); - } - - @Test - void shouldReturnProcessedCommands() { - var processedCommands = Collections.singletonList(CommandTestFactory.create()); - when(processor.process(any())).thenReturn(processedCommands); - - var commands = service.findFinishedCommands(CommandTestFactory.VORGANG_ID).toList(); - - assertThat(commands).isEqualTo(processedCommands); - } - } - - @DisplayName("Filter deleteLoeschAnforderung body commands") - @Nested - class TestFilterDeleteLoeschAnforderungBodyCommands { - - private final String deleteAttachedItemCommandId = UUID.randomUUID().toString(); - private final String changeStatusCommandId = UUID.randomUUID().toString(); - private final Map<String, Object> bodyMap = Map.of(DeleteLoeschAnforderung.DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD, - deleteAttachedItemCommandId, - DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD, changeStatusCommandId); - private final Command deleteLoeschAnforderungCommand = CommandTestFactory.createBuilder() - .order(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()) - .body(bodyMap).build(); - private final Command deleteAttachedItemCommand = CommandTestFactory.createBuilder().id(deleteAttachedItemCommandId).build(); - private final Command changeStatusCommandICommand = CommandTestFactory.createBuilder().id(changeStatusCommandId).build(); - - private final List<Command> finishedCommands = List.of(deleteLoeschAnforderungCommand, deleteAttachedItemCommand, - changeStatusCommandICommand); - - @BeforeEach - void mock() { - when(historieCommandHandler.isHistorieCommand(any())).thenReturn(true); - when(commandService.findFinishedCommands(any())).thenReturn(finishedCommands.stream()); - when(historieCommandHandler.translateOrder(any())).thenAnswer(i -> i.getArgument(0)); - when(processor.process(any())).thenAnswer(i -> i.getArgument(0)); - } - - @Test - void shouldFilterCommandsRelatedInBody() { - var commands = service.findFinishedCommands(CommandTestFactory.VORGANG_ID).toList(); - - assertThat(commands).hasSize(1).containsExactly(deleteLoeschAnforderungCommand); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/StatusChangeHistoryBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/StatusChangeHistoryBuilderTest.java deleted file mode 100644 index 47d1e4ce6c028625f030413b7f1565f9459aba45..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/StatusChangeHistoryBuilderTest.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static de.ozgcloud.alfa.historie.ChangeHistoryBuilderTest.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -public class StatusChangeHistoryBuilderTest { - - private static final String ORGANISATIONSEINHEITEN_ID = UUID.randomUUID().toString(); - - private final Command previousCommand = commandFinishedAt(LocalDateTime.of(2023, 5, 1, 12, 0)); - private final Command command = commandFinishedAt(LocalDateTime.of(2023, 6, 1, 12, 0)); - private final List<Command> commands = List.of(previousCommand, command); - - @Spy - private StatusChangeHistoryBuilder builder = StatusChangeHistoryBuilder.builder() - .withCommands(commands) - .withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - - @Nested - class TestIsRelevant { - - @EnumSource(mode = Mode.INCLUDE, names = { "VORGANG_ANNEHMEN", "VORGANG_VERWERFEN", "VORGANG_ZURUECKHOLEN", "VORGANG_BEARBEITEN", - "VORGANG_BESCHEIDEN", "VORGANG_ABSCHLIESSEN", "VORGANG_ZUM_LOESCHEN_MARKIEREN", "VORGANG_LOESCHEN", "VORGANG_ZURUECKSTELLEN", - "VORGANG_WIEDEREROEFFNEN" }) - @ParameterizedTest - void shouldReturnTrue(CommandOrder order) { - var isStatusChangeCommand = builder.isRelevant(CommandTestFactory.createBuilder().order(order.name()).build()); - - assertThat(isStatusChangeCommand).isTrue(); - } - - @EnumSource(mode = Mode.EXCLUDE, names = { "VORGANG_ANNEHMEN", "VORGANG_VERWERFEN", "VORGANG_ZURUECKHOLEN", "VORGANG_BEARBEITEN", - "VORGANG_BESCHEIDEN", "VORGANG_ABSCHLIESSEN", "VORGANG_ZUM_LOESCHEN_MARKIEREN", "VORGANG_LOESCHEN", "VORGANG_ZURUECKSTELLEN", - "VORGANG_WIEDEREROEFFNEN" }) - @ParameterizedTest - void shouldReturnFalse(CommandOrder order) { - var isStatusChangeCommand = builder.isRelevant(CommandTestFactory.createBuilder().order(order.name()).build()); - - assertThat(isStatusChangeCommand).isFalse(); - } - } - - @Nested - class TestToCommandWithChangeValues { - - private static final String EXPECTED_STATUS_BEFORE_CHANGE = LoremIpsum.getInstance().getWords(2); - private static final String EXPECTED_STATUS_AFTER_CHANGE = LoremIpsum.getInstance().getWords(2); - - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @BeforeEach - void init() { - doReturn(EXPECTED_STATUS_BEFORE_CHANGE).when(builder).getStatusBeforeChange(commandWithPrevious); - doReturn(EXPECTED_STATUS_AFTER_CHANGE).when(builder).getStatusAfterChange(commandWithPrevious); - } - - @Test - void shouldSetCommand() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.command()).isEqualTo(command); - } - - @Test - void shouldSetValueBeforeChange() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.valueBeforeChange()).isEqualTo(EXPECTED_STATUS_BEFORE_CHANGE); - } - - @Test - void shouldSetValueAfterChange() { - var commandWithChangeValues = callBuilder(); - - assertThat(commandWithChangeValues.valueAfterChange()).isEqualTo(EXPECTED_STATUS_AFTER_CHANGE); - } - - private ChangeHistoryBuilder.CommandWithChangeValues callBuilder() { - return builder.toCommandWithChangeValues(commandWithPrevious); - } - } - - @Nested - class TestGetStatusBeforeChange { - - private final CommandWithPrevious commandWithoutPrevious = CommandWithPreviousTestFactory.createBuilder().command(previousCommand) - .previous(null).build(); - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @Test - void shouldReturnStatusBeforeChange() { - var status = "Status"; - doReturn(status).when(builder).getStatus(previousCommand); - - var statusBeforeChange = builder.getStatusBeforeChange(commandWithPrevious); - - assertThat(statusBeforeChange).isEqualTo(status); - } - - @Test - void shouldReturnDefaultValue() { - var status = builder.getStatusBeforeChange(commandWithoutPrevious); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU)); - } - } - - @Nested - class TestGetStatusAfterChange { - - private final CommandWithPrevious commandWithPrevious = CommandWithPreviousTestFactory.createBuilder().command(command) - .previous(previousCommand).build(); - - @Test - void shouldReturnStatusAfterChange() { - var status = "Status"; - doReturn(status).when(builder).getStatus(command); - - var statusAfterChange = builder.getStatusAfterChange(commandWithPrevious); - - assertThat(statusAfterChange).isEqualTo(status); - } - } - - @Nested - class TestGetStatus { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "VORGANG_ANNEHMEN", "VORGANG_ZURUECKSTELLEN" }) - void shouldReturnAngenommen(CommandOrder order) { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(order.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ANGENOMMEN)); - } - - @Test - void shouldReturnVerworfen() { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_VERWERFEN.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN)); - } - - @Test - void shouldReturnNeu() { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_ZURUECKHOLEN.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU)); - } - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "VORGANG_BEARBEITEN", "VORGANG_WIEDEREROEFFNEN" }) - void shouldReturnInBearbeitung(CommandOrder order) { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(order.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.IN_BEARBEITUNG)); - } - - @Test - void shouldReturnBeschieden() { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_BESCHEIDEN.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.BESCHIEDEN)); - } - - @Test - void shouldReturnAbschliessen() { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_ABSCHLIESSEN.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ABGESCHLOSSEN)); - } - - @Test - void shouldReturnZuLoeschen() { - var status = builder - .getStatus(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ZU_LOESCHEN)); - } - - @Test - void shouldReturnGeloescht() { - var status = builder.getStatus(CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_LOESCHEN.name()).build()); - - assertThat(status).isEqualTo(StatusChangeHistoryBuilder.GELOESCHT_NAME); - } - - @Test - void shouldtThrowIllegalArgumentException() { - assertThatThrownBy(() -> builder.getStatus(CommandTestFactory.createBuilder().order(CommandOrder.ASSIGN_USER.name()).build())) - .isInstanceOf( - IllegalArgumentException.class); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/UserProfileCacheTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/UserProfileCacheTest.java deleted file mode 100644 index 952a5c38b3399e264811612c5bd998cb638ed9e3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/UserProfileCacheTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; - -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; - -public class UserProfileCacheTest { - - private static final UserId USER_ID = UserProfileTestFactory.ID; - private static final UserProfile EXPECTED_USER_PROFILE = UserProfileTestFactory.create(); - - @Mock - private Function<UserId, UserProfile> findUserProfileForUserId; - @InjectMocks - private UserProfileCache cache; - - @Test - void shouldSearchForUserProfileThatWasNotCached() { - givenFindUserProfileForUserIdReturnsUserProfile(); - - cache.getUserProfile(USER_ID); - - verify(findUserProfileForUserId).apply(USER_ID); - } - - @Test - void shouldReturnFoundUserProfile() { - givenFindUserProfileForUserIdReturnsUserProfile(); - - var userProfile = cache.getUserProfile(USER_ID); - - assertThat(userProfile).isEqualTo(EXPECTED_USER_PROFILE); - } - - @Test - void shouldAddFoundUserProfileToCache() { - givenFindUserProfileForUserIdReturnsUserProfile(); - - cache.getUserProfile(USER_ID); - - assertThat(getUserProfileFromCache()).isEqualTo(EXPECTED_USER_PROFILE); - } - - @Test - void shouldNotSearchForCachedUserProfile() { - givenUserProfileIsInCache(); - - cache.getUserProfile(USER_ID); - - verifyNoInteractions(findUserProfileForUserId); - } - - @Test - void shouldReturnUserProfileFromCache() { - givenUserProfileIsInCache(); - - var userProfile = cache.getUserProfile(USER_ID); - - assertThat(userProfile).isEqualTo(EXPECTED_USER_PROFILE); - } - - @Test - void shouldThrowExceptionIfUserProfileCannotBeFound() { - when(findUserProfileForUserId.apply(USER_ID)).thenReturn(null); - - assertThatExceptionOfType(TechnicalException.class).isThrownBy(() -> cache.getUserProfile(USER_ID)) - .withMessageStartingWith("UserProfile not found for user with ID " + USER_ID); - } - - private void givenFindUserProfileForUserIdReturnsUserProfile() { - when(findUserProfileForUserId.apply(USER_ID)).thenReturn(EXPECTED_USER_PROFILE); - } - - private void givenUserProfileIsInCache() { - var cache = new HashMap<UserId, UserProfile>(); - cache.put(USER_ID, EXPECTED_USER_PROFILE); - ReflectionTestUtils.setField(this.cache, "cache", cache); - } - - @SuppressWarnings("unchecked") - private UserProfile getUserProfileFromCache() { - return ((Map<String, UserProfile>) Objects.requireNonNull(ReflectionTestUtils.getField(cache, "cache"))).get(USER_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryServiceITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryServiceITCase.java deleted file mode 100644 index 0ed0d098c97d50bba9161e78407f603bb3d9fe82..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryServiceITCase.java +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class VorgangChangeHistoryServiceITCase { - - private static final UserId USER_1_ID = UserId.from("user-1"); - private static final String USER_1_FIRST_NAME = LoremIpsum.getInstance().getFirstName(); - private static final String USER_1_LAST_NAME = LoremIpsum.getInstance().getLastName(); - private static final String USER_1_FULL_NAME = String.format("%s %s", USER_1_FIRST_NAME, USER_1_LAST_NAME); - - private static final UserId USER_2_ID = UserId.from("user-2"); - private static final String USER_2_FIRST_NAME = LoremIpsum.getInstance().getFirstName(); - private static final String USER_2_LAST_NAME = LoremIpsum.getInstance().getLastName(); - private static final String USER_2_FULL_NAME = String.format("%s %s", USER_2_FIRST_NAME, USER_2_LAST_NAME); - - private static final String AKTENZEICHEN_1 = "ABC-1"; - private static final String AKTENZEICHEN_2 = "ABC-2"; - - private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - - @Mock - private CommandService commandService; - @Mock - private UserService userService; - - @InjectMocks - private VorgangChangeHistoryService service; - - @Test - void shouldReturnEmptyHistory() { - givenHistorieServiceReturnsCommands(List.of()); - - var history = service.createVorgangChangeHistory(vorgangWithEingang); - - assertThat(history.getStatusChangeHistory()).isEmpty(); - assertThat(history.getAktenzeichenChangeHistory()).isEmpty(); - assertThat(history.getAssignedUserChangeHistory()).isEmpty(); - } - - @Test - void shouldReturnNonEmptyHistories() { - givenHistorieServiceReturnsCommands(createMixedCommands()); - givenUserServiceReturnsUser1Profile(); - - var history = service.createVorgangChangeHistory(vorgangWithEingang); - - assertThat(history.getStatusChangeHistory()).hasSize(1); - assertThat(history.getAktenzeichenChangeHistory()).hasSize(1); - assertThat(history.getAssignedUserChangeHistory()).hasSize(1); - } - - @Test - void shouldSetCreatedByName() { - givenHistorieServiceReturnsCommands(List.of(new CommandFactory().statusChange(CommandOrder.VORGANG_ANNEHMEN))); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getStatusChangeHistory(); - - assertThat(history.get(0).getAuthorFullName()).isEqualTo(USER_1_FULL_NAME); - } - - @Test - void shouldSetFinishedAt() { - var command = new CommandFactory().statusChange(CommandOrder.VORGANG_ANNEHMEN); - givenHistorieServiceReturnsCommands(List.of(command)); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getStatusChangeHistory(); - - assertThat(history.get(0).getFinishedAt()).isNotNull().isEqualTo(command.getFinishedAt()); - } - - @Nested - class TestStatusChangeHistory { - @Test - void shouldSetBeforeAndAfterValues_untilAbgeschlossen() { - givenHistorieServiceReturnsCommands(createStatusChangeCommandsUntilAbgeschlossen()); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getStatusChangeHistory(); - - assertThat(history).hasSize(6); - checkBeforeAndAfterValues(history.get(0), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ANGENOMMEN)); - checkBeforeAndAfterValues(history.get(1), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ANGENOMMEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.IN_BEARBEITUNG)); - checkBeforeAndAfterValues(history.get(2), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.IN_BEARBEITUNG), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.BESCHIEDEN)); - checkBeforeAndAfterValues(history.get(3), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.BESCHIEDEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ABGESCHLOSSEN)); - checkBeforeAndAfterValues(history.get(4), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ABGESCHLOSSEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ZU_LOESCHEN)); - checkBeforeAndAfterValues(history.get(5), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ZU_LOESCHEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ABGESCHLOSSEN)); - } - - @Test - void shouldSetBeforeAndAfterValues_untilVerworfen() { - givenHistorieServiceReturnsCommands(createStatusChangeCommandsUntilVerworfen()); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getStatusChangeHistory(); - - assertThat(history).hasSize(3); - checkBeforeAndAfterValues(history.get(0), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN)); - checkBeforeAndAfterValues(history.get(1), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ZU_LOESCHEN)); - checkBeforeAndAfterValues(history.get(2), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.ZU_LOESCHEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN)); - } - - @Test - void shouldSetBeforeAndAfterValues_untilZurueckholen() { - givenHistorieServiceReturnsCommands(createStatusChangeCommandsUntilZurueckholen()); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getStatusChangeHistory(); - - assertThat(history).hasSize(2); - checkBeforeAndAfterValues(history.get(0), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN)); - checkBeforeAndAfterValues(history.get(1), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.VERWORFEN), - StatusChangeHistoryBuilder.VORGANG_STATUS_TO_NAME.get(VorgangStatus.NEU)); - } - - @Test - void shouldSetOrder() { - var command = new CommandFactory().statusChange(CommandOrder.VORGANG_ANNEHMEN); - givenHistorieServiceReturnsCommands(List.of(command)); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getStatusChangeHistory(); - - assertThat(history.get(0).getOrder()).isNotNull().isEqualTo(CommandOrder.VORGANG_ANNEHMEN.name()); - } - } - - @Nested - class TestAktenzeichenChangeHistory { - - @Test - void shouldSetBeforeAndAfterValues() { - givenHistorieServiceReturnsCommands(createAktenzeichenChangeCommands()); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getAktenzeichenChangeHistory(); - - assertThat(history).hasSize(3); - checkBeforeAndAfterValues(history.get(0), "", AKTENZEICHEN_1); - checkBeforeAndAfterValues(history.get(1), AKTENZEICHEN_1, AKTENZEICHEN_2); - checkBeforeAndAfterValues(history.get(2), AKTENZEICHEN_2, ""); - } - - @Test - void shouldSetOrder() { - var command = new CommandFactory().aktenzeichenChange(AKTENZEICHEN_1); - givenHistorieServiceReturnsCommands(List.of(command)); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getAktenzeichenChangeHistory(); - - assertThat(history.get(0).getOrder()).isNotNull().isEqualTo(CommandOrder.SET_AKTENZEICHEN.name()); - } - } - - @Nested - class TestAssignedUserChangeHistory { - - @Test - void shouldSetBeforeAndAfterValues() { - givenHistorieServiceReturnsCommands(createUserChangeCommands()); - givenUserServiceReturnsUserProfiles(); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getAssignedUserChangeHistory(); - - assertThat(history).hasSize(2); - checkBeforeAndAfterValues(history.get(0), "", USER_1_FULL_NAME); - checkBeforeAndAfterValues(history.get(1), USER_1_FULL_NAME, USER_2_FULL_NAME); - } - - @Test - void shouldSetOrder() { - var command = new CommandFactory().userChange(USER_1_ID.toString()); - givenHistorieServiceReturnsCommands(List.of(command)); - givenUserServiceReturnsUser1Profile(); - - var history = service.createVorgangChangeHistory(vorgangWithEingang).getAssignedUserChangeHistory(); - - assertThat(history.get(0).getOrder()).isNotNull().isEqualTo(CommandOrder.ASSIGN_USER.name()); - } - } - - private void checkBeforeAndAfterValues(VorgangChange vorgangChange, String expectedBefore, String expectedAfter) { - assertThat(vorgangChange.getValueBeforeChange()).isEqualTo(expectedBefore); - assertThat(vorgangChange.getValueAfterChange()).isEqualTo(expectedAfter); - } - - private void givenHistorieServiceReturnsCommands(List<Command> commands) { - when(commandService.findFinishedCommands(VorgangHeaderTestFactory.ID)).thenReturn(commands.stream()); - } - - private void givenUserServiceReturnsUserProfiles() { - givenUserServiceReturnsUser1Profile(); - givenUserServiceReturnsUser2Profile(); - } - - private void givenUserServiceReturnsUser1Profile() { - when(userService.getById(USER_1_ID)).thenReturn(userProfile(USER_1_FIRST_NAME, USER_1_LAST_NAME)); - } - - private void givenUserServiceReturnsUser2Profile() { - when(userService.getById(USER_2_ID)).thenReturn(userProfile(USER_2_FIRST_NAME, USER_2_LAST_NAME)); - } - - private static UserProfile userProfile(String firstName, String lastName) { - return UserProfileTestFactory.createBuilder().firstName(firstName).lastName(lastName).build(); - } - - private List<Command> createStatusChangeCommandsUntilAbgeschlossen() { - var commandFactory = new CommandFactory(); - return List.of( - commandFactory.statusChange(CommandOrder.VORGANG_ANNEHMEN), - commandFactory.statusChange(CommandOrder.VORGANG_BEARBEITEN), - commandFactory.statusChange(CommandOrder.VORGANG_BESCHEIDEN), - commandFactory.statusChange(CommandOrder.VORGANG_ABSCHLIESSEN), - commandFactory.statusChange(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN), - commandFactory.statusChange(CommandOrder.VORGANG_ABSCHLIESSEN), - commandFactory.statusChange(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN)); - } - - private List<Command> createStatusChangeCommandsUntilVerworfen() { - var commandFactory = new CommandFactory(); - return List.of( - commandFactory.statusChange(CommandOrder.VORGANG_VERWERFEN), - commandFactory.statusChange(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN), - commandFactory.statusChange(CommandOrder.VORGANG_VERWERFEN), - commandFactory.statusChange(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN)); - } - - private List<Command> createStatusChangeCommandsUntilZurueckholen() { - var commandFactory = new CommandFactory(); - return List.of( - commandFactory.statusChange(CommandOrder.VORGANG_VERWERFEN), - commandFactory.statusChange(CommandOrder.VORGANG_ZURUECKHOLEN)); - } - - private List<Command> createAktenzeichenChangeCommands() { - var commandFactory = new CommandFactory(); - return List.of( - commandFactory.aktenzeichenChange(AKTENZEICHEN_1), - commandFactory.aktenzeichenChange(AKTENZEICHEN_2), - commandFactory.aktenzeichenChange(null)); - } - - private List<Command> createUserChangeCommands() { - var commandFactory = new CommandFactory(); - return List.of( - commandFactory.userChange(USER_1_ID.toString()), - commandFactory.userChange(USER_2_ID.toString())); - } - - private List<Command> createMixedCommands() { - var commandFactory = new CommandFactory(); - return List.of( - commandFactory.statusChange(CommandOrder.VORGANG_ANNEHMEN), - commandFactory.aktenzeichenChange(AKTENZEICHEN_1), - commandFactory.userChange(USER_1_ID.toString())); - } - - private static class CommandFactory { - - private ZonedDateTime dateTime = ZonedDateTime.now(ZoneId.of("UTC")); - - Command userChange(String assignedTo) { - return CommandTestFactory.createBuilder() - .order(CommandOrder.ASSIGN_USER.name()) - .body(assignedTo != null ? Map.of(AssignedUserChangeHistoryBuilder.BODY_PROPERTY_ASSIGNED_USER, assignedTo) : Map.of()) - .createdByName(USER_1_FULL_NAME) - .finishedAt(getAndIncrementDateTime()) - .build(); - } - - Command aktenzeichenChange(String aktenzeichen) { - return CommandTestFactory.createBuilder() - .order(CommandOrder.SET_AKTENZEICHEN.name()) - .body(aktenzeichen != null ? Map.of(AktenzeichenChangeHistoryBuilder.BODY_PROPERTY_AKTENZEICHEN, aktenzeichen) : Map.of()) - .createdByName(USER_1_FULL_NAME) - .finishedAt(getAndIncrementDateTime()) - .build(); - } - - Command statusChange(CommandOrder order) { - return CommandTestFactory.createBuilder() - .order(order.name()) - .createdByName(USER_1_FULL_NAME) - .finishedAt(getAndIncrementDateTime()) - .build(); - } - - private ZonedDateTime getAndIncrementDateTime() { - var current = dateTime; - dateTime = dateTime.plusMinutes(1); - return current; - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryServiceTest.java deleted file mode 100644 index afd187ec07cb34b3be9050b42950547635d3cda3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryServiceTest.java +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import static de.ozgcloud.alfa.common.AlfaTestUtils.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.function.Function; -import java.util.stream.Stream; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory; - -public class VorgangChangeHistoryServiceTest { - - private static final String ORGANISATIONSEINHEITEN_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final Command command0105 = ChangeHistoryBuilderTest.commandFinishedAt(LocalDateTime.of(2023, 5, 1, 12, 0)); - private final Command command0106 = ChangeHistoryBuilderTest.commandFinishedAt(LocalDateTime.of(2023, 6, 1, 12, 0)); - private final List<Command> commands = List.of(command0105, command0106); - - private final VorgangChange vorgangChange0105 = VorgangChangeTestFactory.createBuilder() - .valueBeforeChange(LoremIpsum.getInstance().getWords(2)) - .valueAfterChange(LoremIpsum.getInstance().getWords(2)) - .build(); - private final VorgangChange vorgangChange0106 = VorgangChangeTestFactory.createBuilder() - .valueBeforeChange(LoremIpsum.getInstance().getWords(2)) - .valueAfterChange(LoremIpsum.getInstance().getWords(2)) - .build(); - private final List<VorgangChange> vorgangChanges = List.of(vorgangChange0105, vorgangChange0106); - - @Mock - private UserService userService; - @Mock - private HistorieService historieService; - @Mock - private CommandService commandService; - - @Spy - @InjectMocks - private VorgangChangeHistoryService service; - - @Nested - class TestCreateVorgangChangeHistory { - - @BeforeEach - void init() { - mockStreamToList(commands, stream -> when(commandService.findFinishedCommands(vorgang.getId())).thenReturn(stream)); - } - - @Test - void shouldFindFinishedCommands() { - callService(); - - verify(commandService).findFinishedCommands(vorgang.getId()); - } - - @Test - void shouldSetStatusChangeHistory() { - doReturn(vorgangChanges.stream()).when(service).createStatusChangeHistory(vorgang, commands); - - var history = callService(); - - assertThat(history.getStatusChangeHistory()).isEqualTo(vorgangChanges); - } - - @Test - void shouldSetAktenzeichenChangeHistory() { - doReturn(vorgangChanges.stream()).when(service).createAktenzeichenChangeHistory(vorgang, commands); - - var history = callService(); - - assertThat(history.getAktenzeichenChangeHistory()).isEqualTo(vorgangChanges); - } - - @Test - void shouldSetAssignedUserChangeHistory() { - doReturn(vorgangChanges.stream()).when(service).createAssignedUserChangeHistory(vorgang, commands); - - var history = callService(); - - assertThat(history.getAssignedUserChangeHistory()).isEqualTo(vorgangChanges); - } - - private VorgangChangeHistory callService() { - return service.createVorgangChangeHistory(vorgang); - } - } - - @Nested - class TestCreateStatusChangeHistory { - - private MockedStatic<StatusChangeHistoryBuilder> staticBuilder; - @Mock - private StatusChangeHistoryBuilder builder; - - @BeforeEach - void init() { - mockBuilderFactoryMethod(); - mockBuilderWiths(); - } - - private void mockBuilderFactoryMethod() { - staticBuilder = mockStatic(StatusChangeHistoryBuilder.class); - staticBuilder.when(StatusChangeHistoryBuilder::builder).thenReturn(builder); - } - - private void mockBuilderWiths() { - when(builder.withCommands(commands)).thenReturn(builder); - when(builder.withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID)).thenReturn(builder); - } - - @AfterEach - void cleanup() { - staticBuilder.close(); - } - - @Test - void shouldSetCommands() { - callService(); - - verify(builder).withCommands(commands); - } - - @Test - void shouldSetOrganisationseinheitenID() { - callService(); - - verify(builder).withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldReturnBuiltStream() { - when(builder.build()).thenReturn(vorgangChanges.stream()); - - var changeHistory = callService(); - - assertThat(changeHistory).containsExactlyElementsOf(vorgangChanges); - } - - private Stream<VorgangChange> callService() { - return service.createStatusChangeHistory(vorgang, commands); - } - } - - @Nested - class TestCreateAktenzeichenChangeHistory { - - private MockedStatic<AktenzeichenChangeHistoryBuilder> staticBuilder; - @Mock - private AktenzeichenChangeHistoryBuilder builder; - - @BeforeEach - void init() { - mockBuilderFactoryMethod(); - mockBuilderWiths(); - } - - private void mockBuilderFactoryMethod() { - staticBuilder = mockStatic(AktenzeichenChangeHistoryBuilder.class); - staticBuilder.when(AktenzeichenChangeHistoryBuilder::builder).thenReturn(builder); - } - - private void mockBuilderWiths() { - when(builder.withCommands(commands)).thenReturn(builder); - when(builder.withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID)).thenReturn(builder); - } - - @AfterEach - void cleanup() { - staticBuilder.close(); - } - - @Test - void shouldSetCommands() { - callService(); - - verify(builder).withCommands(commands); - } - - @Test - void shouldSetOrganisationseinheitenID() { - callService(); - - verify(builder).withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldReturnBuiltStream() { - when(builder.build()).thenReturn(vorgangChanges.stream()); - - var changeHistory = callService(); - - assertThat(changeHistory).containsExactlyElementsOf(vorgangChanges); - } - - private Stream<VorgangChange> callService() { - return service.createAktenzeichenChangeHistory(vorgang, commands); - } - } - - @Nested - class TestCreateAssignedUserChangeHistory { - - private MockedStatic<AssignedUserChangeHistoryBuilder> staticBuilder; - private MockedStatic<UserProfileCache> staticUserProfileCache; - - @Captor - private ArgumentCaptor<Function<UserId, UserProfile>> userProfileCacheArgCaptor; - - @Mock - private AssignedUserChangeHistoryBuilder builder; - @Mock - private UserProfileCache userProfileCache; - - @BeforeEach - void init() { - mockBuilderFactoryMethod(); - mockBuilderWiths(); - mockUserProfileCacheFactoryMethod(); - } - - private void mockBuilderFactoryMethod() { - staticBuilder = mockStatic(AssignedUserChangeHistoryBuilder.class); - staticBuilder.when(AssignedUserChangeHistoryBuilder::builder).thenReturn(builder); - } - - private void mockBuilderWiths() { - when(builder.withCommands(commands)).thenReturn(builder); - when(builder.withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID)).thenReturn(builder); - when(builder.withUserProfileCache(userProfileCache)).thenReturn(builder); - } - - private void mockUserProfileCacheFactoryMethod() { - staticUserProfileCache = mockStatic(UserProfileCache.class); - staticUserProfileCache.when(() -> UserProfileCache.create(any())).thenReturn(userProfileCache); - } - - @AfterEach - void cleanup() { - staticBuilder.close(); - staticUserProfileCache.close(); - } - - @Test - void shouldSetCommands() { - callService(); - - verify(builder).withCommands(commands); - } - - @Test - void shouldSetOrganisationseinheitenID() { - callService(); - - verify(builder).withOrganisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldCreateUserProfileCache() { - callService(); - - staticUserProfileCache.verify(() -> UserProfileCache.create(userProfileCacheArgCaptor.capture())); - assertArgumentToUserProfileCacheCallsUserService(); - } - - private void assertArgumentToUserProfileCacheCallsUserService() { - userProfileCacheArgCaptor.getValue().apply(UserProfileTestFactory.ID); - - verify(userService).getById(UserProfileTestFactory.ID); - } - - @Test - void shouldSetUserProfileCache() { - callService(); - - verify(builder).withUserProfileCache(userProfileCache); - } - - @Test - void shouldReturnBuiltStream() { - when(builder.build()).thenReturn(vorgangChanges.stream()); - - var changeHistory = callService(); - - assertThat(changeHistory).containsExactlyElementsOf(vorgangChanges); - } - - private Stream<VorgangChange> callService() { - return service.createAssignedUserChangeHistory(vorgang, commands); - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryTestFactory.java deleted file mode 100644 index 087789e8e6892e1dce35513179ab06f0e2ef799e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeHistoryTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.util.List; - -import de.ozgcloud.alfa.common.command.CommandOrder; - -class VorgangChangeHistoryTestFactory { - - public static final List<VorgangChange> STATUS_CHANGE_HISTORY = List.of(VorgangChangeTestFactory.createBuilder() - .order(CommandOrder.VORGANG_ANNEHMEN.name()).build()); - public static final List<VorgangChange> AKTENZEICHEN_CHANGE_HISTORY = List.of(VorgangChangeTestFactory.createBuilder() - .order(CommandOrder.SET_AKTENZEICHEN.name()).build()); - public static final List<VorgangChange> ASSIGNED_USER_CHANGE_HISTORY = List.of(VorgangChangeTestFactory.createBuilder() - .order(CommandOrder.ASSIGN_USER.name()).build()); - - public static VorgangChangeHistory create() { - return VorgangChangeHistory.builder() - .statusChangeHistory(STATUS_CHANGE_HISTORY) - .aktenzeichenChangeHistory(AKTENZEICHEN_CHANGE_HISTORY) - .assignedUserChangeHistory(ASSIGNED_USER_CHANGE_HISTORY) - .build(); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeTestFactory.java deleted file mode 100644 index ebfd6838ad43b51c2d0628634e1832e5cba27b9e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/VorgangChangeTestFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.historie; - -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.command.CommandOrder; - -class VorgangChangeTestFactory { - - public static final String VALUE_BEFORE_CHANGE = "Value before"; - public static final String VALUE_AFTER_CHANGE = "Value after"; - public static final String ORGANISATIONSEINHEITEN_ID = "ORGA1"; - public static final String CREATED_BY_NAME = "User1"; - public static final ZonedDateTime FINISHED_AT = ZonedDateTime.now(); - public static final String ORDER = CommandOrder.SET_AKTENZEICHEN.name(); - - public static VorgangChange create() { - return createBuilder().build(); - } - - public static VorgangChange.VorgangChangeBuilder createBuilder() { - return VorgangChange.builder() - .valueBeforeChange(VALUE_BEFORE_CHANGE) - .valueAfterChange(VALUE_AFTER_CHANGE) - .authorFullName(CREATED_BY_NAME) - .finishedAt(FINISHED_AT) - .order(ORDER) - .organisationseinheitenID(ORGANISATIONSEINHEITEN_ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarByVorgangControllerTest.java deleted file mode 100644 index d63d365f66612016ee52289d10fe22729a1e68a2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarByVorgangControllerTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.time.ZonedDateTime; -import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.kommentar.KommentarController.KommentarByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class KommentarByVorgangControllerTest { - - @InjectMocks - private KommentarByVorgangController controller; - - @Mock - private KommentarService service; - - @Mock - private KommentarModelAssembler modelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void initMockMvc() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetAll { - - @Test - void shouldCallEndpoint() throws Exception { - ResultActions callEndpoint = callEndpoint(); - - callEndpoint.andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<Kommentar>>any(), anyString()); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(KommentarByVorgangController.KOMMENTAR_BY_VORGANG_PATH + "/" + VorgangHeaderTestFactory.ID + "/kommentars")); - } - - @Test - void shouldSortByCreatedAt() { - var firstId = UUID.randomUUID().toString(); - Kommentar first = KommentarTestFactory.createBuilder().id(firstId).createdAt(ZonedDateTime.now()).build(); - - var kommentarList = controller.sortByCreatedAt(Stream.of(KommentarTestFactory.create(), first)).collect(Collectors.toList()); - - assertThat(kommentarList.get(0).getId()).isEqualTo(first.getId()); - assertThat(kommentarList.get(1).getId()).isEqualTo(KommentarTestFactory.ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarCommandControllerTest.java deleted file mode 100644 index e15965cb3c1c52a7e75ec651b8d2fbd9dddcb618..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarCommandControllerTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import lombok.SneakyThrows; - -class KommentarCommandControllerTest { - - @Captor - private ArgumentCaptor<CreateCommand> commandCaptor; - - @Nested - class TestCreateKommentarCommandByVorgang { - - @Spy - @InjectMocks - private KommentarCommandByVorgangController controller; - @Mock - private KommentarService service; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - - when(service.createKommentar(any(), any())).thenReturn(CommandTestFactory.create()); - } - - @SneakyThrows - @Test - void shouldCallService() { - doRequest(); - - verify(service).createKommentar(any(Kommentar.class), eq(VorgangHeaderTestFactory.ID)); - } - - @SneakyThrows - @Test - void shouldReturnCreated() { - doRequest().andExpect(status().isCreated()); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform( - post(KommentarCommandByVorgangController.KOMMENTAR_COMMANDS_BY_VORGANG, VorgangHeaderTestFactory.ID) - .content(createRequestContent()).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().is2xxSuccessful()); - } - } - - @Nested - class TestCreateEditKommentarCommand { - - private final static String REPONSE_HEADER = "http://localhost/api/commands/" + CommandTestFactory.ID; - - @Spy - @InjectMocks - private KommentarCommandController controller; - @Mock - private KommentarService service; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - - when(service.editKommentar(any(), any(), anyLong())).thenReturn(CommandTestFactory.create()); - } - - @Test - void shouldCallService() { - doRequest(); - - verify(service).editKommentar(any(Kommentar.class), eq(KommentarTestFactory.ID), eq(KommentarTestFactory.VERSION)); - } - - @SneakyThrows - @Test - void shouldReturnCreated() { - doRequest().andExpect(status().isCreated()); - } - - @SneakyThrows - @Test - void shouldRespondWithLocationHeader() { - doRequest().andExpect(header().string("Location", REPONSE_HEADER)); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform(post(KommentarCommandController.KOMMENTAR_COMMANDS, KommentarTestFactory.ID, KommentarTestFactory.VERSION) - .content(createRequestContent()).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().is2xxSuccessful()); - } - } - - private String createRequestContent() { - return KommentarTestFactory - .createRequestContent(CommandTestFactory.createCreateCommandBuilder().body(KommentarTestFactory.create()) - .order(LegacyOrder.CREATE_KOMMENTAR).build()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarCommandITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarCommandITCase.java deleted file mode 100644 index 28ca013894a238533b984291be31f19a92affd5f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarCommandITCase.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.http.MediaType; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import de.ozgcloud.alfa.common.command.CommandRemoteService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import lombok.SneakyThrows; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class KommentarCommandITCase { - - @Autowired - private MockMvc mockMvc; - @MockBean - private KommentarRemoteService remoteService; - @MockBean - private CommandRemoteService commandRemoteService; - - @SpyBean - private CurrentUserService userService; - - @WithMockUser - @Nested - class TestCreateCommandByKommentarId { - - @BeforeEach - void initTest() { - when(remoteService.getById(any())).thenReturn(KommentarTestFactory.create()); - when(commandRemoteService.createCommand(any())).thenReturn(CommandTestFactory.create()); - } - - @SneakyThrows - @Test - void shouldCreateCommand() { - doRequestByKommentarId(createValidRequestContent()).andExpect(status().isCreated()); - - verify(commandRemoteService).createCommand(any()); - } - - private String createValidRequestContent() { - return KommentarTestFactory - .createRequestContent(CommandTestFactory.createCreateCommandBuilder() - .order(LegacyOrder.CREATE_KOMMENTAR) - .body(KommentarTestFactory.create()) - .build()); - } - - @WithMockUser - @DisplayName("should return validation error") - @Nested - class TestValidation { - - @SneakyThrows - @DisplayName("for null Text") - @Test - void createCommandWithInvalidText() { - String content = buildContentWithText(null); - - doRequestByKommentarId(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("editKommentar.kommentar.text")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @SneakyThrows - @DisplayName("for empty String in Text") - @Test - void createcommandWithShortText() { - String content = buildContentWithText(StringUtils.EMPTY); - - doRequestByKommentarId(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].name").value("editKommentar.kommentar.text")); - - } - - @SneakyThrows - @DisplayName("for invalid text should have parameter") - @Test - void minMaxParameter() { - String content = buildContentWithText(StringUtils.EMPTY); - - doRequestByKommentarId(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters.length()").value(2)); - } - - private String buildContentWithText(String text) { - var kommentar = KommentarTestFactory.createBuilder().text(text).build(); - var createCommand = CommandTestFactory.createCreateCommandBuilder() - .order(LegacyOrder.CREATE_KOMMENTAR) - .body(kommentar) - .build(); - return KommentarTestFactory.createRequestContent(createCommand); - } - } - - @SneakyThrows - private ResultActions doRequestByKommentarId(String content) { - return mockMvc - .perform(post(KommentarCommandController.KOMMENTAR_COMMANDS, KommentarTestFactory.ID, KommentarTestFactory.VERSION).with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } - - @WithMockUser - @Nested - class TestCreateCommandByVorgangId { - - private static final long RELATION_ID_ON_CREATE = -1; - - @BeforeEach - void initTest() { - when(remoteService.getById(any())).thenReturn(KommentarTestFactory.create()); - when(commandRemoteService.createCommand(any())).thenReturn(CommandTestFactory.create()); - - doReturn(UserProfileTestFactory.ID).when(userService).getUserId(); - } - - @SneakyThrows - @Test - void shouldCreateCommand() { - var content = KommentarTestFactory - .createRequestContent(CommandTestFactory.createCreateCommandBuilder() - .order(LegacyOrder.CREATE_KOMMENTAR) - .body(KommentarTestFactory.create()).build()); - doRequestByVorgangId(content).andExpect(status().isCreated()); - - verify(commandRemoteService).createCommand(any()); - } - - @WithMockUser - @DisplayName("should return validation error") - @Nested - class TestValidation { - - @SneakyThrows - @DisplayName("for null Text") - @Test - void createCommandWithInvalidText() { - String content = buildContentWithText(null); - - doRequestByVorgangId(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams.[0].name").value("createKommentar.kommentar.text")) - .andExpect(jsonPath("$.invalidParams.[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @SneakyThrows - @DisplayName("for empty String in Text") - @Test - void createcommandWithShortText() { - String content = buildContentWithText(StringUtils.EMPTY); - - doRequestByVorgangId(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.[0].name").value("createKommentar.kommentar.text")); - - } - - @SneakyThrows - @DisplayName("for invalid text should have parameter") - @Test - void minMaxParameter() { - String content = buildContentWithText(StringUtils.EMPTY); - - doRequestByVorgangId(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters.length()").value(2)); - } - - private String buildContentWithText(String text) { - var kommentar = KommentarTestFactory.createBuilder().text(text).build(); - var createCommand = CommandTestFactory.createCreateCommandBuilder() - .order(LegacyOrder.CREATE_KOMMENTAR) - .body(kommentar) - .build(); - return KommentarTestFactory.createRequestContent(createCommand); - } - } - - @SneakyThrows - private ResultActions doRequestByVorgangId(String content) { - return mockMvc.perform(post(KommentarCommandByVorgangController.KOMMENTAR_COMMANDS_BY_VORGANG, VorgangHeaderTestFactory.ID, - RELATION_ID_ON_CREATE).with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarControllerTest.java deleted file mode 100644 index f8f28fd5c33b57c3833dabcdd47dd2a944a98037..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarControllerTest.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import com.google.common.collect.Lists; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; - -class KommentarControllerTest { - - private final String PATH = KommentarController.KOMMENTAR_PATH + "/{id}"; - - @InjectMocks - private KommentarController controller; - - @Mock - private KommentarService service; - - @Mock - private KommentarModelAssembler modelAssembler; - - @Mock - private BinaryFileController binaryFileService; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetById { - - private Kommentar kommentar = KommentarTestFactory.create(); - - @BeforeEach - void mockService() { - when(service.getById(any())).thenReturn(kommentar); - } - - @Test - void shouldReturnValue() throws Exception { - ResultActions callEndpoint = callEndpoint(); - - callEndpoint.andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).getById(KommentarTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - callEndpoint(); - - verify(modelAssembler).toModel(kommentar); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(PATH, KommentarTestFactory.ID)); - } - } - - @Nested - @DisplayName("GetKommentarAttachments") - class TestGetKommentarAttachments { - - @Test - void shouldGetAttachments() throws Exception { - when(service.getById(anyString())).thenReturn(KommentarTestFactory.create()); - - mockMvc.perform(get(PATH + "/attachments", KommentarTestFactory.ID)); - - verify(service).getById(KommentarTestFactory.ID); - verify(binaryFileService).getFiles(Lists.newArrayList(BinaryFileTestFactory.FILE_ID)); - } - - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarMapperTest.java deleted file mode 100644 index 0b452538ea938d5e71ca6b8cabc26788ac43d48f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarMapperTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class KommentarMapperTest { - - @Spy - @InjectMocks - private KommentarMapper mapper = Mappers.getMapper(KommentarMapper.class); - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @DisplayName("Map from item") - @Nested - class TestFromItem { - - @BeforeEach - void mockMapper() { - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(KommentarTestFactory.createAsMap()); - } - - @Test - void shouldCallGrpcObjectMapper() { - mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); - - verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM); - } - - @Test - void shouldCallMapperFromItemMap() { - mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); - - verify(mapper).fromItemMap(KommentarTestFactory.createAsMap(), VorgangAttachedItemTestFactory.VERSION); - } - } - - @DisplayName("Map from item map") - @Nested - class TestFromItemMap { - - @Test - void shouldMapId() { - var kommentar = map(); - - assertThat(kommentar.getId()).isEqualTo(KommentarTestFactory.ID); - } - - @Test - void shouldMapVersion() { - var kommentar = map(); - - assertThat(kommentar.getVersion()).isEqualTo(KommentarTestFactory.VERSION); - } - - @Test - void shouldMapCreatedBy() { - var kommentar = map(); - - assertThat(kommentar.getCreatedBy()).isEqualTo(KommentarTestFactory.CREATED_BY); - } - - @Test - void shouldMapCreatedAt() { - var kommentar = map(); - - assertThat(kommentar.getCreatedAt()).isEqualTo(KommentarTestFactory.CREATED_AT); - } - - @Test - void shouldMapText() { - var kommentar = map(); - - assertThat(kommentar.getText()).isEqualTo(KommentarTestFactory.TEXT); - } - - @Test - void shouldMapNullAttachmentsToEmptyList() { - var kommentar = mapper.fromItemMap(createAsMapWithAttachmentIds(null), KommentarTestFactory.VERSION); - - assertThat(kommentar.getAttachments()).isEmpty(); - } - - @Test - void shouldMapEmptyAttachmentsToEmptyList() { - var kommentar = mapper.fromItemMap(createAsMapWithAttachmentIds(Collections.emptyList()), KommentarTestFactory.VERSION); - - assertThat(kommentar.getAttachments()).isEmpty(); - } - - @Test - void shouldMapAttachmentsToList() { - var kommentar = mapper.fromItemMap( - KommentarTestFactory.createAsMap(), - KommentarTestFactory.VERSION); - - assertThat(kommentar.getAttachments()).containsOnly(BinaryFileTestFactory.FILE_ID); - } - - } - - private Kommentar map() { - return mapper.fromItemMap(KommentarTestFactory.createAsMap(), KommentarTestFactory.VERSION); - } - - private static Map<String, Object> createAsMapWithAttachmentIds(Collection<String> attachmentIds) { - var map = new HashMap<>(KommentarTestFactory.createAsMap()); - map.replace(KommentarMapper.ATTACHMENTS, attachmentIds); - return Collections.unmodifiableMap(map); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java deleted file mode 100644 index 882b6eab5e7d2b9a7d5e393b8797bed66eb28c30..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.EntityLinks; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class KommentarModelAssemblerTest { - - private final String PATH = KommentarController.KOMMENTAR_PATH + "/"; - private static final String REL_CREATED_BY = "createdBy"; - private static final String USER_MANAGER_URL = UserProfileUrlProviderTestFactory.ROOT_URL - + UserProfileUrlProviderTestFactory.USER_PROFILES_API_PATH; - - @Spy - @InjectMocks - private KommentarModelAssembler modelAssembler; - - @Mock - private EntityLinks entityLinks; - @Mock - private VorgangController vorgangController; - - @Nested - class TestToModel { - - @Test - void shouldLoadVorgang() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create()); - - modelAssembler.toModel(KommentarTestFactory.create()); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldBuildModel() { - var kommentar = KommentarTestFactory.create(); - var vorgang = VorgangWithEingangTestFactory.create(); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - - modelAssembler.toModel(kommentar); - - verify(modelAssembler).buildModel(kommentar, vorgang); - } - } - - @Nested - class TestLinksOnModel { - private static final String COMMAND_BY_KOMMENTAR_PATH = // - KommentarCommandController.KOMMENTAR_COMMANDS - .replace("{kommentarId}", KommentarTestFactory.ID) - .replace("{kommentarVersion}", String.valueOf(KommentarTestFactory.VERSION)); - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldHaveSelfLink() { - var link = buildModel().getLink(IanaLinkRelations.SELF); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(PATH + KommentarTestFactory.ID); - } - - @Test - void shouldHaveEditLink() { - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - var model = buildModel(); - - assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isPresent().get().extracting(Link::getHref) - .isEqualTo(COMMAND_BY_KOMMENTAR_PATH); - } - - @Test - void shouldNotHaveEditLink() { - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var model = buildModel(); - - assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isEmpty(); - } - - @Test - void shouldHaveCreatedByLink() { - UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - initUserProfileUrlProvider(urlProvider); - - var model = buildModel(); - - assertThat(model.getLink(REL_CREATED_BY)).isPresent().get().extracting(Link::getHref) - .isEqualTo(USER_MANAGER_URL + KommentarTestFactory.CREATED_BY); - } - - @Test - void shouldHaveAttachmentsLink() { - var kommentar = KommentarTestFactory.create(); - var model = modelAssembler.buildModel(kommentar, VorgangWithEingangTestFactory.create()); - - assertThat(model.getLink(KommentarModelAssembler.REL_ATTACHMENTS)).isPresent().get().extracting(Link::getHref) - .isEqualTo(String.format("%s%s/attachments", PATH, kommentar.getId())); - } - - @Test - void shouldNotHaveAttachmentsLinkIfNoAttachmentsAvailable() { - var kommentar = KommentarTestFactory.createBuilder().clearAttachments().build(); - var model = modelAssembler.buildModel(kommentar, VorgangWithEingangTestFactory.create()); - - assertThat(model.getLink(KommentarModelAssembler.REL_ATTACHMENTS)).isEmpty(); - } - - EntityModel<Kommentar> buildModel() { - return modelAssembler.buildModel(KommentarTestFactory.create(), vorgang); - } - } - - @Nested - class TestLinksOnCollectionModel { - - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void beforeEach() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - } - - @Test - void shouldBuildModel() { - initUserProfileUrlProvider(urlProvider); - var kommentar = KommentarTestFactory.create(); - var vorgang = VorgangWithEingangTestFactory.create(); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - - modelAssembler.toCollectionModel(Stream.of(kommentar), VorgangHeaderTestFactory.ID); - - verify(modelAssembler).buildModel(kommentar, vorgang); - } - - @Test - void shouldLoadVorgang() { - initUserProfileUrlProvider(urlProvider); - - modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(), VorgangHeaderTestFactory.ID); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveCreateKommentarLink() { - initUserProfileUrlProvider(urlProvider); - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(), - VorgangHeaderTestFactory.ID); - - var link = collectionModel.getLink(KommentarModelAssembler.REL_CREATE); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo( - "/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/kommentarCommands"); - } - - @Test - void shouldNotHaveCreateKommentarLink() { - initUserProfileUrlProvider(urlProvider); - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(), - VorgangHeaderTestFactory.ID); - - var link = collectionModel.getLink(KommentarModelAssembler.REL_CREATE); - assertThat(link).isEmpty(); - } - - @Test - void shouldHaveUploadFileLink() { - var model = modelAssembler.toCollectionModel(Stream.of(KommentarTestFactory.create()), VorgangHeaderTestFactory.ID); - - var link = model.getLink(KommentarModelAssembler.REL_UPLOAD_FILE); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo("/api/binaryFiles/" + VorgangHeaderTestFactory.ID + "/kommentarAttachment/file"); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarRemoteServiceTest.java deleted file mode 100644 index 003ab96f60dee2a7b8a8ce1655bcb4e6b03e275a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarRemoteServiceTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; - -class KommentarRemoteServiceTest { - - @Spy - @InjectMocks - private KommentarRemoteService service; - @Mock - private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; - @Mock - private KommentarMapper mapper; - - private GrpcVorgangAttachedItem kommentar = GrpcVorgangAttachedItemTestFactory.create(); - - @DisplayName("Find by vorgangId") - @Nested - class TestFindByVorgangId { - - private GrpcFindVorgangAttachedItemRequest request = GrpcFindVorgangAttachedItemRequest.newBuilder() - .setVorgangId(VorgangHeaderTestFactory.ID) - .setItemName(KommentarRemoteService.ITEM_NAME) - .build(); - private GrpcFindVorgangAttachedItemResponse response = GrpcFindVorgangAttachedItemResponse.newBuilder() - .clearVorgangAttachedItems() - .addVorgangAttachedItems(kommentar).build(); - - @BeforeEach - void mockStub() { - when(vorgangAttachedItemServiceStub.find(any())).thenReturn(response); - } - - @Test - void shouldCallStub() { - service.findByVorgangId(VorgangHeaderTestFactory.ID); - - verify(vorgangAttachedItemServiceStub).find(request); - } - - @Test - void shouldCallMapper() { - var result = service.findByVorgangId(VorgangHeaderTestFactory.ID); - collectStreamElementsToTriggerLazyStream(result); - - verify(mapper).fromItem(any()); - } - - private void collectStreamElementsToTriggerLazyStream(Stream<Kommentar> stream) { - stream.toList(); - } - } - - @DisplayName("Find by id") - @Nested - class TestGetById { - private GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponse.newBuilder() - .setVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()) - .build(); - private GrpcVorgangAttachedItemRequest request = GrpcVorgangAttachedItemRequest.newBuilder() - .setId(KommentarTestFactory.ID) - .build(); - - @BeforeEach - void mockStub() { - when(vorgangAttachedItemServiceStub.getById(any())).thenReturn(response); - when(mapper.fromItem(any())).thenReturn(KommentarTestFactory.create()); - } - - @Test - void shouldCallStub() { - service.getById(KommentarTestFactory.ID); - - verify(vorgangAttachedItemServiceStub).getById(request); - } - - @Test - void shouldCallMapper() { - service.getById(KommentarTestFactory.ID); - - verify(mapper).fromItem(any()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarServiceTest.java deleted file mode 100644 index fa300ce51584e53f9a8ab4491f966c30d9e31c4f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarServiceTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class KommentarServiceTest { - - @Spy - @InjectMocks - private KommentarService service; - @Mock - private KommentarRemoteService remoteService; - @Mock - private VorgangAttachedItemService vorgangAttachedItemService; - @Mock - private CurrentUserService currentUserService; - - @DisplayName("Create kommentar") - @Nested - class TestCreateKommentar { - - @DisplayName("should") - @Nested - class TestCalls { - - @BeforeEach - void mockServices() { - doReturn(KommentarTestFactory.create()).when(service).addCreated(any()); - when(vorgangAttachedItemService.createNewKommentar(any(), any())).thenReturn(CommandTestFactory.create()); - } - - @DisplayName("add created") - @Test - void shouldAddCreated() { - callCreateKommentar(); - - verify(service).addCreated(any(Kommentar.class)); - } - - @DisplayName("call vorgangattacheditem service") - @Test - void shouldCallVorgangAttachedItemService() { - callCreateKommentar(); - - verify(vorgangAttachedItemService).createNewKommentar(any(Kommentar.class), eq(VorgangHeaderTestFactory.ID)); - } - } - - @DisplayName("Add created") - @Nested - class TestAddCreated { - - @BeforeEach - void mockServices() { - when(currentUserService.getUserId()).thenReturn(UserProfileTestFactory.ID); - } - - @Test - void shouldSetCreatedAt() throws Exception { - var kommentar = callAddCreated(); - - assertThat(kommentar.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldSetCreatedBy() throws Exception { - var kommentar = callAddCreated(); - - assertThat(kommentar.getCreatedBy()).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - private Kommentar callAddCreated() { - return service.addCreated(KommentarTestFactory.createBuilder().createdAt(null).createdBy(null).build()); - } - } - - private Command callCreateKommentar() { - return service.createKommentar(KommentarTestFactory.create(), VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Edit kommentar") - @Nested - class TestEditKommentar { - - @Captor - private ArgumentCaptor<Kommentar> kommentarCaptor; - - @BeforeEach - void mockKommentarService() { - when(remoteService.getById(anyString())).thenReturn(KommentarTestFactory.createBuilder().text("text needs to be override").build()); - } - - @Test - void shouldCallGetById() { - callEditKommentar(); - - verify(service).getById(KommentarTestFactory.ID); - } - - @Test - void shouldReplaceText() { - callEditKommentar(); - - verify(vorgangAttachedItemService).editKommentar(kommentarCaptor.capture(), eq(KommentarTestFactory.ID), - eq(KommentarTestFactory.VERSION)); - assertThat(kommentarCaptor.getValue().getText()).isEqualTo(KommentarTestFactory.TEXT); - } - - @Test - void shouldReplaceAttachments() { - service.editKommentar(KommentarTestFactory.create(), KommentarTestFactory.ID, KommentarTestFactory.VERSION); - - verify(vorgangAttachedItemService).editKommentar( - kommentarCaptor.capture(), - eq(KommentarTestFactory.ID), - eq(KommentarTestFactory.VERSION)); - assertThat(kommentarCaptor.getValue().getAttachments()).containsExactly(BinaryFileTestFactory.FILE_ID); - } - - @Test - void shouldCallVorgangAttachedItemService() { - callEditKommentar(); - - verify(vorgangAttachedItemService).editKommentar(any(Kommentar.class), eq(KommentarTestFactory.ID), eq(KommentarTestFactory.VERSION)); - } - - private Command callEditKommentar() { - return service.editKommentar(KommentarTestFactory.create(), KommentarTestFactory.ID, KommentarTestFactory.VERSION); - } - } - - @Nested - class TestGetById { - - @Test - void shouldCallRemoteService() { - service.getById(KommentarTestFactory.ID); - - verify(remoteService).getById(KommentarTestFactory.ID); - } - } - - @Nested - class TestFindByVorgangId { - - @Test - void shouldCallRemoteService() { - service.findByVorgangId(VorgangHeaderTestFactory.ID); - - verify(remoteService).findByVorgangId(VorgangHeaderTestFactory.ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarTestFactory.java deleted file mode 100644 index 25df224afb6e04039988ec0e80293e1cc7766863..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarTestFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.kommentar; - -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import com.thedeanda.lorem.Lorem; -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.AlfaTestUtils; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -public class KommentarTestFactory { - - private static Lorem lorem = LoremIpsum.getInstance(); - - public static final String ID = AlfaTestUtils.createMongoDbObjectId(); - public static final long VERSION = 73; - - public static final String CREATED_BY = UserProfileTestFactory.ID.toString(); - public static final String CREATED_AT_STR = "2021-01-10T10:30:00Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - - public static final String TEXT = lorem.getWords(15); - - public static final List<FileId> ATTACHMENTS = Collections.singletonList(BinaryFileTestFactory.FILE_ID); - - public static Kommentar create() { - return createBuilder().build(); - } - - public static Kommentar.KommentarBuilder createBuilder() { - return Kommentar.builder() - .id(ID) - .vorgangId(VorgangHeaderTestFactory.ID) - .version(VERSION) - .text(TEXT) - .attachments(ATTACHMENTS) - .createdBy(CREATED_BY) - .createdAt(CREATED_AT); - } - - public static Map<String, Object> createAsMap() { - return Map.of( - KommentarMapper.ID, ID, - KommentarMapper.TEXT, TEXT, - KommentarMapper.CREATED_BY, CREATED_BY, - KommentarMapper.CREATED_AT, CREATED_AT_STR, - KommentarMapper.ATTACHMENTS, ATTACHMENTS); - } - - public static String createRequestContent(CreateCommand command) { - var kommentar = (Kommentar) command.getBody(); - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithKommentar.json.tmpl", - command.getOrder(), - TestUtils.addQuote(kommentar.getText())); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungByVorgangControllerTest.java deleted file mode 100644 index 5b8809359af75af109e905180a27e4cf5a53892b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungByVorgangControllerTest.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static de.ozgcloud.alfa.common.command.CommandController.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.nio.charset.StandardCharsets; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.errorhandling.ExceptionController; -import de.ozgcloud.alfa.common.errorhandling.ProblemDetailMapper; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderungController.LoeschAnforderungByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class LoeschAnforderungByVorgangControllerTest { - - @InjectMocks - private LoeschAnforderungByVorgangController controller; - - @Mock - private LoeschAnforderungService service; - - @Mock - private VorgangController vorgangController; - - @Mock - private ProblemDetailMapper problemDetailMapper; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ExceptionController(problemDetailMapper)).build(); - } - - @DisplayName("Create LoeschAnforderung") - @Nested - class TestCreateLoeschAnforderung { - - @Captor - private ArgumentCaptor<CreateCommand> createCommandArgumentCaptor; - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void init() { - when(vorgangController.getVorgang(any())).thenReturn(vorgang); - when(service.createLoeschAnforderung(any(), any(), anyLong())).thenReturn(CommandTestFactory.create()); - } - - @SneakyThrows - @Test - void shouldLoadVorgang() { - doRequest(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldCallService() { - doRequest(); - - verify(service).createLoeschAnforderung(createCommandArgumentCaptor.capture(), eq(vorgang), eq(VorgangHeaderTestFactory.VERSION)); - assertThat(createCommandArgumentCaptor.getValue().getCommandOrder()).isEqualTo(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN); - } - - @SneakyThrows - @Test - void shouldReturnLinkToCommand() { - doRequest().andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID)); - } - - @SneakyThrows - private ResultActions doRequest() throws Exception { - var requestBody = CommandTestFactory.buildCreateVorgangCommandContent(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN.name()); - return mockMvc.perform(post(LoeschAnforderungByVorgangController.BASE_PATH, - VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION) - .content(requestBody).contentType(MediaType.APPLICATION_JSON).characterEncoding(StandardCharsets.UTF_8.name())) - .andExpect(status().isCreated()); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandControllerITCase.java deleted file mode 100644 index 4669c46e03aa4e8c3fee7b1b27ece503e9830d4e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandControllerITCase.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.nio.charset.StandardCharsets; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.common.test.TestUtils; - -@WithMockUser -@AutoConfigureMockMvc -@SpringBootTest -class LoeschAnforderungCommandControllerITCase { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private LoeschAnforderungService loeschAnforderungService; - - @MockBean - private VorgangAttachedItemService vorgangAttachedItemService; - - @MockBean - private VorgangController vorgangController; - - @Nested - class TestCreateCommand { - - private final LoeschAnforderung loeschAnforderung = LoeschAnforderungTestFactory.create(); - - @DisplayName("Create VORGANG_LOESCHEN command") - @Nested - class TestVorgangLoeschen { - - @BeforeEach - void init() { - when(loeschAnforderungService.vorgangLoeschen(any(), anyString())).thenReturn(CommandTestFactory.create()); - when(loeschAnforderungService.getById(LoeschAnforderungTestFactory.ID)).thenReturn(loeschAnforderung); - } - - @Test - void shouldReturnForbidden() throws Exception { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung)).thenReturn(false); - - var response = doRequest(CommandOrder.VORGANG_LOESCHEN); - - response.andExpect(status().isForbidden()); - } - - @WithMockUser(roles = UserRole.VERWALTUNG_LOESCHEN) - @Test - void shouldReturnCreated() throws Exception { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung)).thenReturn(true); - - var response = doRequest(CommandOrder.VORGANG_LOESCHEN).andExpect(status().isCreated()); - - response.andExpect(status().isCreated()); - } - - } - - @DisplayName("Create LOESCH_ANFORDERUNG_ZURUECKNEHMEN command") - @Nested - class TestDeleteLoeschAnforderung { - - @BeforeEach - void init() { - var vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - var vorgang = VorgangWithEingangTestFactory.create(); - - when(vorgangAttachedItemService.getById(LoeschAnforderungTestFactory.ID)).thenReturn(vorgangAttachedItem); - when(vorgangController.getVorgang(LoeschAnforderungTestFactory.VORGANG_ID)).thenReturn(vorgang); - when(loeschAnforderungService.zuruecknehmen(vorgangAttachedItem, vorgang)).thenReturn(CommandTestFactory.create()); - } - - @WithMockUser(roles = UserRole.VERWALTUNG_USER) - @Test - void shouldReturnCreated() throws Exception { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung)).thenReturn(false); - - var response = doRequest(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - - response.andExpect(status().isCreated()); - } - - @WithMockUser(roles = UserRole.VERWALTUNG_POSTSTELLE) - @Test - void shouldReturnForbidden() throws Exception { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung)).thenReturn(false); - - var response = doRequest(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - - response.andExpect(status().isForbidden()); - } - } - } - - private ResultActions doRequest(CommandOrder commandOrder) throws Exception { - var requestBody = TestUtils.loadTextFile( - "jsonTemplates/command/createVorgangCommand.json.tmpl", - commandOrder.name()); - - return mockMvc.perform(post(LoeschAnforderungCommandController.BASE_PATH, LoeschAnforderungTestFactory.ID) - .with(csrf()) - .content(requestBody).contentType(MediaType.APPLICATION_JSON).characterEncoding(StandardCharsets.UTF_8.name())); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandControllerTest.java deleted file mode 100644 index 3acc3aa0ac0f854ecdbd683cae7588ac06de282c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandControllerTest.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static de.ozgcloud.alfa.common.command.CommandController.*; -import static org.assertj.core.api.Assertions.*; -import static org.hamcrest.CoreMatchers.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.nio.charset.StandardCharsets; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandStatus; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.common.command.StatusPatch; -import de.ozgcloud.alfa.common.errorhandling.ExceptionController; -import de.ozgcloud.alfa.common.errorhandling.ProblemDetailMapper; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class LoeschAnforderungCommandControllerTest { - - @Spy - @InjectMocks - private LoeschAnforderungCommandController controller; - - @Mock - private LoeschAnforderungService loeschAnforderungService; - - @Mock - private VorgangController vorgangController; - - @Mock - private VorgangAttachedItemService vorgangAttachedItemService; - - @Mock - private CommandController commandController; - - @Mock - private ProblemDetailMapper problemDetailMapper; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ExceptionController(problemDetailMapper)).build(); - } - - @DisplayName("Create command") - @Nested - class TestCreateCommand { - - @Captor - private ArgumentCaptor<CreateCommand> createCommandArgumentCaptor; - - @Nested - class TestExecuteLoeschen { - - @BeforeEach - void init() { - when(loeschAnforderungService.vorgangLoeschen(any(), any())).thenReturn(CommandTestFactory.create()); - } - - @Test - void shouldCallLoeschAnforderungService() throws Exception { - doRequest(CommandOrder.VORGANG_LOESCHEN.name()).andExpect(status().isCreated()); - - verify(loeschAnforderungService).vorgangLoeschen(createCommandArgumentCaptor.capture(), eq(LoeschAnforderungTestFactory.ID)); - assertThat(createCommandArgumentCaptor.getValue()).usingRecursiveComparison() - .isEqualTo(CommandTestFactory.createCreateCommandBuilder().vorgangId(null).relationVersion(0L).relationId(null) - .order(CommandOrder.VORGANG_LOESCHEN.name()).build()); - } - - @Test - void shouldReturnLinkToCommand() throws Exception { - var response = doRequest(CommandOrder.VORGANG_LOESCHEN.name()); - - response.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID)); - } - } - - @Nested - class TestLoeschAnforderungZuruecknehmen { - - private VorgangWithEingang vorgang; - private VorgangAttachedItem vorgangAttachedItem; - - @BeforeEach - void init() { - vorgang = VorgangWithEingangTestFactory.create(); - vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - when(vorgangAttachedItemService.getById(LoeschAnforderungTestFactory.ID)).thenReturn(vorgangAttachedItem); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - when(loeschAnforderungService.zuruecknehmen(vorgangAttachedItem, vorgang)).thenReturn(CommandTestFactory.create()); - } - - @Test - void shouldLoadVorgangAttachedItem() throws Exception { - doRequest(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()).andExpect(status().isCreated()); - - verify(vorgangAttachedItemService).getById(LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldLoadVorgang() throws Exception { - doRequest(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()).andExpect(status().isCreated()); - - verify(vorgangController).getVorgang(LoeschAnforderungTestFactory.VORGANG_ID); - } - - @Test - void shouldCallLoeschAnforderungService() throws Exception { - doRequest(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()).andExpect(status().isCreated()); - - verify(loeschAnforderungService).zuruecknehmen(vorgangAttachedItem, vorgang); - } - - @Test - void shouldReturnLinkToCommand() throws Exception { - var response = doRequest(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()); - - response.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID)); - } - } - - @Test - void shouldThrowOrderNotAllowedException() throws Exception { - var message = "Order 'CREATE_KOMMENTAR' is not allowed. Expected 'VORGANG_LOESCHEN or LOESCH_ANFORDERUNG_ZURUECKNEHMEN'."; - - doRequest(LegacyOrder.CREATE_KOMMENTAR).andExpect(status().isBadRequest()) - .andExpect(jsonPath("issues[0].field").isEmpty()) - .andExpect(jsonPath("issues[0].exceptionId").isNotEmpty()) - .andExpect(jsonPath("issues[0].messageCode").value("loeschanforderung.order_not_allowed")) - .andExpect(jsonPath("issues[0].message").value(containsString(message))); - } - - private ResultActions doRequest(String commandOrderString) throws Exception { - return mockMvc.perform(post(LoeschAnforderungCommandController.BASE_PATH, LoeschAnforderungTestFactory.ID) - .content(CommandTestFactory.buildCreateVorgangCommandContent(commandOrderString)) - .contentType(MediaType.APPLICATION_JSON) - .characterEncoding(StandardCharsets.UTF_8.name())); - } - } - - @DisplayName("Revoke") - @Nested - class TestRevoke { - - @DisplayName("on revoke command status patch") - @Nested - class TestOnRevokedStatus { - - private static final CommandStatus STATUS = CommandStatus.REVOKED; - - @Test - void shouldGetCommand() { - when(commandController.getById(any())).thenReturn(EntityModel.of(CommandTestFactory.create())); - - doRequest(STATUS); - - verify(commandController).getById(CommandTestFactory.ID); - } - - @DisplayName("with VORGANG_ZUM_LOESCHEN_MARKIEREN order") - @Nested - class TestWithVorgangZumLoeschenMarkierenOrder { - - private final Command command = CommandTestFactory.createBuilder().order(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN.name()) - .build(); - - @BeforeEach - void mockCommandController() { - when(commandController.getById(any())).thenReturn(EntityModel.of(command)); - doReturn(ResponseEntity.ok().build()).when(controller).handleVorgangZumLoeschenMarkierenRevokeCommand(any(), any(), any()); - } - - @SneakyThrows - @Test - void shouldHandleVorgangZumLoeschenMarkierenRevokeCommand() { - doRequest(STATUS).andExpect(status().isOk()); - - verify(controller).handleVorgangZumLoeschenMarkierenRevokeCommand(eq(LoeschAnforderungTestFactory.ID), eq(command), any()); - } - } - - @DisplayName("with LOESCH_ANFORDERUNG_ZURUECKNEHMEN order") - @Nested - class TestWithLoeschAnforderungZuruecknehmenOrder { - - private final Command command = CommandTestFactory.createBuilder().order(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()) - .build(); - - @BeforeEach - void mockCommandController() { - when(commandController.getById(any())).thenReturn(EntityModel.of(command)); - doReturn(ResponseEntity.ok().build()).when(controller).handleLoeschAnforderungZuruecknehmenRevokeCommand(any(), any()); - } - - @Test - void shouldHandleLoeschAnforderungZuruecknehmenRevokeCommand() { - doRequest(STATUS); - - verify(controller).handleLoeschAnforderungZuruecknehmenRevokeCommand(any(), any()); - } - } - } - - @SneakyThrows - @Test - void shouldReturnForbiddenOnNonRevokedCommand() { - var request = doRequest(CommandStatus.FINISHED); - - request.andExpect(status().isForbidden()); - } - - @SneakyThrows - private ResultActions doRequest(CommandStatus status) { - return mockMvc.perform( - patch(LoeschAnforderungCommandController.BASE_PATH + "/{commandId}", LoeschAnforderungTestFactory.ID, CommandTestFactory.ID) - .contentType(MediaType.APPLICATION_JSON_VALUE) - .content(CommandTestFactory.buildStatusPatchContent(status))); - } - - @DisplayName("handle vorgang zum loeschen markieren revoke command") - @Nested - class TestHandleVorgangZumLoeschenMarkierenRevokeCommand { - - private final StatusPatch statusPatch = StatusPatch.builder().build(); - - @Test - void shouldCallService() { - handVorgangZumLoeschenMarkierenCommand(); - - verify(loeschAnforderungService).deleteLoeschAnforderung(LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldCallController() { - handVorgangZumLoeschenMarkierenCommand(); - - verify(commandController).revoke(CommandTestFactory.ID, statusPatch); - } - - @Test - void shouldReturnOk() { - when(commandController.revoke(any(), any())).thenReturn(ResponseEntity.ok().build()); - - var result = handVorgangZumLoeschenMarkierenCommand(); - - assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); - } - - private ResponseEntity<EntityModel<Command>> handVorgangZumLoeschenMarkierenCommand() { - return controller.handleVorgangZumLoeschenMarkierenRevokeCommand(LoeschAnforderungTestFactory.ID, CommandTestFactory.create(), - statusPatch); - } - } - - @DisplayName("handle loeschAnforderung zuruecknehmen revoke command") - @Nested - class TestHandleLoeschVorgangZuruecknehmenRevokeCommand { - - private final StatusPatch statusPatch = StatusPatch.builder().build(); - private final Command command = CommandTestFactory.create(); - - @Test - void shouldCreateLoeschAnforderung() { - controller.handleLoeschAnforderungZuruecknehmenRevokeCommand(command, statusPatch); - - verify(loeschAnforderungService).reCreateLoeschAnforderung(command); - } - - @Test - void shouldGetChangeStatusCommandId() { - controller.handleLoeschAnforderungZuruecknehmenRevokeCommand(command, statusPatch); - - verify(loeschAnforderungService).getChangeStatusCommandId(command); - } - - @Test - void shouldCallController() { - when(loeschAnforderungService.getChangeStatusCommandId(any())).thenReturn(CommandTestFactory.ID); - - controller.handleLoeschAnforderungZuruecknehmenRevokeCommand(command, statusPatch); - - verify(commandController).revoke(CommandTestFactory.ID, statusPatch); - } - - @Test - void shouldReturnOk() { - when(commandController.revoke(any(), any())).thenReturn(ResponseEntity.ok().build()); - - var result = controller.handleLoeschAnforderungZuruecknehmenRevokeCommand(command, statusPatch); - - assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java deleted file mode 100644 index e2024c879ace255ff4e5f74a0c4d2492dac29868..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.Test; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandStatus; -import de.ozgcloud.alfa.common.command.CommandTestFactory; - -class LoeschAnforderungCommandProcessorTest { - - @Spy - @InjectMocks - private LoeschAnforderungCommandProcessor processor; - - @Mock - private LoeschAnforderungService service; - - @DisplayName("Prozess") - @Nested - class TestProcess { - - @BeforeEach - void mock() { - UserProfileUrlProviderTestFactory.initUserProfileUrlProvider(new UserProfileUrlProvider()); - } - - @DisplayName("on revokeable") - @Nested - class TestRevokeableCommand { - - @DisplayName("zum loeschen markieren command") - @Nested - class TestLoeschAnforderungCommand { - - private final Command finishedCommand = CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build(); - - @BeforeEach - void mock() { - when(service.findLoeschAnforderung(any())).thenReturn(Optional.of(VorgangAttachedItemTestFactory.create())); - } - - @Test - void shouldAddLink() { - var entityModel = EntityModel - .of(finishedCommand.toBuilder().order(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN.name()).build()); - - var prozessedCommand = processor.process(entityModel); - - assertThat(prozessedCommand.getLink(LoeschAnforderungCommandProcessor.REL_REVOKE)).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/loeschanforderungs/" + VorgangAttachedItemTestFactory.ID + "/commands/" + CommandTestFactory.ID); - } - - @Test - void shouldCallService() { - var entityModel = EntityModel - .of(finishedCommand.toBuilder().order(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN.name()).build()); - - var prozessedCommand = processor.process(entityModel); - - assertThat(prozessedCommand.getLink(LoeschAnforderungCommandProcessor.REL_REVOKE)).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/loeschanforderungs/" + VorgangAttachedItemTestFactory.ID + "/commands/" + CommandTestFactory.ID); - } - } - - @DisplayName("loeschAnforderung zuruecknehmen command") - @Nested - class TestLoeschAnforderungZuruecknehmenCommand { - - private final Command finishedCommand = CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build(); - - @Test - void shouldAddLink() { - var entityModel = EntityModel - .of(finishedCommand.toBuilder().order(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN.name()).build()); - - var prozessedCommand = processor.process(entityModel); - - assertThat(prozessedCommand.getLink(LoeschAnforderungCommandProcessor.REL_REVOKE)).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/loeschanforderungs/" + CommandTestFactory.RELATION_ID + "/commands/" + CommandTestFactory.ID); - } - } - - @DisplayName("on other commands") - @Nested - class TestOnOtherCommand { - - private final Command finishedCommand = CommandTestFactory.createBuilder().status(CommandStatus.FINISHED).build(); - - @DisplayName("except zum loeschen markieren") - @Nested - class TestsExceptLoeschAnforderungZuruecknehmen { - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "VORGANG_ZUM_LOESCHEN_MARKIEREN" }) - void shouldNotCallService(CommandOrder order) { - var command = finishedCommand.toBuilder().order(order.name()).build(); - - processor.process(EntityModel.of(command)); - - verify(service, never()).findLoeschAnforderung(any()); - } - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "VORGANG_ZUM_LOESCHEN_MARKIEREN", "LOESCH_ANFORDERUNG_ZURUECKNEHMEN" }) - void NotAddRevokeLink(CommandOrder order) { - var command = finishedCommand.toBuilder().order(order.name()).build(); - - var prozessedCommand = processor.process(EntityModel.of(command)); - - assertThat(prozessedCommand.getLink(LoeschAnforderungCommandProcessor.REL_REVOKE)).isEmpty(); - } - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungControllerTest.java deleted file mode 100644 index a1d67f14c2f6c985fb1c0613cf00c71c86030202..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungControllerTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.EntityModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.errorhandling.ExceptionController; -import de.ozgcloud.alfa.common.errorhandling.ProblemDetailMapper; -import lombok.SneakyThrows; - -class LoeschAnforderungControllerTest { - - @InjectMocks - private LoeschAnforderungController controller; - - @Mock - private LoeschAnforderungService loeschAnforderungService; - - @Mock - private LoeschAnforderungModelAssembler modelAssembler; - - @Mock - private ProblemDetailMapper problemDetailMapper; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ExceptionController(problemDetailMapper)).build(); - } - - @Nested - class TestGetLoeschanforderung { - - private final LoeschAnforderung loeschAnforderung = LoeschAnforderungTestFactory.create(); - - @BeforeEach - void init() { - when(loeschAnforderungService.getById(LoeschAnforderungTestFactory.ID)).thenReturn(loeschAnforderung); - when(modelAssembler.toModel(loeschAnforderung)).thenReturn(EntityModel.of(loeschAnforderung)); - } - - @Test - void shouldLoadLoeschAnforderung() { - doRequest(); - - verify(loeschAnforderungService).getById(LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() { - doRequest(); - - verify(modelAssembler).toModel(loeschAnforderung); - } - - @Test - void shouldReturn200() throws Exception { - initUserProfileUrlProvider(new UserProfileUrlProvider()); - - var response = doRequest(); - - response.andExpect(status().isOk()); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform(get(LoeschAnforderungController.BASE_PATH + "/" + LoeschAnforderungTestFactory.ID)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungMapperTest.java deleted file mode 100644 index 596b0238a52c52610ad2e904267cea17afd737b0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungMapperTest.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.assertj.core.api.Assertions.*; - -import java.util.Map; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class LoeschAnforderungMapperTest { - - private final LoeschAnforderungMapper mapper = new LoeschAnforderungMapper(); - - @DisplayName("From vorgangAttachedItem") - @Nested - class TestFromVorgangAttachedItem { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.createBuilder().item(Map.of( - LoeschAnforderung.REQUESTED_BY_FIELD, - LoeschAnforderungTestFactory.REQUESTED_BY.toString(), - LoeschAnforderung.PREV_STATUS_FIELD, - LoeschAnforderungTestFactory.PREV_STATUS.name())).build(); - - @Test - void shouldMapId() { - var loeschAnforderung = mapFromVorgangAttachedItem(); - - assertThat(loeschAnforderung.getId()).isEqualTo(VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldMapVorgangId() { - var loeschAnforderung = mapFromVorgangAttachedItem(); - - assertThat(loeschAnforderung.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldMapRequestBy() { - var loeschAnforderung = mapFromVorgangAttachedItem(); - - assertThat(loeschAnforderung.getRequestedBy()).isEqualTo(LoeschAnforderungTestFactory.REQUESTED_BY); - } - - @Test - void shouldMapPrevStatus() { - var loeschAnforderung = mapFromVorgangAttachedItem(); - - assertThat(loeschAnforderung.getPrevStatus()).isEqualTo(LoeschAnforderungTestFactory.PREV_STATUS); - } - - private LoeschAnforderung mapFromVorgangAttachedItem() { - return mapper.fromVorgangAttachedItem(vorgangAttachedItem); - } - } - - @DisplayName("From Command") - @Nested - class TestBuildLoeschAnforderung { - - private final Command command = CommandTestFactory.createBuilder() - .body(Map.of(VorgangAttachedItem.ITEM_FIELD, LoeschAnforderungTestFactory.asMap())) - .build(); - - @Test - void shouldHaveId() { - var loeschAnforderung = mapper.fromCommand(command); - - assertThat(loeschAnforderung.getId()).isEqualTo(CommandTestFactory.RELATION_ID); - } - - @Test - void shouldHaveVorgangId() { - var loeschAnforderung = mapper.fromCommand(command); - - assertThat(loeschAnforderung.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveRequestedBy() { - var loeschAnforderung = mapper.fromCommand(command); - - assertThat(loeschAnforderung.getRequestedBy()).isEqualTo(LoeschAnforderungTestFactory.REQUESTED_BY); - } - - @Test - void shouldHavePrevStatus() { - var loeschAnforderung = mapper.fromCommand(command); - - assertThat(loeschAnforderung.getPrevStatus()).isEqualTo(LoeschAnforderungTestFactory.PREV_STATUS); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssemblerTest.java deleted file mode 100644 index c6bedb3645c210635be3d0da465c48c386b6aa0a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssemblerTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.web.util.UriTemplate; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; - -class LoeschAnforderungModelAssemblerTest { - - @InjectMocks - private LoeschAnforderungModelAssembler modelAssembler; - @Mock - private LoeschAnforderungService loeschAnforderungService; - - @BeforeEach - void init() { - initUserProfileUrlProvider(new UserProfileUrlProvider()); - } - - @Nested - @DisplayName("Build resource") - class TestToModel { - - private static final UriTemplate LOESCH_ANFORDERUNG_COMMAND_URI_TEMPLATE = new UriTemplate(LoeschAnforderungCommandController.BASE_PATH); - - private final LoeschAnforderung loeschAnforderung = LoeschAnforderungTestFactory.create(); - - @Test - void shouldBuildModel() { - var model = toModel(); - - assertThat(model.getContent()).usingRecursiveComparison().isEqualTo(LoeschAnforderungTestFactory.create()); - } - - @Test - void shouldHaveSelfLink() { - var model = toModel(); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref) - .isEqualTo(LoeschAnforderungController.BASE_PATH + "/" + LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldCheckIfAllowedToVorgangLoeschen() { - toModel(); - - verify(loeschAnforderungService).isAllowedToVorgangLoeschen(loeschAnforderung); - } - - @DisplayName("execute loeschen link") - @Nested - class TestExecuteLoeschenLink { - - @Test - void shouldBeAdded() { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(any())).thenReturn(true); - - var model = toModel(); - - assertThat(model.getLink(LoeschAnforderungModelAssembler.REL_EXECUTE_LOESCHEN)).isPresent().get().extracting(Link::getHref) - .isEqualTo(LOESCH_ANFORDERUNG_COMMAND_URI_TEMPLATE.expand(LoeschAnforderungTestFactory.ID).toString()); - } - - @Test - void shouldNotBeAdded() { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(any())).thenReturn(false); - - var model = toModel(); - - assertThat(model.getLink(LoeschAnforderungModelAssembler.REL_EXECUTE_LOESCHEN)).isEmpty(); - } - } - - @DisplayName("loeschAnforderung zuruecknehmen link") - @Nested - class TestLoeschAnforderungZuruecknehmen { - - @Test - void shouldBeAdded() { - var model = toModel(); - - var link = model.getLink(LoeschAnforderungModelAssembler.REL_LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - assertThat(link).isPresent().map(Link::getHref) - .hasValue(LOESCH_ANFORDERUNG_COMMAND_URI_TEMPLATE.expand(LoeschAnforderungTestFactory.ID).toString()); - } - } - - private EntityModel<LoeschAnforderung> toModel() { - return modelAssembler.toModel(loeschAnforderung); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungPreAuthorizeHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungPreAuthorizeHandlerTest.java deleted file mode 100644 index b1b6ca140fb23b61bd37508a2f97e4ef3930a0cf..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungPreAuthorizeHandlerTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; - -class LoeschAnforderungPreAuthorizeHandlerTest { - - @InjectMocks - private LoeschAnforderungPreAuthorizeHandler handler; - - @Mock - private LoeschAnforderungService loeschAnforderungService; - @Mock - private CurrentUserService currentUserService; - - @Nested - class TestHasPermissionForOrder { - - private final LoeschAnforderung loeschAnforderung = LoeschAnforderungTestFactory.create(); - - @DisplayName("Has permission for VORGANG_LOESCHEN") - @Nested - class TestVorgangLoeschen { - - @BeforeEach - void init() { - when(loeschAnforderungService.getById(LoeschAnforderungTestFactory.ID)).thenReturn(loeschAnforderung); - } - - @Test - void shouldLoadLoeschAnforderung() { - handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.VORGANG_LOESCHEN); - - verify(loeschAnforderungService).getById(LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldCallLoeschAnforderungService() { - handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.VORGANG_LOESCHEN); - - verify(loeschAnforderungService).isAllowedToVorgangLoeschen(loeschAnforderung); - } - - @Test - void shouldReturnFalseIfNotAllowed() { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung)).thenReturn(false); - - var result = handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.VORGANG_LOESCHEN); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnTrueIfAllowed() { - when(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung)).thenReturn(true); - - var result = handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.VORGANG_LOESCHEN); - - assertThat(result).isTrue(); - } - } - - @DisplayName("Has permission for LOESCH_ANFORDERUNG_ZURUECKNEHMEN") - @Nested - class TestVorgangLoeschenZuruecknehmen { - - @Nested - class checkingRole { - @BeforeEach - void setupUserServiceMock() { - when(currentUserService.hasRole(any())).thenReturn(false); - } - - @Test - void shouldReturnTrueForVerwaltungUser() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - - var result = handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnTrueForEA() { - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - - var result = handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnFalseMissingRole() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - - var result = handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - - assertThat(result).isFalse(); - } - } - - @Test - void shouldReturnFalseForNotAllowedCommandOrder() { - var result = handler.hasPermissionForOrder(LoeschAnforderungTestFactory.ID, CommandOrder.CREATE_ATTACHED_ITEM); - - assertThat(result).isFalse(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungServiceTest.java deleted file mode 100644 index 740205da24a3a642caaddc6cc357fcf76d31e529..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungServiceTest.java +++ /dev/null @@ -1,730 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.UUID; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.assertj.core.api.InstanceOfAssertFactories; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; - -class LoeschAnforderungServiceTest { - - @Spy - @InjectMocks - private LoeschAnforderungService service; - @Mock - private LoeschAnforderungMapper mapper; - - @Mock - private CommandService commandService; - - @Mock - private VorgangAttachedItemService vorgangAttachedItemService; - - @Mock - private CurrentUserService currentUserService; - - @Nested - class TestCreateVorgangAttachedItem { - - @Captor - private ArgumentCaptor<LoeschAnforderung> commandBodyArgumentCaptor; - - @BeforeEach - void init() { - when(currentUserService.getUserId()).thenReturn(UserProfileTestFactory.ID); - } - - @Test - void shouldCallCurrentUserService() { - service.createLoeschAnforderung(CommandTestFactory.createCreateCommand(), VorgangWithEingangTestFactory.create(), - VorgangHeaderTestFactory.VERSION); - - verify(currentUserService).getUserId(); - } - - @Test - void shouldCallVorgangAttachedItemService() { - service.createLoeschAnforderung(CommandTestFactory.createCreateCommand(), VorgangWithEingangTestFactory.create(), - VorgangHeaderTestFactory.VERSION); - - verify(vorgangAttachedItemService).createNewLoeschAnforderung(commandBodyArgumentCaptor.capture(), eq(VorgangHeaderTestFactory.ID)); - - assertThat(commandBodyArgumentCaptor.getValue()).asInstanceOf(InstanceOfAssertFactories.type(LoeschAnforderung.class)) - .extracting(LoeschAnforderung::getPrevStatus, LoeschAnforderung::getRequestedBy) - .containsExactly(VorgangHeaderTestFactory.STATUS, UserProfileTestFactory.ID); - } - } - - @Nested - class TestCreateCreateCommand { - - @Captor - private ArgumentCaptor<CreateCommand> createCommandArgumentCaptor; - - @Test - void shouldCallCommandService() { - var createCommand = CreateCommand.builder().order(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN.name()).build(); - service.createCreateCommand(createCommand, VorgangWithEingangTestFactory.create(), VorgangHeaderTestFactory.VERSION); - - verify(commandService).createCommand(createCommandArgumentCaptor.capture(), anyLong()); - - assertThat(createCommandArgumentCaptor.getValue().getCommandOrder()).isEqualTo(CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN); - assertThat(createCommandArgumentCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - assertThat(createCommandArgumentCaptor.getValue().getRelationId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnCommand() { - var command = CommandTestFactory.create(); - when(commandService.createCommand(any(), anyLong())).thenReturn(command); - - var result = service.createCreateCommand( - CommandTestFactory.createCreateCommand(), - VorgangWithEingangTestFactory.create(), - VorgangHeaderTestFactory.VERSION); - - assertThat(result).isEqualTo(command); - } - } - - @Nested - class TestCreateLoeschAnforderung { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final CreateCommand createCommand = CommandTestFactory.createCreateCommand(); - - @BeforeEach - void init() { - doNothing().when(service).createVorgangAttachedItem(vorgang); - } - - @Test - void shouldCallCreateVorgangAttachedItem() { - service.createLoeschAnforderung(CommandTestFactory.createCreateCommand(), vorgang, CommandTestFactory.RELATION_VERSION); - - verify(service).createVorgangAttachedItem(vorgang); - } - - @Test - void shouldCreateCreateCommand() { - service.createLoeschAnforderung(createCommand, vorgang, VorgangHeaderTestFactory.VERSION); - - verify(service).createCreateCommand(createCommand, vorgang, VorgangHeaderTestFactory.VERSION); - } - } - - @Nested - class TestIsAllowedToVorgangLoeschen { - - @Test - void shouldReturnTrue() { - when(currentUserService.getUserId()).thenReturn(UserId.from(UUID.randomUUID())); - when(currentUserService.hasRole(UserRole.VERWALTUNG_LOESCHEN)).thenReturn(true); - - var isAllowed = service.isAllowedToVorgangLoeschen(LoeschAnforderungTestFactory.create()); - - assertThat(isAllowed).isTrue(); - } - - @Test - void shouldReturnFalseIfRolesMissing() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_LOESCHEN)).thenReturn(false); - - var isAllowed = service.isAllowedToVorgangLoeschen(LoeschAnforderungTestFactory.create()); - - assertThat(isAllowed).isFalse(); - } - - @Test - void shouldReturnFalseIfRequestorIsSameUser() { - when(currentUserService.getUserId()).thenReturn(UserId.from(LoeschAnforderungTestFactory.REQUESTED_BY.toString())); - when(currentUserService.hasRole(UserRole.VERWALTUNG_LOESCHEN)).thenReturn(true); - - var isAllowed = service.isAllowedToVorgangLoeschen(LoeschAnforderungTestFactory.create()); - - assertThat(isAllowed).isFalse(); - } - } - - @Nested - @DisplayName("Get LoeschAnforderung resouce by id") - class TestGetById { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - private final LoeschAnforderung loeschAnforderung = LoeschAnforderungTestFactory.create(); - - @BeforeEach - void init() { - when(vorgangAttachedItemService.getById(LoeschAnforderungTestFactory.ID)).thenReturn(vorgangAttachedItem); - when(mapper.fromVorgangAttachedItem(any())).thenReturn(loeschAnforderung); - } - - @Test - void shouldCallVorgangAttachedItemService() { - service.getById(LoeschAnforderungTestFactory.ID); - - verify(vorgangAttachedItemService).getById(LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldMapVorgangAttachedItem() { - service.getById(LoeschAnforderungTestFactory.ID); - - verify(mapper).fromVorgangAttachedItem(vorgangAttachedItem); - } - - @Test - void shouldReturnLoeschAnforderung() { - var result = service.getById(LoeschAnforderungTestFactory.ID); - - assertThat(result).isEqualTo(loeschAnforderung); - } - } - - @Nested - @DisplayName("Vorgang loeschen") - class TestVorgangLoeschen { - - private LoeschAnforderung loeschAnforderung = LoeschAnforderungTestFactory.create(); - private Command created = CommandTestFactory.create(); - - @Captor - private ArgumentCaptor<CreateCommand> createCommandArgumentCaptor; - - @BeforeEach - void init() { - doReturn(loeschAnforderung).when(service).getById(LoeschAnforderungTestFactory.ID); - when(commandService.createCommand(any())).thenReturn(created); - } - - @Test - void shouldCallCommandService() { - service.vorgangLoeschen(CommandTestFactory.createCreateCommand(), LoeschAnforderungTestFactory.ID); - - verify(commandService).createCommand(createCommandArgumentCaptor.capture()); - assertThat(createCommandArgumentCaptor.getValue()).usingRecursiveComparison() - .ignoringFields("vorgangId", "relationId").isEqualTo(CommandTestFactory.createCreateCommand()); - assertThat(createCommandArgumentCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - assertThat(createCommandArgumentCaptor.getValue().getRelationId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnCreatedCommand() { - var result = service.vorgangLoeschen( - CreateCommand.builder().order(CommandOrder.VORGANG_LOESCHEN.name()).build(), LoeschAnforderungTestFactory.ID); - - assertThat(result).isEqualTo(created); - } - } - - @Nested - class TestLoeschAnforderungZuruecknehmen { - - private Vorgang vorgang = VorgangHeaderTestFactory.create(); - private VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.createBuilder().item(LoeschAnforderungTestFactory.asMap()) - .build(); - private LoeschAnforderung loeschAnforderung; - private Command changeStatusCommand; - private Command deleteAttachedItemCommand; - private Command deleteLoeschAnforderungCommand; - private CreateCommand deleteLoeschAnforderungCreateCommand; - - @BeforeEach - void init() { - prepareLoeschAnforderung(); - prepareDeleteAttachedItemCommand(); - prepareChangeVorgangStatusCommand(); - prepareDeleteLoeschAnforderungCommand(); - prepareResultCommand(); - } - - void prepareLoeschAnforderung() { - loeschAnforderung = LoeschAnforderungTestFactory.create(); - when(mapper.fromVorgangAttachedItem(any())).thenReturn(loeschAnforderung); - } - - void prepareDeleteAttachedItemCommand() { - deleteAttachedItemCommand = CommandTestFactory.create(); - when(vorgangAttachedItemService.deleteAttachedItem(vorgangAttachedItem)).thenReturn(deleteAttachedItemCommand); - } - - void prepareChangeVorgangStatusCommand() { - changeStatusCommand = CommandTestFactory.create(); - doReturn(changeStatusCommand).when(service).setPreviousVorgangStatus(vorgang, loeschAnforderung); - } - - void prepareDeleteLoeschAnforderungCommand() { - deleteLoeschAnforderungCreateCommand = CommandTestFactory.createCreateCommand(); - doReturn(deleteLoeschAnforderungCreateCommand).when(service) - .buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeStatusCommand, vorgang, loeschAnforderung); - } - - void prepareResultCommand() { - deleteLoeschAnforderungCommand = CommandTestFactory.create(); - when(commandService.createCommand(deleteLoeschAnforderungCreateCommand, VorgangHeaderTestFactory.VERSION)).thenReturn( - deleteLoeschAnforderungCommand); - } - - @Test - void shouldMapVorgangAttachedItemToLoeschAnforderung() { - service.zuruecknehmen(vorgangAttachedItem, vorgang); - - verify(mapper).fromVorgangAttachedItem(vorgangAttachedItem); - } - - @Test - void shouldDeleteVorgangAttacheditem() { - service.zuruecknehmen(vorgangAttachedItem, vorgang); - - verify(vorgangAttachedItemService).deleteAttachedItem(vorgangAttachedItem); - } - - @Test - void shouldSetPreviousVorgangStatus() { - service.zuruecknehmen(vorgangAttachedItem, vorgang); - - verify(service).setPreviousVorgangStatus(vorgang, loeschAnforderung); - } - - @Test - void shouldCreateDeleteLoeschAnforderungCommand() { - service.zuruecknehmen(vorgangAttachedItem, vorgang); - - verify(service).buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeStatusCommand, vorgang, loeschAnforderung); - } - - @Test - void shouldReturnCommand() { - var resultCommand = service.zuruecknehmen(vorgangAttachedItem, vorgang); - - assertThat(resultCommand).isEqualTo(deleteLoeschAnforderungCommand); - } - } - - @Nested - class TestCreateDeleteLoeschAnforderungCommand { - private Command deleteAttachedItemCommand; - private Command changeVorgangStatusCommand; - private Vorgang vorgang; - private LoeschAnforderung loeschAnforderung; - - @BeforeEach - void init() { - deleteAttachedItemCommand = CommandTestFactory.create(); - changeVorgangStatusCommand = CommandTestFactory.create(); - vorgang = VorgangHeaderTestFactory.create(); - loeschAnforderung = LoeschAnforderungTestFactory.create(); - } - - @Test - void shouldHaveOrder() { - var createCommand = service.buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeVorgangStatusCommand, vorgang, - loeschAnforderung); - - assertThat(createCommand.getCommandOrder()).isEqualTo(CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN); - } - - @Test - void shouldContainsDeleteAttachedItemCommandId() { - var createCommand = service.buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeVorgangStatusCommand, vorgang, - loeschAnforderung); - - assertThat(createCommand.getBody()).asInstanceOf(InstanceOfAssertFactories.type(DeleteLoeschAnforderung.class)) - .extracting(DeleteLoeschAnforderung::getDeleteAttachedItemCommandId).isEqualTo(deleteAttachedItemCommand.getId()); - } - - @Test - void shouldContainsChangeVorgangStatusCommandId() { - var createCommand = service.buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeVorgangStatusCommand, vorgang, - loeschAnforderung); - - assertThat(createCommand.getBody()).asInstanceOf(InstanceOfAssertFactories.type(DeleteLoeschAnforderung.class)) - .extracting(DeleteLoeschAnforderung::getChangeStatusCommandId).isEqualTo(changeVorgangStatusCommand.getId()); - } - - @Test - void shouldHaveVorgangId() { - var createCommand = service.buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeVorgangStatusCommand, vorgang, - loeschAnforderung); - - assertThat(createCommand.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveRelationId() { - var createCommand = service.buildDeleteLoeschAnforderungCommand(deleteAttachedItemCommand, changeVorgangStatusCommand, vorgang, - loeschAnforderung); - - assertThat(createCommand.getRelationId()).isEqualTo(LoeschAnforderungTestFactory.ID); - } - } - - @Nested - class TestGetCommandOrderForPreviousStatus { - - @Test - void shouldReturnVorgangVerwerfenOrder() { - var loeschAnforderung = LoeschAnforderungTestFactory.createBuilder().prevStatus(VorgangStatus.VERWORFEN).build(); - - var order = service.getCommandOrderForPreviousStatus(loeschAnforderung); - - assertThat(order).isEqualTo(CommandOrder.VORGANG_VERWERFEN); - } - - @Test - void shouldReturnVorgangAbschliessenOrder() { - var loeschAnforderung = LoeschAnforderungTestFactory.createBuilder().prevStatus(VorgangStatus.ABGESCHLOSSEN).build(); - - var order = service.getCommandOrderForPreviousStatus(loeschAnforderung); - - assertThat(order).isEqualTo(CommandOrder.VORGANG_ABSCHLIESSEN); - } - - @Test - void shouldThrowTechnicalException() { - var loeschAnforderung = LoeschAnforderungTestFactory.createBuilder().prevStatus(VorgangStatus.NEU).build(); - - assertThatThrownBy(() -> service.getCommandOrderForPreviousStatus(loeschAnforderung)).isInstanceOf( - TechnicalException.class); - - } - } - - @Nested - class TestCreateSetPreviousVorgangStatusCreateCommand { - - private LoeschAnforderung loeschAnforderung; - private Vorgang vorgang; - - @BeforeEach - void init() { - loeschAnforderung = LoeschAnforderungTestFactory.createBuilder().prevStatus(VorgangStatus.ABGESCHLOSSEN).build(); - vorgang = VorgangHeaderTestFactory.create(); - } - - @Test - void shouldSetOrder() { - var command = service.createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - - assertThat(command.getCommandOrder()).isEqualTo(CommandOrder.VORGANG_ABSCHLIESSEN); - } - - @Test - void shouldSetVorgangId() { - var command = service.createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - - assertThat(command.getVorgangId()).isEqualTo(LoeschAnforderungTestFactory.VORGANG_ID); - } - - @Test - void shouldSetRelationId() { - var command = service.createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - - assertThat(command.getRelationId()).isEqualTo(LoeschAnforderungTestFactory.VORGANG_ID); - } - - @Test - void shouldSetVersion() { - var command = service.createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - - assertThat(command.getRelationVersion()).isEqualTo(VorgangHeaderTestFactory.VERSION); - } - - @Test - void shouldCallGetCommandOrderForPreviousStatus() { - service.createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - - verify(service).getCommandOrderForPreviousStatus(loeschAnforderung); - } - } - - @Nested - class TestSetPreviousVorgangStatus { - - private LoeschAnforderung loeschAnforderung; - private Vorgang vorgang; - private CreateCommand createCommand; - private Command command; - - @BeforeEach - void init() { - loeschAnforderung = LoeschAnforderungTestFactory.createBuilder().prevStatus(VorgangStatus.ABGESCHLOSSEN).build(); - vorgang = VorgangHeaderTestFactory.create(); - createCommand = CommandTestFactory.createCreateCommand(); - command = CommandTestFactory.create(); - - doReturn(createCommand).when(service).createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - when(commandService.createCommand(createCommand, VorgangHeaderTestFactory.VERSION)).thenReturn(command); - } - - @Test - void shouldCreateCommand() { - service.setPreviousVorgangStatus(vorgang, loeschAnforderung); - - verify(service).createSetPreviousVorgangStatusCreateCommand(vorgang, loeschAnforderung); - } - - @Test - void shouldCallCommandService() { - service.setPreviousVorgangStatus(vorgang, loeschAnforderung); - - verify(commandService).createCommand(createCommand, VorgangHeaderTestFactory.VERSION); - } - - @Test - void shouldReturnCommand() { - var result = service.setPreviousVorgangStatus(vorgang, loeschAnforderung); - - assertThat(result).isEqualTo(command); - } - } - - @Nested - @DisplayName("FindVorgangAttachedItem") - class TestFindVorgangAttachedItem { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - private final Stream<VorgangAttachedItem> vorgangAttachedItems = Stream.of(vorgangAttachedItem); - - @DisplayName("on single result") - @Nested - class TestOnSingleLoeschAnforderung { - - @BeforeEach - void init() { - when(vorgangAttachedItemService.findLoeschAnforderung(VorgangHeaderTestFactory.ID)).thenReturn(vorgangAttachedItems); - } - - @Test - void shouldCallRemoteService() { - service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - verify(vorgangAttachedItemService).findLoeschAnforderung(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnResult() { - var result = service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - assertThat(result).isPresent().hasValue(vorgangAttachedItem); - } - } - - @DisplayName("on multiple result") - @Nested - class TestOnMultipleLoeschAnforderungen { - - private final Stream<VorgangAttachedItem> loeschAnforderungen = Stream.of(vorgangAttachedItem, vorgangAttachedItem); - - @BeforeEach - void initMock() { - when(vorgangAttachedItemService.findLoeschAnforderung(VorgangHeaderTestFactory.ID)).thenReturn(loeschAnforderungen); - } - - @Test - void shouldDeleteDuplicateLoeschAnforderung() { - service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - verify(service).deleteDuplicateLoeschAnforderung(any(), eq(VorgangHeaderTestFactory.ID)); - } - - @Test - void shouldReturnFirstLoeschAnforderung() { - var result = service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - assertThat(result).isPresent().hasValue(vorgangAttachedItem); - } - } - - @DisplayName("delete duplicate loeschAnforderung") - @Nested - class TestDeleteDuplicateLoeschAnforderun { - - private final VorgangAttachedItem otherLoeschAnforderung = VorgangAttachedItemTestFactory.create(); - private final VorgangAttachedItem anotherLoeschAnforderung = VorgangAttachedItemTestFactory.create(); - private final List<VorgangAttachedItem> loeschAnforderungen = List.of(vorgangAttachedItem, otherLoeschAnforderung, - anotherLoeschAnforderung); - - @Test - void shouldDeleteAllExceptFirstElement() { - service.deleteDuplicateLoeschAnforderung(loeschAnforderungen, VorgangHeaderTestFactory.ID); - - verify(vorgangAttachedItemService).deleteAttachedItem(otherLoeschAnforderung); - verify(vorgangAttachedItemService).deleteAttachedItem(anotherLoeschAnforderung); - } - } - } - - @DisplayName("Find Loeschanforderung") - @Nested - class TestFindLoeschAnforderung { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @BeforeEach - void mock() { - when(vorgangAttachedItemService.findLoeschAnforderung(any())).thenReturn(Stream.of(vorgangAttachedItem)); - } - - @Test - void shouldCallService() { - service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - verify(vorgangAttachedItemService).findLoeschAnforderung(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnResult() { - var result = service.findLoeschAnforderung(VorgangHeaderTestFactory.ID); - - assertThat(result).isPresent().hasValue(vorgangAttachedItem); - } - } - - @DisplayName("Delete LoeschAnforderung") - @Nested - class TestDeleteLoeschAnforderung { - - private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.create(); - - @BeforeEach - void mock() { - when(vorgangAttachedItemService.getById(anyString())).thenReturn(vorgangAttachedItem); - } - - @Test - void shouldGetLoeschAnforderung() { - service.deleteLoeschAnforderung(LoeschAnforderungTestFactory.ID); - - verify(vorgangAttachedItemService).getById(LoeschAnforderungTestFactory.ID); - } - - @Test - void shouldDeleteVorgangAttachedItem() { - service.deleteLoeschAnforderung(LoeschAnforderungTestFactory.ID); - - verify(vorgangAttachedItemService).deleteAttachedItem(vorgangAttachedItem); - } - } - - @DisplayName("Recreate LoeschAnforderung") - @Nested - class TestReCreateLoeschAnforderung { - - @DisplayName(StringUtils.EMPTY) - @Nested - class TestWorkflow { - - private final Command zuruecknehmenCommand = CommandTestFactory.createBuilder() - .body(LoeschAnforderungTestFactory.createDeleteLoeschAnforderungBodyMap()) - .build(); - private final Command deleteVorgangAttachedItemCommand = CommandTestFactory.create(); - - @BeforeEach - void mock() { - when(commandService.getById(anyString())).thenReturn(deleteVorgangAttachedItemCommand); - when(mapper.fromCommand(any())).thenReturn(LoeschAnforderungTestFactory.create()); - } - - @Test - void shouldGetLoeschAnforderungZuruecknehmenCommand() { - service.reCreateLoeschAnforderung(zuruecknehmenCommand); - - verify(commandService).getById(LoeschAnforderungTestFactory.DELETE_VORGANG_ATTACHED_ITEM_ID); - } - - @Test - void shouldGetDeleteLoeschAnforderungCommand() { - service.reCreateLoeschAnforderung(zuruecknehmenCommand); - - verify(commandService).getById(LoeschAnforderungTestFactory.DELETE_VORGANG_ATTACHED_ITEM_ID); - } - - @Test - void shouldCallMapper() { - service.reCreateLoeschAnforderung(zuruecknehmenCommand); - - verify(mapper).fromCommand(deleteVorgangAttachedItemCommand); - } - - @Test - void shouldCreateNewLoeschAnforderung() { - service.reCreateLoeschAnforderung(zuruecknehmenCommand); - - verify(vorgangAttachedItemService).createNewLoeschAnforderung(any(), eq(VorgangHeaderTestFactory.ID)); - } - } - } - - @DisplayName("Get changeStatus commandId") - @Nested - class TestGetChangedStatusCommandId { - - private final Command zuruecknehmenCommand = CommandTestFactory.createBuilder() - .body(LoeschAnforderungTestFactory.createDeleteLoeschAnforderungBodyMap()) - .build(); - - @Test - void shouldReturnChangeStatusCommandId() { - var commandId = service.getChangeStatusCommandId(zuruecknehmenCommand); - - assertThat(commandId).isEqualTo(LoeschAnforderungTestFactory.CHANGE_STATUS_COMMAND_ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungTestFactory.java deleted file mode 100644 index 0e52926b015b23c277ed5d06ef947d8bee5fae05..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungTestFactory.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import java.util.Map; -import java.util.UUID; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -public class LoeschAnforderungTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final UserId REQUESTED_BY = UserId.from(UUID.randomUUID().toString()); - public static final VorgangStatus PREV_STATUS = VorgangStatus.VERWORFEN; - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - static final String CHANGE_STATUS_COMMAND_ID = UUID.randomUUID().toString(); - static final String DELETE_VORGANG_ATTACHED_ITEM_ID = UUID.randomUUID().toString(); - - public static LoeschAnforderung create() { - return createBuilder().build(); - } - - public static LoeschAnforderung.LoeschAnforderungBuilder createBuilder() { - return LoeschAnforderung.builder().id(ID).vorgangId(VorgangHeaderTestFactory.ID).prevStatus(PREV_STATUS).requestedBy(REQUESTED_BY); - } - - public static Map<String, Object> asMap() { - return Map.of( - LoeschAnforderung.REQUESTED_BY_FIELD, REQUESTED_BY.toString(), - LoeschAnforderung.PREV_STATUS_FIELD, PREV_STATUS.name()); - } - - public static Map<String, String> createDeleteLoeschAnforderungBodyMap() { - return Map.of(DeleteLoeschAnforderung.CHANGE_STATUS_COMMAND_ID_FIELD, CHANGE_STATUS_COMMAND_ID, - DeleteLoeschAnforderung.DELETE_ATTACHED_ITEM_COMMAND_ID_FIELD, DELETE_VORGANG_ATTACHED_ITEM_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessorTest.java deleted file mode 100644 index a8ddd9361ca3b7c887d1ef2047010303d47a9fe1..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessorTest.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.loeschanforderung; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderungController.LoeschAnforderungByVorgangController; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class LoeschAnforderungVorgangProcessorTest { - - @Spy - @InjectMocks - private LoeschAnforderungVorgangProcessor processor; - - @Mock - private CurrentUserService currentUserService; - @Mock - private LoeschAnforderungService loeschAnforderungService; - @Mock - private VorgangController vorgangController; - - @DisplayName("Process") - @Nested - class TestProcess { - - @DisplayName("add links") - @Nested - class TestLinks { - - @BeforeEach - void mock() { - initUserProfileUrlProvider(new UserProfileUrlProvider()); - - when(loeschAnforderungService.findLoeschAnforderung(VorgangHeaderTestFactory.ID)).thenReturn( - Optional.of(VorgangAttachedItemTestFactory.create())); - } - - @Test - void shouldFindLoeschAnforderung() { - processor.process(EntityModel.of(VorgangHeaderTestFactory.create())); - - verify(loeschAnforderungService).findLoeschAnforderung(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldAddLoeschenAnfordernLink() { - doReturn(true).when(processor).isLoeschenAnfordernAllowed(any()); - - var model = processor.process(EntityModel.of(VorgangHeaderTestFactory.create())); - - assertThat(model.getLink(LoeschAnforderungVorgangProcessor.REL_LOESCHEN_ANFORDERN)).isPresent() - .map(Link::getHref) - .hasValue(LoeschAnforderungByVorgangController.BASE_PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID) - .replace("{vorgangVersion}", String.valueOf(VorgangHeaderTestFactory.VERSION))); - } - - @Test - void shoulNotdAddLoeschenAnfordernLink() { - doReturn(false).when(processor).isLoeschenAnfordernAllowed(any()); - - var model = processor.process(EntityModel.of(VorgangHeaderTestFactory.create())); - - assertThat(model.getLink(LoeschAnforderungVorgangProcessor.REL_LOESCHEN_ANFORDERN)).isEmpty(); - } - - @Test - void shouldAddLoeschAnforderungLink() { - var vogang = VorgangHeaderTestFactory.createBuilder().status(Vorgang.VorgangStatus.ZU_LOESCHEN).build(); - - var model = processor.process(EntityModel.of(vogang)); - - var link = model.getLink(LoeschAnforderungVorgangProcessor.REL_LOESCH_ANFORDERUNG); - assertThat(link).isPresent().map(Link::getHref) - .hasValue(LoeschAnforderungController.BASE_PATH + "/" + VorgangAttachedItemTestFactory.ID); - } - - @Test - void shouldNotAddLoeschAnforderungLink() { - when(loeschAnforderungService.findLoeschAnforderung(VorgangHeaderTestFactory.ID)).thenReturn(Optional.empty()); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(Vorgang.VorgangStatus.ZU_LOESCHEN).build(); - - var model = processor.process(EntityModel.of(vorgang)); - - assertThat(model.getLink(LoeschAnforderungVorgangProcessor.REL_LOESCH_ANFORDERUNG)).isEmpty(); - } - } - } - - @DisplayName("Is loeschen anfordern allowed") - @Nested - class TestIsLoeschenAnfordernAllowed { - - @DisplayName("on matching status") - @Nested - class TestOnMatchingStatus { - - @DisplayName("with VERWALTUNG_USER role") - @Nested - class TestWithVerwaltungUserRole { - - @BeforeEach - void mock() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - } - - @ParameterizedTest - @EnumSource(names = { "VERWORFEN", "ABGESCHLOSSEN" }) - void shouldReturnTrue(VorgangStatus vorgangStatus) { - var vorgang = VorgangHeaderTestFactory.createBuilder().status(vorgangStatus).build(); - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - var isAllowed = processor.isLoeschenAnfordernAllowed(vorgang); - - assertThat(isAllowed).isTrue(); - } - - @ParameterizedTest - @EnumSource(names = { "VERWORFEN", "ABGESCHLOSSEN" }) - void shouldReturnFalseIfVorgangNotEditable(VorgangStatus vorgangStatus) { - var vorgang = VorgangHeaderTestFactory.createBuilder().status(vorgangStatus).build(); - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var isAllowed = processor.isLoeschenAnfordernAllowed(vorgang); - - assertThat(isAllowed).isFalse(); - } - } - - @DisplayName("with EINHEITLICHER_ANSPRECHPARTNER role") - @Nested - class TestWithEinheitlicherAnsprechpartnerRole { - - @BeforeEach - void mock() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - } - - @ParameterizedTest - @EnumSource(names = { "VERWORFEN", "ABGESCHLOSSEN" }) - void shouldReturnTrue(VorgangStatus vorgangStatus) { - var vorgang = VorgangHeaderTestFactory.createBuilder().status(vorgangStatus).build(); - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - var isAllowed = processor.isLoeschenAnfordernAllowed(vorgang); - - assertThat(isAllowed).isTrue(); - } - - @ParameterizedTest - @EnumSource(names = { "VERWORFEN", "ABGESCHLOSSEN" }) - void shouldReturnFalseIfVorgangNotEditable(VorgangStatus vorgangStatus) { - var vorgang = VorgangHeaderTestFactory.createBuilder().status(vorgangStatus).build(); - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var isAllowed = processor.isLoeschenAnfordernAllowed(vorgang); - - assertThat(isAllowed).isFalse(); - } - } - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "VERWORFEN", "ABGESCHLOSSEN" }) - void shouldReturnFalseForNonMatchingVorgangStatus(VorgangStatus vorgangStatus) { - var vorgang = VorgangHeaderTestFactory.createBuilder().status(vorgangStatus).build(); - - var isAllowed = processor.isLoeschenAnfordernAllowed(vorgang); - - assertThat(isAllowed).isFalse(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/FeaturesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/FeaturesTestFactory.java deleted file mode 100644 index e85f536acfbdadef61c3b4f9c9dc13d8f4178613..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/FeaturesTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -public class FeaturesTestFactory { - public static final boolean REPLY_ALLOWED = true; - public static final boolean REPLY_FORBIDDEN = false; - - public static Features create() { - return createBuilder().build(); - } - - public static Features.FeaturesBuilder createBuilder() { - return Features.builder().reply(REPLY_ALLOWED); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcGetPostfachConfigResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcGetPostfachConfigResponseTestFactory.java deleted file mode 100644 index 4b3d48f0f91e61f552869ffb62dae69abc7125c4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcGetPostfachConfigResponseTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigResponse; - -public class GrpcGetPostfachConfigResponseTestFactory { - - public static final boolean CONFIGURED = true; - - public static GrpcGetPostfachConfigResponse create() { - return createBuilder().build(); - } - - public static GrpcGetPostfachConfigResponse.Builder createBuilder() { - return GrpcGetPostfachConfigResponse.newBuilder() - .setConfigured(CONFIGURED) - .addPostfach(GrpcPostfachTestFactory.create()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachAddressTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachAddressTestFactory.java deleted file mode 100644 index 8c135bedf3e8ca7b812631bcba04c50e4dbcb203..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachAddressTestFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.GrpcProperty; -import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; - -public class GrpcPostfachAddressTestFactory { - - public static GrpcPostfachAddress create() { - return createBuilder().build(); - } - - public static GrpcPostfachAddress.Builder createBuilder() { - return GrpcPostfachAddress.newBuilder() - .setType(PostfachAddressTestFactory.TYPE) - .setIdentifier(createStringBasedIdentifier()) - .setVersion(PostfachAddressTestFactory.VERSION); - } - - public static GrpcObject createStringBasedIdentifier() { - return GrpcObject.newBuilder() - .addProperty(GrpcProperty.newBuilder() - .setName(PostfachAddress.IDENTIFIER_POSTFACH_ID_FIELD) - .addValue(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID) - .build()) - .build(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachMailTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachMailTestFactory.java deleted file mode 100644 index 0a3e7831897e68e05732eb85446a3dbc841ec59c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachMailTestFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static de.ozgcloud.alfa.postfach.PostfachMailTestFactory.*; - -import java.util.Arrays; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.nachrichten.postfach.GrpcDirection; -import de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailResponse; -import de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsResponse; -import de.ozgcloud.nachrichten.postfach.GrpcPostfachMail; - -public class GrpcPostfachMailTestFactory { - - public static GrpcPostfachMail create() { - return createBuilder().build(); - } - - public static GrpcPostfachMail.Builder createBuilder() { - return GrpcPostfachMail.newBuilder() - .setId(ID) - .setVorgangId(VORGANG_ID) - .setPostfachId(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID) - .setCreatedAt(CREATED_AT_STR) - .setCreatedBy(CREATED_BY.toString()) - .setSentAt(SENT_AT_STR) - .setSentSuccessful(SENT_SUCCESSFUL) - .setMessageCode(MESSAGE_CODE) - .setDirection(GrpcDirection.OUT) - .setReplyOption(REPLY_OPTION.name()) - .setSubject(SUBJECT) - .setMailBody(MAIL_BODY) - .addAttachment(BinaryFileTestFactory.ID); - } - - public static GrpcFindPostfachMailsResponse createFindPostfachMailsResponse() { - return GrpcFindPostfachMailsResponse.newBuilder() - .addAllMails(Arrays.asList(create())) - .build(); - } - - public static GrpcFindPostfachMailResponse createFindPostfachMailResponse() { - return GrpcFindPostfachMailResponse.newBuilder() - .setNachricht(create()) - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachTestFactory.java deleted file mode 100644 index d3a816718ff9774b697de421e10f83660e501483..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/GrpcPostfachTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import de.ozgcloud.nachrichten.postfach.GrpcPostfach; - -public class GrpcPostfachTestFactory { - - public static final String TYPE = "OSI"; - public static final boolean REPLY_ALLOWED = true; - - public static GrpcPostfach create() { - return createBuilder().build(); - } - - public static GrpcPostfach.Builder createBuilder() { - return GrpcPostfach.newBuilder() - .setType(TYPE) - .setReplyAllowed(REPLY_ALLOWED); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettingsTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettingsTestFactory.java deleted file mode 100644 index 0fd5e10686b3c09e62c0fc4dc428eeef9c66d66b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/OrganisationsEinheitSettingsTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class OrganisationsEinheitSettingsTestFactory { - public static final String TEST_SIGNATUR = "Test organisationseinheit signatur"; - - static OrganisationsEinheitSettings create() { - return createBuilder().build(); - } - - static OrganisationsEinheitSettings.OrganisationsEinheitSettingsBuilder createBuilder() { - return new OrganisationsEinheitSettings.OrganisationsEinheitSettingsBuilder() - .signatur(TEST_SIGNATUR); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachAddressTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachAddressTestFactory.java deleted file mode 100644 index 9830f22958b0373e197644130dd95df2aa66bed4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachAddressTestFactory.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.Map; -import java.util.UUID; - -import de.ozgcloud.alfa.vorgang.ServiceKontoTestFactory; - -public class PostfachAddressTestFactory { - - public final static int TYPE = 1; - - public final static String STRING_BASED_IDENTIFIER_POSTFACH_ID = UUID.randomUUID().toString(); - public final static Map<String, Object> IDENTIFIER = Map.of(PostfachAddress.IDENTIFIER_POSTFACH_ID_FIELD, STRING_BASED_IDENTIFIER_POSTFACH_ID); - - public static final String VERSION = "1.0"; - - public static PostfachAddress create() { - return createBuilder().build(); - } - - public static PostfachAddress.PostfachAddressBuilder createBuilder() { - return PostfachAddress.builder() - .type(TYPE) - .identifier(IDENTIFIER) - .version(VERSION); - } - - public static Map<String, Object> createAsMap() { - return Map.of(PostfachAddress.TYPE_FIELD, TYPE, - PostfachAddress.VERSION_FIELD, VERSION, - PostfachAddress.IDENTIFIER_FIELD, createIdentifierMap(), - PostfachNachrichtHelper.SERVICEKONTO_TYPE_FIELD, ServiceKontoTestFactory.TYPE); - } - - private static Map<String, Object> createIdentifierMap() { - return Map.of(PostfachAddress.IDENTIFIER_POSTFACH_ID_FIELD, STRING_BASED_IDENTIFIER_POSTFACH_ID); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigGroupTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigGroupTestFactory.java deleted file mode 100644 index 4d6befa36a82ebc0bcf077984125163e8a866bfc..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigGroupTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -public class PostfachConfigGroupTestFactory { - - public static PostfachConfigGroup create() { - return createBuilder().build(); - } - - public static PostfachConfigGroup.PostfachConfigGroupBuilder createBuilder() { - return PostfachConfigGroup.builder() - .configured(true) - .postfachConfigs(List.of(PostfachConfigTestFactory.create())); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigMapperTest.java deleted file mode 100644 index 5381521a7214f600d8c396534d2d0a2a661f5022..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigMapperTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.Spy; - -public class PostfachConfigMapperTest { - - @Spy - private final PostfachConfigMapper mapper = Mappers.getMapper(PostfachConfigMapper.class); - - @Nested - class TestToPostfachConfig { - - @Test - void shouldMapReplyAllowed() { - var postfachConfig = mapper.toPostfachConfig(GrpcPostfachTestFactory.create()); - - assertThat(postfachConfig.isReplyAllowed()).isEqualTo(GrpcPostfachTestFactory.REPLY_ALLOWED); - } - - @Test - void shouldMapType() { - var postfachConfig = mapper.toPostfachConfig(GrpcPostfachTestFactory.create()); - - assertThat(postfachConfig.getType()).isEqualTo(GrpcPostfachTestFactory.TYPE); - } - } - - @Nested - class TestToPostfachConfigGroup { - - @Test - void shouldMapConfigured() { - var postfachConfigGroup = mapper.toPostfachConfigGroup(GrpcGetPostfachConfigResponseTestFactory.create()); - - assertThat(postfachConfigGroup.isConfigured()).isEqualTo(GrpcGetPostfachConfigResponseTestFactory.CONFIGURED); - } - - @Test - void shouldMapPostfachConfigs() { - var expectedPostfachConfig = PostfachConfigTestFactory.create(); - doReturn(expectedPostfachConfig).when(mapper).toPostfachConfig(GrpcPostfachTestFactory.create()); - - var postfachConfigGroup = mapper.toPostfachConfigGroup(GrpcGetPostfachConfigResponseTestFactory.create()); - - assertThat(postfachConfigGroup.getPostfachConfigs()).containsOnly(expectedPostfachConfig); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigTestFactory.java deleted file mode 100644 index a4bc5d0a06fa6dde08011d0045c3f1a1c28171a5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachConfigTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -public class PostfachConfigTestFactory { - - public static final String TYPE = "OSI"; - - public static PostfachConfig create() { - return createBuilder().build(); - } - - public static PostfachConfig.PostfachConfigBuilder createBuilder() { - return PostfachConfig.builder() - .replyAllowed(true) - .type(TYPE); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailCommandByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailCommandByVorgangControllerTest.java deleted file mode 100644 index 8e7af344c051d7cd53b48f6cf5eabf0fc8b7c575..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailCommandByVorgangControllerTest.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.hamcrest.core.StringContains; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandByVorgangController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class PostfachMailCommandByVorgangControllerTest { - - @Spy - @InjectMocks // NOSONAR - private PostfachMailCommandByVorgangController controller; - @Mock - private PostfachMailService service; - @Mock - private PostfachNachrichtHelper helper; - @Mock - private VorgangController vorgangController; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("Create command") - @Nested - class TestCreateCommand { - - @Captor - private ArgumentCaptor<CreateCommand> createCommandCaptor; - @Captor - private ArgumentCaptor<Long> relationVersionCaptor; - - @BeforeEach - void mockVorgangController() { - when(vorgangController.getVorgang(anyString())).thenReturn(VorgangWithEingangTestFactory.create()); - when(service.sendPostfachMail(any(), anyLong())).thenReturn(CommandTestFactory.create()); - when(helper.addPostfachAddressToBody(any(), any())).thenReturn(PostfachMailTestFactory.create()); - } - - @Test - void shouldSetVorgangId() { - doRequest(); - - assertThat(createCommandCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldSetRelationId() { - doRequest(); - - assertThat(createCommandCaptor.getValue().getRelationId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallVorgangController() { - doRequest(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallHelper() { - doRequest(); - - verify(helper).addPostfachAddressToBody(any(), any()); - } - - @Test - void shouldAddPostfachAddress() { - doRequest(); - - assertThat(getCommandBody().getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.createAsMap()); - } - - @Test - void shouldCallService() { - doRequest(); - - verify(service).sendPostfachMail(any(CreateCommand.class), eq(VorgangHeaderTestFactory.VERSION)); - } - - @Test - void shouldProceedWithEmptyAttachments() { - when(helper.addPostfachAddressToBody(any(), any())).thenReturn(PostfachMailTestFactory.createBuilder().clearAttachments().build()); - - doRequest(PostfachMailTestFactory.createBuilder().clearAttachments().build()); - - assertThat(getCommandBody().getAttachments()).isEmpty(); - } - - private PostfachMail getCommandBody() { - return (PostfachMail) createCommandCaptor.getValue().getBody(); - } - - @SneakyThrows - @Test - void shouldReturnLocationHeader() { - var response = doRequest(); - - response.andExpect( - header().string("Location", StringContains.containsString(CommandController.COMMANDS_PATH + "/" + CommandTestFactory.ID))); - } - - private ResultActions doRequest() { - return doRequest(PostfachMailTestFactory.create()); - } - - @SneakyThrows - private ResultActions doRequest(PostfachMail postfachMail) { - var response = mockMvc.perform(post(PostfachMailCommandByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID)) - .contentType(MediaType.APPLICATION_JSON) - .content(PostfachMailTestFactory.buildSendPostfachMailContent(postfachMail))) - .andExpect(status().isCreated()); - - verify(service).sendPostfachMail(createCommandCaptor.capture(), relationVersionCaptor.capture()); - - return response; - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailCommandControllerTest.java deleted file mode 100644 index e752de1e0e15af1b4eb5712cec658c28b6f5cf78..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailCommandControllerTest.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class PostfachMailCommandControllerTest { - - @InjectMocks - private PostfachMailCommandController controller; - @Mock - private PostfachMailService service; - @Mock - private PostfachNachrichtHelper helper; - - @Mock - private CommandByRelationController commandByRelationController; - - @Mock - private VorgangController vorgangController; - - private MockMvc mockMvc; - - @BeforeEach - void initMockMvc() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("Create command") - @Nested - class TestCreateCommand { - - @BeforeEach - void init() { - when(service.findById(any())).thenReturn(PostfachMailTestFactory.create()); - when(commandByRelationController.createCommand(any())) - .thenAnswer((i) -> CommandTestFactory.createBuilder().order(((CreateCommand) i.getArgument(0)).getOrder()).build()); - } - - @Test - void shouldFindPostfachMail() { - doRequest(CommandOrder.SEND_POSTFACH_NACHRICHT); - - verify(service).findById(PostfachMailTestFactory.NACHRICHT_ID); - } - - @Test - void shouldReturnResponse() throws Exception { - doRequest(CommandOrder.SEND_POSTFACH_NACHRICHT).andExpect(status().isCreated()); - } - - @DisplayName("on RESEND_POSTFACH_MAIL order") - @Nested - class TestOnResendPostfachMailOrder { - - @Test - void shouldCallServiceResend() { - doRequest(CommandOrder.RESEND_POSTFACH_MAIL); - - verify(service).resendPostfachMail(CommandTestFactory.ID, PostfachMailTestFactory.ID); - } - - @Test - void shouldCallCommandByRelationController() { - doRequest(CommandOrder.RESEND_POSTFACH_MAIL); - - verify(commandByRelationController).createCommand(any()); - } - } - - @DisplayName("on SEND_POSTFACH_NACHRICHT order") - @Nested - class TestOnSendPostfachNachrichtOrder { - - @Captor - private ArgumentCaptor<CreateCommand> createCommandCaptor; - - @BeforeEach - void mockHelper() { - when(helper.addPostfachAddressToBody(any(), any())) - .thenReturn(PostfachMailTestFactory.create()); - when(vorgangController.getVorgang(anyString())).thenReturn(VorgangWithEingangTestFactory.create()); - } - - @Test - void shouldCallVorgangController() { - doRequest(CommandOrder.SEND_POSTFACH_NACHRICHT); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallHelperToAddPostfachAddress() { - doRequest(CommandOrder.SEND_POSTFACH_NACHRICHT); - - verify(helper).addPostfachAddressToBody(any(PostfachMail.class), any(VorgangWithEingang.class)); - } - - @Test - void shouldCallCommandByRelationController() { - doRequest(CommandOrder.SEND_POSTFACH_NACHRICHT); - - verify(commandByRelationController).createCommand(createCommandCaptor.capture()); - assertThat(((PostfachMail) createCommandCaptor.getValue().getBody()).getPostfachAddress()) - .isEqualTo(PostfachAddressTestFactory.createAsMap()); - } - } - - @SneakyThrows - private ResultActions doRequest(CommandOrder order) { - return mockMvc.perform(post("/api/postfachMails/" + PostfachMailTestFactory.ID + "/commands") - .contentType(MediaType.APPLICATION_JSON) - .content(CommandTestFactory.buildCreateCommandWithBodyContent(order, "{}"))); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailControllerTest.java deleted file mode 100644 index 91485fac6d9d03335812b10f5fd1e47ae9530eed..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailControllerTest.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.io.IOException; -import java.io.OutputStream; -import java.time.LocalDate; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class PostfachMailControllerTest { - - @Spy - @InjectMocks // NOSONAR - private PostfachMailController controller; - - @Mock - private PostfachMailService postfachMailService; - - @Mock - private PostfachSettingsService postfachSettingsService; - - @Mock - private PostfachMailModelAssembler assembler; - - @Mock - private VorgangController vorgangController; - @Mock - private BinaryFileController binaryFileController; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("Get all") - @Nested - class TestGetAll { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final Stream<PostfachMail> postfachMails = Stream.of(PostfachMailTestFactory.create()); - private final Stream<PostfachMail> sortedPostfachMails = Stream.of(PostfachMailTestFactory.create()); - private final PostfachSettings postfachSettings = PostfachSettingsTestFactory.create(); - - @BeforeEach - void mockVorgangController() { - when(vorgangController.getVorgang(anyString())).thenReturn(vorgang); - when(postfachMailService.getAll(VorgangHeaderTestFactory.ID)).thenReturn(postfachMails); - doReturn(sortedPostfachMails).when(controller).sort(postfachMails); - when(postfachSettingsService.getPostfachSettings(vorgang)).thenReturn(postfachSettings); - } - - @Test - void shouldCallService() { - doRequest(); - - verify(postfachMailService).getAll(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallVorgangController() { - doRequest(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldGetPostfachSettings() { - doRequest(); - - verify(postfachSettingsService).getPostfachSettings(vorgang); - } - - @Test - void shouldCallModelAssembler() { - doRequest(); - - verify(assembler).toCollectionModel(sortedPostfachMails, vorgang, postfachSettings); - } - - @Test - void shouldSortPostfachMails() { - doRequest(); - - verify(controller).sort(postfachMails); - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PostfachMailController.PATH + "?" + PostfachMailController.PARAM_VORGANG_ID + "=" + VorgangHeaderTestFactory.ID)) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all as pdf") - @Nested - class TestGetAllAsPdf { - - @Mock - private StreamingResponseBody streamingBody; - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void mockService() { - when(vorgangController.getVorgang(anyString())).thenReturn(vorgang); - } - - @Test - void shouldGetVorgang() { - doRequest(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Disabled("FIXME: Kippt um, wenn man alles Tests ausfuehrt") - @Test - void shouldCallService() { - doRequest(); - - verify(postfachMailService).getAllAsPdf(eq(vorgang), any(OutputStream.class)); - } - - @Test - void shouldBuildResponseEntity() { - doReturn(streamingBody).when(controller).createDownloadStreamingBody(vorgang); - - doRequest(); - - verify(controller).buildResponseEntity(vorgang, streamingBody); - } - - @SneakyThrows - @Test - void shouldReturnResponse() { - doReturn(streamingBody).when(controller).createDownloadStreamingBody(vorgang); - - doRequest() - .andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, buildPdfName())) - .andExpect(content().contentType(MediaType.APPLICATION_PDF)); - } - - private String buildPdfName() { - var today = LocalDate.now(); - var expectedDateFormat = String.valueOf(today.getYear()) + buildMonthValue() + buildDayValue(); - return VorgangHeaderTestFactory.NUMMER + "_" + expectedDateFormat + "_Nachrichten.pdf"; - } - - private String buildMonthValue() { - return fillUpToTwoChars(LocalDate.now().getMonthValue()); - } - - private String buildDayValue() { - return fillUpToTwoChars(LocalDate.now().getDayOfMonth()); - } - - private String fillUpToTwoChars(int value) { - var asStr = String.valueOf(value); - if (asStr.length() == 1) { - return "0" + asStr; - } - return asStr; - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc - .perform(get(PostfachMailController.PATH + "?" + PostfachMailController.PARAM_VORGANG_ID + "=" + VorgangHeaderTestFactory.ID) - .accept(MediaType.APPLICATION_PDF_VALUE)) - .andExpect(status().isOk()); - } - - } - - @DisplayName("Create download streamingbody") - @Nested - class TestCreateDownloadStreamingBody { - - @Mock - private OutputStream out; - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldCallServiceGetAllAsPdf() throws IOException { - controller.createDownloadStreamingBody(vorgang).writeTo(out); - - verify(postfachMailService).getAllAsPdf(eq(vorgang), any()); - } - - } - - @DisplayName("Find postfach attachments") - @Nested - class TestFindPostfachAttachments { - - @BeforeEach - void init() { - when(postfachMailService.findById(any())).thenReturn(PostfachMailTestFactory.create()); - } - - @Test - void shouldReturnSuccess() throws Exception { - doRequest().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - doRequest(); - - verify(postfachMailService).findById(PostfachNachrichtId.from(PostfachMailTestFactory.ID)); - } - - @Test - void shouldCallFileController() throws Exception { - doRequest(); - - verify(binaryFileController).getFiles(PostfachMailTestFactory.ATTACHMENTS); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(PostfachMailController.PATH + "/{nachrichtId}/attachments", PostfachMailTestFactory.ID)); - } - - } - - @DisplayName("Is postfach configured") - @Nested - class TestIsPostfachConfigured { - - @Test - void shouldCallService() { - controller.isPostfachConfigured(); - - verify(postfachSettingsService).isPostfachConfigured(); - } - - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailITCase.java deleted file mode 100644 index 9a5696eaaad8e2ae20bc70be7654eee17ed098bc..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailITCase.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.alfa.CallScope; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub; - -@SpringBootTest -public class PostfachMailITCase { - - @Autowired - private PostfachMailController controller; - - @SpyBean - private PostfachMailRemoteService postfachRemoteService; - @Mock - private PostfachServiceBlockingStub serviceStub; - @MockBean - private VorgangController vorgangController; - - @SpyBean - private CurrentUserService userService; - - @Autowired - private CallScope callScope; - - @BeforeEach - void initTest() { - ReflectionTestUtils.setField(postfachRemoteService, "serviceStub", serviceStub); - - callScope.startScope(); - } - - @Nested - @WithMockUser - class TestGetAll { - - @BeforeEach - void mock() { - when(serviceStub.findPostfachMails(any())).thenReturn(GrpcPostfachMailTestFactory.createFindPostfachMailsResponse()); - when(serviceStub.getPostfachConfig(any())).thenReturn(GrpcGetPostfachConfigResponseTestFactory.create()); - when(vorgangController.getVorgang(anyString())).thenReturn( - VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()).build()); - - doReturn(UserProfileTestFactory.ID).when(userService).getUserId(); - } - - @Test - void shouldProceedWithoutAntragsteller() { - controller.getAll(VorgangHeaderTestFactory.ID); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - verify(postfachRemoteService).findPostfachMails(VorgangHeaderTestFactory.ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailMapperTest.java deleted file mode 100644 index e13783b324ca4829cde86ad74d9e0f06988442ec..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailMapperTest.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -import org.apache.commons.collections.MapUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.TimeMapper; -import de.ozgcloud.alfa.common.user.UserIdMapper; - -@DisplayName("PostfachMail mapper") -class PostfachMailMapperTest { - - @InjectMocks // NOSONAR - private final PostfachMailMapper mapper = Mappers.getMapper(PostfachMailMapper.class); - @Spy - private final UserIdMapper userIdMapper = Mappers.getMapper(UserIdMapper.class); - - @Mock - private TimeMapper timeMapper; - - @DisplayName("to postfachMail") - @Nested - class TestToPostfachMail { - - @BeforeEach - void initMock() { - when(timeMapper.parseString(PostfachMailTestFactory.CREATED_AT_STR)).thenReturn(PostfachMailTestFactory.CREATED_AT); - when(timeMapper.parseString(PostfachMailTestFactory.SENT_AT_STR)).thenReturn(PostfachMailTestFactory.SENT_AT); - } - - @Test - void shouldMapFields() { - var postfachMail = toPostfachMail(); - - verify(timeMapper, times(2)).parseString(anyString()); - assertThat(postfachMail).isNotNull().usingRecursiveComparison().ignoringFields("postfachAddress") - .isEqualTo(PostfachMailTestFactory.create()); - } - - @Test - void shouldNotMapPostfachAddress() { - var postfachMail = toPostfachMail(); - - assertThat(postfachMail.getPostfachAddress()).isNull(); - } - - private PostfachMail toPostfachMail() { - return mapper.toPostfachMail(GrpcPostfachMailTestFactory.create()); - } - } - - @DisplayName("Map postfachAddress to map") - @Nested - class TestMapPostfachAddressToMap { - - @Test - void shouldContainsType() { - var postfachAddressMap = mapper.mapPostfachAddressToMap(PostfachAddressTestFactory.create()); - - assertThat(postfachAddressMap).containsEntry(PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE); - } - - @Test - void shouldContainsVersion() { - var postfachAddressMap = mapper.mapPostfachAddressToMap(PostfachAddressTestFactory.create()); - - assertThat(postfachAddressMap).containsEntry(PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION); - } - - @DisplayName("identifier") - @Nested - class TestIdentifier { - - @SuppressWarnings("unchecked") - @Test - void schouldContainsPostfachId() { - var postfachAddressMap = mapper.mapPostfachAddressToMap(PostfachAddressTestFactory.create()); - - var identifier = MapUtils.getMap(postfachAddressMap, PostfachAddress.IDENTIFIER_FIELD); - assertThat(identifier).containsExactly( - Map.entry(PostfachAddress.IDENTIFIER_POSTFACH_ID_FIELD, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID)); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java deleted file mode 100644 index 5c8e2874053681408887e2b97e6157456e3c714c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java +++ /dev/null @@ -1,510 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.UUID; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.RepresentationModel; -import org.springframework.hateoas.mediatype.hal.HalModelBuilder; -import org.springframework.web.util.UriComponentsBuilder; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandByVorgangController; -import de.ozgcloud.alfa.vorgang.ServiceKontoTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeadTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -class PostfachMailModelAssemblerTest { - - @InjectMocks - @Spy - private PostfachMailModelAssembler modelAssembler; - @Mock - private UserManagerUrlProvider userManagerUrlProvider; - @Mock - private VorgangController vorgangController; - - @Nested - class TestToModel { - - @BeforeEach - void mock() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(false); - } - - @Test - void shouldHaveSelfLink() { - var link = modelAssembler.toModel(PostfachMailTestFactory.create()).getLink(IanaLinkRelations.SELF_VALUE); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(PostfachMailController.PATH + "/" + PostfachMailTestFactory.ID); - } - - @Nested - class ResendLink { - - @DisplayName("if 'sentSuccessful' is false, add link") - @Test - void shouldBePresent() { - var link = modelAssembler.toModel(PostfachMailTestFactory.createBuilder().sentSuccessful(false).build()) - .getLink(PostfachMailModelAssembler.REL_RESEND_POSTFACH_MAIL); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/postfachMails/" + PostfachMailTestFactory.ID + "/commands"); - } - - @DisplayName("if 'sentSuccessful' is true, hide link") - @Test - void shouldNotBePresentIfSuccessfulSent() { - var link = modelAssembler.toModel(PostfachMailTestFactory.createBuilder().sentSuccessful(true).build()) - .getLink(PostfachMailModelAssembler.REL_RESEND_POSTFACH_MAIL); - - assertThat(link).isNotPresent(); - } - - @Test - void shouldNotBePresentIfNotYetTriedToSend() { - var nachricht = PostfachMailTestFactory.createBuilder().sentSuccessful(false).sentAt(null).build(); - - var link = modelAssembler.toModel(nachricht).getLink(PostfachMailModelAssembler.REL_RESEND_POSTFACH_MAIL); - - assertThat(link).isNotPresent(); - } - - } - - @Nested - class SendLink { - - @DisplayName("should be present if nachricht not jet tried to send") - @Test - void shouldBePresent() { - var nachricht = PostfachMailTestFactory.createBuilder().sentSuccessful(false).sentAt(null).build(); - - var link = modelAssembler.toModel(nachricht).getLink(PostfachMailModelAssembler.REL_SEND); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/postfachMails/" + PostfachMailTestFactory.ID + "/commands"); - } - - @Test - void shouldNotBePresentIfNachrichtSent() { - var nachricht = PostfachMailTestFactory.createBuilder().sentSuccessful(true).build(); - - assertThat(modelAssembler.toModel(nachricht).getLink(PostfachMailModelAssembler.REL_SEND)).isNotPresent(); - } - - } - - @Nested - class AttachmentsLink { - - @Test - @DisplayName("should be present if attachments present") - void shouldBePresent() { - var link = modelAssembler.toModel(PostfachMailTestFactory.create()).getLink(PostfachMailModelAssembler.REL_ATTACHMENTS); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/postfachMails/" + PostfachMailTestFactory.ID + "/attachments"); - } - - @Test - @DisplayName("should NOT be present if there are no attachments") - void shouldNotBePresentOnNoAttachments() { - var link = modelAssembler.toModel(PostfachMailTestFactory.createBuilder().clearAttachments().build()) - .getLink(PostfachMailModelAssembler.REL_ATTACHMENTS); - - assertThat(link).isNotPresent(); - } - } - - @DisplayName("created by link") - @Nested - class CreatedByLink { - - @Nested - class TestOnConfiguredUserManager { - - private final String userProfileTemplate = "UserProfileTemplateDummy/%s"; - - @BeforeEach - void mock() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(true); - } - - @Test - void shouldBePresent() { - when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(userProfileTemplate); - - var link = modelAssembler.toModel(PostfachMailTestFactory.create()).getLink(PostfachMailModelAssembler.REL_CREATED_BY); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("UserProfileTemplateDummy/" + PostfachMailTestFactory.CREATED_BY); - } - - @DisplayName("should not be present if the value of createdBy starts with 'system'") - @Test - void shouldNotBePresentOnSystemUser() { - var link = modelAssembler - .toModel(PostfachMailTestFactory.createBuilder() - .createdBy(UserId.from(PostfachMailModelAssembler.SYSTEM_USER_IDENTIFIER + UUID.randomUUID().toString())).build()) - .getLink(PostfachMailModelAssembler.REL_CREATED_BY); - - assertThat(link).isNotPresent(); - } - - @Test - void shouldNotBePresentOnNull() { - var link = modelAssembler.toModel(PostfachMailTestFactory.createBuilder().createdBy(null).build()) - .getLink(PostfachMailModelAssembler.REL_CREATED_BY); - - assertThat(link).isNotPresent(); - } - } - - @Nested - class TestOnNonConfiguredUserManager { - - @BeforeEach - void mock() { - when(userManagerUrlProvider.isConfiguredForUserProfile()).thenReturn(false); - } - - @Test - void shouldNOTBePresentOnNotConfiguredUserManager() { - var link = modelAssembler - .toModel(PostfachMailTestFactory.createBuilder() - .createdBy(UserId.from(PostfachMailModelAssembler.SYSTEM_USER_IDENTIFIER + UUID.randomUUID().toString())).build()) - .getLink(PostfachMailModelAssembler.REL_CREATED_BY); - - assertThat(link).isNotPresent(); - } - - @Test - void shouldNotCallUserManagerUrlProvider() { - modelAssembler - .toModel(PostfachMailTestFactory.createBuilder() - .createdBy(UserId.from(PostfachMailModelAssembler.SYSTEM_USER_IDENTIFIER + UUID.randomUUID().toString())).build()) - .getLink(PostfachMailModelAssembler.REL_CREATED_BY); - - verify(userManagerUrlProvider, never()).getUserProfileTemplate(); - } - - @Test - void shouldNotBePresentOnNull() { - var link = modelAssembler.toModel(PostfachMailTestFactory.createBuilder().createdBy(null).build()) - .getLink(PostfachMailModelAssembler.REL_CREATED_BY); - - assertThat(link).isNotPresent(); - } - } - } - - @DisplayName("edit link") - @Nested - class TestEditLink { - PostfachMail.PostfachMailBuilder UNSENT_MAIL_BUILDER = PostfachMailTestFactory.createBuilder() - .direction(Direction.OUT).sentAt(null).sentSuccessful(false); - - @Test - void shouldBePresentOnUnsendNachricht() { - var postfachNachricht = UNSENT_MAIL_BUILDER.build(); - - var link = modelAssembler.toModel(postfachNachricht).getLink(PostfachMailModelAssembler.REL_EDIT); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/postfachMails/" + PostfachMailTestFactory.ID + "/commands"); - } - - @Nested - class ShouldNotBePresent { - - @Test - void OnIncomingNachricht() { - var postfachNachricht = UNSENT_MAIL_BUILDER.direction(Direction.IN).build(); - - var link = modelAssembler.toModel(postfachNachricht).getLink(PostfachMailModelAssembler.REL_EDIT); - - assertThat(link).isNotPresent(); - } - - @Test - void OnSentNachricht() { - var postfachNachricht = UNSENT_MAIL_BUILDER.sentSuccessful(true).build(); - - var link = modelAssembler.toModel(postfachNachricht).getLink(PostfachMailModelAssembler.REL_EDIT); - - assertThat(link).isNotPresent(); - } - } - } - } - - @Nested - class TestToCollectionModel { - - private final Stream<PostfachMail> mails = Stream.of(PostfachMailTestFactory.create()); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final PostfachSettings postfachSettings = PostfachSettingsTestFactory.create(); - - @Mock - private RepresentationModel<EntityModel<PostfachSettings>> model; - - @BeforeEach - void setUpMocks() { - doReturn(model).when(modelAssembler).buildHalRepresentationModel(mails, vorgang, postfachSettings); - } - - @Test - void shouldBuildHalRepresentationModel() { - callModelAssembler(); - - verify(modelAssembler).buildHalRepresentationModel(mails, vorgang, postfachSettings); - } - - @Nested - class OnHasServiceKonto { - - @Test - void shouldAddPostfachNachrichtLinks() { - doReturn(true).when(modelAssembler).hasServiceKonto(vorgang); - - callModelAssembler(); - - verify(modelAssembler).addPostfachNachrichtLinks(model, vorgang); - } - } - - @Nested - class OnHasNotServiceKonto { - - @Test - void shouldAddPostfachNachrichtLinks() { - doReturn(false).when(modelAssembler).hasServiceKonto(vorgang); - - callModelAssembler(); - - verify(modelAssembler, never()).addPostfachNachrichtLinks(any(), any()); - } - } - - @Test - void shouldReturnModel() { - var returnedModel = callModelAssembler(); - - assertThat(returnedModel).isEqualTo(model); - } - - private RepresentationModel<EntityModel<PostfachSettings>> callModelAssembler() { - return modelAssembler.toCollectionModel(mails, vorgang, postfachSettings); - } - } - - @Nested - class TestBuildHalRepresentationModel { - - private final PostfachMail postfachMail = PostfachMailTestFactory.create(); - private final Stream<PostfachMail> mails = Stream.of(postfachMail); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final PostfachSettings postfachSettings = PostfachSettingsTestFactory.create(); - - @Test - void shouldHavePostfachAsContent() { - var model = (EntityModel<PostfachSettings>) callModelAssembler(); - - assertThat(model.getContent()).isEqualTo(postfachSettings); - } - - @Test - void shouldAddSelfLink() { - var model = callModelAssembler(); - var selfLink = model.getLink(IanaLinkRelations.SELF_VALUE); - - assertThat(selfLink).get().extracting(Link::getHref).isEqualTo( - String.format("%s?%s=%s", PostfachMailController.PATH, PostfachMailController.PARAM_VORGANG_ID, VorgangHeaderTestFactory.ID)); - } - - @Test - void shouldCallToModel() { - callModelAssembler(); - - verify(modelAssembler).toModel(postfachMail); - } - - @Test - @SneakyThrows - void shouldContainPostfachMails() { - var objectMapper = new ObjectMapper().registerModules(new JavaTimeModule(), new Jdk8Module()); - doReturn(EntityModel.of(postfachMail)).when(modelAssembler).toModel(postfachMail); - - var model = callModelAssembler(); - - assertThat(objectMapper.writeValueAsString(model)).contains(objectMapper.writeValueAsString(EntityModel.of(postfachMail))); - } - - private RepresentationModel<EntityModel<PostfachSettings>> callModelAssembler() { - return modelAssembler.buildHalRepresentationModel(mails, vorgang, postfachSettings); - } - - } - - @Nested - class TestHasServiceKonto { - - @Test - void shouldReturnTrueIfServicekontoIsPresent() { - var hasServiceKonto = modelAssembler.hasServiceKonto(VorgangWithEingangTestFactory.createBuilder() - .header(VorgangHeadTestFactory.createBuilder().serviceKonto(ServiceKontoTestFactory.create()).build()).build()); - - assertThat(hasServiceKonto).isTrue(); - } - - @Test - void shouldReturnFalseIfServicekontoIsNotPresent() { - var hasServiceKonto = modelAssembler.hasServiceKonto(VorgangWithEingangTestFactory.createBuilder() - .header(VorgangHeadTestFactory.createBuilder().serviceKonto(null).build()).build()); - - assertThat(hasServiceKonto).isFalse(); - } - - @Test - void shouldReturnFalseOnMissingVorgangHeader() { - var hasServiceKonto = modelAssembler.hasServiceKonto(VorgangWithEingangTestFactory.createBuilder() - .header(null).build()); - - assertThat(hasServiceKonto).isFalse(); - } - } - - @Nested - class TestAddPostfachNachrichtLinks { - - private final PostfachSettings postfach = PostfachSettingsTestFactory.create(); - - private RepresentationModel<EntityModel<PostfachSettings>> model = HalModelBuilder - .halModelOf(postfach) - .build(); - - @Nested - class ResetNewPostfachNachrichtLink { - @Test - void shouldBePresent() { - callModelAssembler(VorgangWithEingangTestFactory.create()); - - var link = model.getLink(PostfachMailModelAssembler.REL_RESET_NEW_POSTFACH_MAIL); - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo(UriComponentsBuilder.fromUriString("/api/vorgangs") - .pathSegment(VorgangHeaderTestFactory.ID, "hasNewPostfachNachricht") - .build().toString()); - } - - @Test - void shouldNotBePresent() { - callModelAssembler(VorgangWithEingangTestFactory.createBuilder().hasNewPostfachNachricht(false).build()); - - var link = model.getLink(PostfachMailModelAssembler.REL_RESET_NEW_POSTFACH_MAIL); - assertThat(link).isNotPresent(); - } - } - - @DisplayName("send postfach mail") - @Nested - class SendPostfachMailLink { - - private final String sendPostfachMailLinkRel = PostfachMailModelAssembler.REL_SEND_POSTFACH_MAIL; - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldCheckIfVorgangIsEditable() { - callModelAssembler(vorgang); - - verify(vorgangController).isEditable(vorgang); - } - - @Test - void shouldExist() { - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - callModelAssembler(vorgang); - - var link = model.getLink(sendPostfachMailLinkRel); - assertThat(link).get().extracting(Link::getHref) - .isEqualTo(PostfachMailCommandByVorgangController.PATH.replace("{vorgangId}", VorgangHeaderTestFactory.ID)); - } - - @Test - void shouldNotExistWhenVorgangIsNotEditable() { - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - callModelAssembler(vorgang); - - var link = model.getLink(sendPostfachMailLinkRel); - assertThat(link).isEmpty(); - } - } - - @Nested - class UploadAttachmentLink { - - private final String uploadAttachmentLinkRel = PostfachMailModelAssembler.REL_UPLOAD_ATTACHMENT; - - @Test - void shouldBePresent() { - callModelAssembler(VorgangWithEingangTestFactory.create()); - - var link = model.getLink(uploadAttachmentLinkRel); - assertThat(link).get().extracting(Link::getHref) - .isEqualTo(String.format("/api/binaryFiles/%s/postfachNachrichtAttachment/file", VorgangHeaderTestFactory.ID)); - } - } - - private void callModelAssembler(VorgangWithEingang vorgang) { - modelAssembler.addPostfachNachrichtLinks(model, vorgang); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailRemoteServiceTest.java deleted file mode 100644 index bf3d47a957df2b3e7b8f29353058f1c000c7c308..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailRemoteServiceTest.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailRequest; -import de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsRequest; -import de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigRequest; -import de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigResponse; -import de.ozgcloud.nachrichten.postfach.GrpcPostfachMail; -import de.ozgcloud.nachrichten.postfach.GrpcResendPostfachMailRequest; -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; - -class PostfachMailRemoteServiceTest { - - @InjectMocks // NOSONAR - private PostfachMailRemoteService service; - @Mock - private PostfachServiceBlockingStub serviceStub; - @Mock - private PostfachMailMapper postfachNachrichtMapper; - @Mock - private PostfachConfigMapper postfachConfigMapper; - @Mock - private ContextService contextService; - - private GrpcCallContext callContext = GrpcCallContext.newBuilder().build(); - - @Nested - class TestFindPostfachMail { - - @Captor - private ArgumentCaptor<GrpcFindPostfachMailRequest> requestCaptor; - - @BeforeEach - void init() { - when(contextService.createCallContext()).thenReturn(callContext); - when(serviceStub.findPostfachMail(any())).thenReturn(GrpcPostfachMailTestFactory.createFindPostfachMailResponse()); - } - - @Test - void shouldCallStub() { - service.findById(PostfachMailTestFactory.NACHRICHT_ID); - - verify(serviceStub).findPostfachMail(any(GrpcFindPostfachMailRequest.class)); - } - - @Test - void shouldCallCallContextService() { - service.findById(PostfachMailTestFactory.NACHRICHT_ID); - - verify(contextService).createCallContext(); - } - - @Test - void shouldContainNachrichtId() { - service.findById(PostfachMailTestFactory.NACHRICHT_ID); - - verify(serviceStub).findPostfachMail(requestCaptor.capture()); - - assertThat(requestCaptor.getValue().getNachrichtId()).isEqualTo(PostfachMailTestFactory.ID); - } - - @Test - void shouldCallMapper() { - service.findById(PostfachMailTestFactory.NACHRICHT_ID); - - verify(postfachNachrichtMapper).toPostfachMail(any()); - } - } - - @Nested - class TestFindPostfachMails { - - @BeforeEach - void init() { - when(contextService.createCallContext()).thenReturn(callContext); - when(serviceStub.findPostfachMails(any())).thenReturn(GrpcPostfachMailTestFactory.createFindPostfachMailsResponse()); - } - - @Test - void shouldCallStub() { - service.findPostfachMails(VorgangHeaderTestFactory.ID); - - verify(serviceStub).findPostfachMails(any(GrpcFindPostfachMailsRequest.class)); - } - - @Test - void shouldCallCallContextService() { - service.findPostfachMails(VorgangHeaderTestFactory.ID); - - verify(contextService).createCallContext(); - } - - @Test - void shouldCallMapper() { - var result = service.findPostfachMails(VorgangHeaderTestFactory.ID); - collectStreamElementsToTriggerLazyStream(result); - - verify(postfachNachrichtMapper).toPostfachMail(any(GrpcPostfachMail.class)); - } - - void collectStreamElementsToTriggerLazyStream(Stream<PostfachMail> stream) { - stream.collect(Collectors.toList()); - } - } - - @Nested - class TestResendPostfachMail { - - @BeforeEach - void init() { - when(contextService.createCallContext()).thenReturn(callContext); - } - - @Test - void shouldCallStub() { - service.resendPostfachMail(CommandTestFactory.ID, PostfachMailTestFactory.ID); - - verify(serviceStub).resendPostfachMail(any(GrpcResendPostfachMailRequest.class)); - } - - @Test - void shouldCallContextService() { - service.resendPostfachMail(CommandTestFactory.ID, PostfachMailTestFactory.ID); - - verify(contextService).createCallContext(); - } - } - - @Nested - class TestGetPostfachConfig { - - private final GrpcGetPostfachConfigResponse grpcResponse = GrpcGetPostfachConfigResponseTestFactory.create(); - private final PostfachConfigGroup postfachConfigGroup = PostfachConfigGroupTestFactory.create(); - - @BeforeEach - void mockStub() { - when(serviceStub.getPostfachConfig(any(GrpcGetPostfachConfigRequest.class))).thenReturn(grpcResponse); - when(postfachConfigMapper.toPostfachConfigGroup(any(GrpcGetPostfachConfigResponse.class))).thenReturn(postfachConfigGroup); - } - - @Test - void shouldCallServiceStub() { - service.getPostfachConfig(); - - verify(serviceStub).getPostfachConfig(any(GrpcGetPostfachConfigRequest.class)); - } - - @Test - void shouldCallMapper() { - service.getPostfachConfig(); - - verify(postfachConfigMapper).toPostfachConfigGroup(grpcResponse); - } - - @Test - void shouldReturnPostfachConfigs() { - var result = service.getPostfachConfig(); - - assertThat(result).isEqualTo(postfachConfigGroup); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailServiceTest.java deleted file mode 100644 index 2f0931b3f1f850b5ce3744d82328a8456ac1d282..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailServiceTest.java +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.OutputStream; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfile; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class PostfachMailServiceTest { - - @Spy - @InjectMocks // NOSONAR - private PostfachMailService service; - @Mock - private PostfachNachrichtPdfService pdfService; - @Mock - private PostfachMailRemoteService remoteService; - @Mock - private BinaryFileService fileService; - @Mock - private UserService userService; - @Mock - private CommandService commandService; - - @DisplayName("Get all") - @Nested - class TestGetAll { - - @Test - void shouldCallRemoteService() { - service.getAll(VorgangHeaderTestFactory.ID); - - verify(remoteService).findPostfachMails(VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Find by id") - @Nested - class TestFindById { - - private final PostfachMail mail = PostfachMailTestFactory.create(); - - @BeforeEach - void init() { - when(remoteService.findById(any())).thenReturn(Optional.of(mail)); - } - - @Test - void shouldCallRemoteService() { - service.findById(PostfachMailTestFactory.NACHRICHT_ID); - - verify(remoteService).findById(PostfachMailTestFactory.NACHRICHT_ID); - } - - @Test - void shouldThrowExceptionIfNotFound() { - when(remoteService.findById(any())).thenReturn(Optional.empty()); - - assertThrows(ResourceNotFoundException.class, () -> service.findById(PostfachMailTestFactory.NACHRICHT_ID)); - } - - @Test - void shouldReturnNachricht() { - var result = service.findById(PostfachMailTestFactory.NACHRICHT_ID); - - assertThat(result).isSameAs(mail); - } - } - - @DisplayName("Send postfach mail") - @Nested - class TestSendPostfachMail { - - private static final CreateCommand CREATE_COMMAND = CommandTestFactory.createCreateCommand(); - - @Test - void shouldCallCommandService() { - service.sendPostfachMail(CREATE_COMMAND, VorgangHeaderTestFactory.VERSION); - - verify(commandService).createCommand(CREATE_COMMAND, VorgangHeaderTestFactory.VERSION); - } - } - - @DisplayName("Resend postfach mail") - @Nested - class TestResendPostfachMail { - - @Test - void shouldCallRemoteService() { - service.resendPostfachMail(CommandTestFactory.ID, PostfachMailTestFactory.ID); - - verify(remoteService).resendPostfachMail(CommandTestFactory.ID, PostfachMailTestFactory.ID); - } - } - - @DisplayName("Get all as pdf") - @Nested - class TestGetAllAsPdf { - - @Mock - private OutputStream outputStream; - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - private final Stream<PostfachNachrichtPdfData> postfachNachrichtPdfModelDataList = Stream - .of(PostfachNachrichtPdfData.builder().build());// TODO TestFactory erstellen - - @DisplayName("should call") - @Nested - class TestCall { - - @BeforeEach - void mock() { - doReturn(postfachNachrichtPdfModelDataList).when(service).buildPostfachNachrichtPdfDataList(anyString()); - } - - @Test - void buildPostfachNachrichtPdfModelDataList() { - service.getAllAsPdf(vorgang, outputStream); - - verify(service).buildPostfachNachrichtPdfDataList(VorgangHeaderTestFactory.ID); - } - - @Test - void pdfService() { - service.getAllAsPdf(vorgang, outputStream); - - verify(pdfService).getAllAsPdf(vorgang, postfachNachrichtPdfModelDataList, outputStream); - } - } - - @DisplayName("build postfach nachrichten pdf data") - @Nested - class TestBuildPostfachNachrichtPdfDataList { - - private final PostfachMail postfachNachricht = PostfachMailTestFactory.create(); - - @DisplayName("should call") - @Nested - class TestCall { - - private final Stream<PostfachMail> postfachMail = Stream.of(postfachNachricht); - private final Stream<OzgFile> ozgFiles = Stream.of(OzgFileTestFactory.create()); - - @BeforeEach - void mock() { - when(remoteService.findPostfachMails(anyString())).thenReturn(postfachMail); - when(fileService.getFiles(anyList())).thenReturn(ozgFiles); - } - - @Test - void shouldCallRemoteService() { - service.buildPostfachNachrichtPdfDataList(VorgangHeaderTestFactory.ID); - - verify(remoteService).findPostfachMails(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallBinaryFileService() { - service.buildPostfachNachrichtPdfDataList(VorgangHeaderTestFactory.ID); - - verify(fileService).getFiles(List.of(BinaryFileTestFactory.FILE_ID)); - } - - @Test - void shouldCallBuildPostfachNachrichtPdfData() { - doReturn(PostfachNachrichtPdfData.builder().build()).when(service).buildPostfachNachrichtPdfData(any(), any()); - - service.buildPostfachNachrichtPdfDataList(VorgangHeaderTestFactory.ID).toList(); - - verify(service).buildPostfachNachrichtPdfData(postfachNachricht, Map.of(OzgFileTestFactory.ID, OzgFileTestFactory.NAME)); - } - } - - @DisplayName("for single postfachNachricht") - @Nested - class TestBuildPostfachNachrichtPdfData { - - private final UserProfile user = UserProfileTestFactory.create(); - - @BeforeEach - void mock() { - when(userService.getById(any(UserId.class))).thenReturn(user); - } - - @Test - void shouldCallUserService() { - buildPostfachNachrichtPdfData(); - - verify(userService).getById(UserProfileTestFactory.ID); - } - - @Test - void shouldHaveSetCreatedAt() { - var postfachNachricht = buildPostfachNachrichtPdfData(); - - assertThat(postfachNachricht.getCreatedAt()).isEqualTo(PostfachMailTestFactory.CREATED_AT); - } - - @Test - void shouldHaveSetCreatedByName() { - var postfachNachricht = buildPostfachNachrichtPdfData(); - - assertThat(postfachNachricht.getUser()).isEqualTo(user); - } - - @Test - void shouldHaveSetSubject() { - var postfachNachricht = buildPostfachNachrichtPdfData(); - - assertThat(postfachNachricht.getSubject()).isEqualTo(PostfachMailTestFactory.SUBJECT); - } - - @Test - void shouldHaveSetMailBody() { - var postfachNachricht = buildPostfachNachrichtPdfData(); - - assertThat(postfachNachricht.getMailBody()).isEqualTo(PostfachMailTestFactory.MAIL_BODY); - } - - @Test - void shouldHaveSetAttachmentNames() { - var postfachNachricht = buildPostfachNachrichtPdfData(); - - assertThat(postfachNachricht.getAttachmentNames()).isEqualTo(List.of(OzgFileTestFactory.NAME)); - } - } - - @DisplayName("for multiple postfachNachrichten") - @Nested - class TestMultiplePostfachNachrichten { - private final PostfachMail postfachMailRecent = PostfachMailTestFactory.create(); - private final PostfachMail postfachMailOlder = PostfachMailTestFactory.createBuilder() - .createdAt(postfachMailRecent.getCreatedAt().minusYears(1)) - .build(); - private final PostfachNachrichtPdfData expectedPdfDataRecent = PostfachNachrichtPdfDataTestFactory.createBuilder() - .createdAt(postfachMailRecent.getCreatedAt()) - .build(); - private final PostfachNachrichtPdfData expectedPdfDataOlder = PostfachNachrichtPdfDataTestFactory.createBuilder() - .createdAt(postfachMailOlder.getCreatedAt()) - .build(); - private final List<PostfachMail> postfachMails = List.of(postfachMailOlder, postfachMailRecent); - private final Stream<OzgFile> ozgFiles = Stream.of(OzgFileTestFactory.create()); - - @Test - void shouldBeSortedByCreateTime() { - doReturn(Stream.of(postfachMailOlder, postfachMailRecent)).when(service).getAll(VorgangHeaderTestFactory.ID); - doReturn(ozgFiles).when(service).getFiles(postfachMails); - ArgumentMatcher<Map<FileId, String>> ozgFilesMapMatcher = ozgFilesMap -> ozgFilesMap.get(OzgFileTestFactory.ID) - .equals(OzgFileTestFactory.NAME) && ozgFilesMap.size() == 1; - doReturn(expectedPdfDataRecent).when(service).buildPostfachNachrichtPdfData(eq(postfachMailRecent), argThat(ozgFilesMapMatcher)); - doReturn(expectedPdfDataOlder).when(service).buildPostfachNachrichtPdfData(eq(postfachMailOlder), argThat(ozgFilesMapMatcher)); - - var pdfDataList = service.buildPostfachNachrichtPdfDataList(VorgangHeaderTestFactory.ID).toList(); - - assertThat(pdfDataList).containsExactly(expectedPdfDataRecent, expectedPdfDataOlder); - } - } - - @DisplayName("user") - @Nested - class TestUser { - - @DisplayName("exists") - @Nested - class TestOnNonNull { - - private final UserProfile user = UserProfileTestFactory.create(); - - @BeforeEach - void mock() { - when(userService.getById(any(UserId.class))).thenReturn(user); - } - - @Test - void shouldCallUserService() { - buildPostfachNachrichtPdfData(); - - verify(userService).getById(UserProfileTestFactory.ID); - } - - @Test - void shouldHaveSetCreatedByName() { - var postfachNachricht = buildPostfachNachrichtPdfData(); - - assertThat(postfachNachricht.getUser()).isEqualTo(user); - } - } - - @DisplayName("not exists") - @Nested - class TestOnNull { - - private final PostfachMail postfachNachrichtWithoutCreatedBy = PostfachMailTestFactory.createBuilder().createdBy(null) - .build(); - - @Test - void shouldNotCallUserService() { - buildPostfachNachrichtPdfDataWithoutUser(); - - verify(userService, never()).getById(any()); - } - - @Test - void shouldHaveSetNullAsUser() { - var postfachNachricht = buildPostfachNachrichtPdfDataWithoutUser(); - - assertThat(postfachNachricht.getUser()).isNull(); - } - - private PostfachNachrichtPdfData buildPostfachNachrichtPdfDataWithoutUser() { - return service.buildPostfachNachrichtPdfData(postfachNachrichtWithoutCreatedBy, - Map.of(BinaryFileTestFactory.FILE_ID, OzgFileTestFactory.NAME)); - } - } - } - - private PostfachNachrichtPdfData buildPostfachNachrichtPdfData() { - return service.buildPostfachNachrichtPdfData(postfachNachricht, Map.of(BinaryFileTestFactory.FILE_ID, OzgFileTestFactory.NAME)); - } - - } - - @DisplayName("get file ids from all attachments") - @Nested - class TestGetFileIdsFromAllAttachments { - - @Test - void shouldReturnFileIdsFromPostfachMail() { - var fileIds = service.getFileIdsFromAllAttachments(List.of(PostfachMailTestFactory.create())); - - assertThat(fileIds).containsExactly(BinaryFileTestFactory.FILE_ID); - } - - @Test - void shouldReturnEmptyListOnNoAttachments() { - var fileIds = service.getFileIdsFromAllAttachments(List.of(PostfachMailTestFactory.createBuilder().clearAttachments().build())); - - assertThat(fileIds).isEmpty(); - } - } - - @DisplayName("get User") - @Nested - class TestGetUser { - - @DisplayName("on existing client user") - @Nested - class TestOnExistingClientUser { - - @Test - void shouldCallUserServiceOnExistingUser() { - service.getUser(PostfachMailTestFactory.create()); - - verify(userService).getById(UserProfileTestFactory.ID); - } - - @Test - void shouldReturnUserProfileWithId() { - when(userService.getById(any())).thenReturn(UserProfileTestFactory.create()); - - var user = service.getUser(PostfachMailTestFactory.create()); - - assertThat(user.getId()).isEqualTo(UserProfileTestFactory.ID); - } - } - - @DisplayName("on existing system user") - @Nested - class TestOnSystemUser { - - private final PostfachMail postfachMail = PostfachMailTestFactory.createBuilder() - .createdBy(UserId.from(UserProfileTestFactory.SYSTEM_USER)).build(); - - @Test - void shouldNotCallUserService() { - service.getUser(postfachMail); - - verify(userService, never()).getById(UserProfileTestFactory.ID); - } - - @Test - void shouldReturnUserProfileWithId() { - var user = service.getUser(postfachMail); - - assertThat(user.getId()).hasToString(UserProfileTestFactory.SYSTEM_USER); - } - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailTestFactory.java deleted file mode 100644 index ccbf57c3b3792cd99e4b70dbeb4456d8887e3901..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailTestFactory.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.time.ZonedDateTime; -import java.util.List; -import java.util.UUID; - -import org.apache.commons.lang3.RandomStringUtils; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -public class PostfachMailTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final PostfachNachrichtId NACHRICHT_ID = PostfachNachrichtId.from(ID); - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - public static final String CREATED_AT_STR = "2000-01-01T01:00:00Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - public static final UserId CREATED_BY = UserProfileTestFactory.ID; - public static final Direction DIRECTION = Direction.OUT; - public static final String RECEIVER = LoremIpsum.getInstance().getEmail(); - public static final String SUBJECT = RandomStringUtils.randomAlphanumeric(70); - public static final String MAIL_BODY = LoremIpsum.getInstance().getParagraphs(1, 1); - public static final ReplyOption REPLY_OPTION = ReplyOption.POSSIBLE; - static final boolean SENT_SUCCESSFUL = true; - public static final String SENT_AT_STR = "2000-01-01T10:00:00Z"; - public static final ZonedDateTime SENT_AT = ZonedDateTime.parse(SENT_AT_STR); - public static final String MESSAGE_CODE = LoremIpsum.getInstance().getWords(3).concat("."); - - public static final List<FileId> ATTACHMENTS = List.of(BinaryFileTestFactory.FILE_ID); - - public static PostfachMail create() { - return createBuilder().build(); - } - - public static PostfachMail createLikeFromClient() { - return createBuilder() - .createdAt(null) - .createdBy(null) - .direction(null) - .build(); - } - - public static PostfachMail.PostfachMailBuilder createBuilder() { - return PostfachMail.builder() - .id(ID) - .vorgangId(VORGANG_ID) - .postfachAddress(PostfachAddressTestFactory.createAsMap()) - .createdAt(CREATED_AT) - .createdBy(CREATED_BY) - .sentAt(SENT_AT) - .sentSuccessful(SENT_SUCCESSFUL) - .messageCode(MESSAGE_CODE) - .direction(DIRECTION) - .subject(SUBJECT) - .mailBody(MAIL_BODY) - .replyOption(REPLY_OPTION) - .attachments(ATTACHMENTS); - } - - public static String buildSendPostfachMailContent() { - return buildSendPostfachMailContent(create()); - } - - public static String buildSendPostfachMailContent(PostfachMail postfachMail) { - return buildSendPostfachMailContent(postfachMail, CommandOrder.SEND_POSTFACH_NACHRICHT); - } - - public static String buildSendPostfachMailContent(PostfachMail postfachMail, CommandOrder order) { - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithPostfachMail.json.tmpl", order.name(), - postfachMail.getReplyOption().name(), - TestUtils.addQuote(postfachMail.getSubject()), - TestUtils.addQuote(postfachMail.getMailBody()), - buildAttachmentValue(postfachMail)); - } - - private static String buildAttachmentValue(PostfachMail postfachMail) { - if (postfachMail.getAttachments().isEmpty()) { - return "[]"; - } - var fileId = postfachMail.getAttachments().get(0).toString(); - return "[\"api/binaryFiles/" + fileId + "\"]"; - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtComparatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtComparatorTest.java deleted file mode 100644 index 1b067bb6bddd4d10f9c8860b04cfffcad9c55cd4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtComparatorTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; - -import java.time.ZonedDateTime; - -import org.junit.jupiter.api.Test; - -class PostfachNachrichtComparatorTest { - - private PostfachNachrichtComparator comparator = new PostfachNachrichtComparator(); - - @Test - void shouldCompareCreatedAt() { - var shouldBeFirst = buildPostfachMail(ZonedDateTime.parse("2020-02-01T01:00:00Z"), null); - var shouldBeSecond = buildPostfachMail(ZonedDateTime.parse("2020-01-01T01:00:00Z"), null); - - var result = comparator.compare(shouldBeSecond, shouldBeFirst); - - assertThat(result).isEqualTo(-1); - } - - @Test - void shouldCompareCreatedAtWithSentAtNull() { - var shouldBeFirst = buildPostfachMail(ZonedDateTime.parse("2020-02-01T01:00:00Z"), ZonedDateTime.parse("2020-05-01T01:00:00Z")); - var shouldBeSecond = buildPostfachMail(ZonedDateTime.parse("2020-01-01T01:00:00Z"), null); - - var result = comparator.compare(shouldBeSecond, shouldBeFirst); - - assertThat(result).isEqualTo(-1); - } - - @Test - void shouldCompareSentAt() { - var shouldBeFirst = buildPostfachMail(ZonedDateTime.parse("2020-05-01T01:00:00Z"), ZonedDateTime.parse("2020-10-01T01:00:00Z")); - var shouldBeSecond = buildPostfachMail(ZonedDateTime.parse("2020-10-01T01:00:00Z"), ZonedDateTime.parse("2020-05-01T01:00:00Z")); - - var result = comparator.compare(shouldBeSecond, shouldBeFirst); - - assertThat(result).isEqualTo(-1); - } - - @Test - void shouldCompareSentAtWithCreateAtNull() { - var shouldBeFirst = buildPostfachMail(ZonedDateTime.parse("2020-01-01T01:00:00Z"), ZonedDateTime.parse("2020-10-01T01:00:00Z")); - var shouldBeSecond = buildPostfachMail(null, ZonedDateTime.parse("2020-05-01T01:00:00Z")); - - var result = comparator.compare(shouldBeSecond, shouldBeFirst); - - assertThat(result).isEqualTo(-1); - } - - private PostfachMail buildPostfachMail(ZonedDateTime createdAt, ZonedDateTime sentAt) { - return PostfachMailTestFactory.createBuilder().createdAt(createdAt).sentAt(sentAt).build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtHelperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtHelperTest.java deleted file mode 100644 index 5b5f302cae193ddc16ed524632f97760a1bc860e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtHelperTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class PostfachNachrichtHelperTest { - - @InjectMocks - private PostfachNachrichtHelper helper; - @Mock - private PostfachMailMapper mapper; - - @DisplayName("Add postfachAddress to body") - @Nested - class TestAddPostfachAddressToBody { - - private final PostfachMail postfachNachrichtWithoutPostfachAddress = PostfachMailTestFactory.createBuilder().postfachAddress(null).build(); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void mockMapper() { - when(mapper.mapPostfachAddressToMap(any())).thenReturn(PostfachAddressTestFactory.createAsMap()); - } - - @Test - void shouldCallMapperWithPostfachAddress() { - helper.addPostfachAddressToBody(postfachNachrichtWithoutPostfachAddress, vorgang); - - verify(mapper).mapPostfachAddressToMap(vorgang.getHeader().getServiceKonto().getPostfachAddresses().get(0)); - } - - @Test - void shouldReturn() { - var body = helper.addPostfachAddressToBody(postfachNachrichtWithoutPostfachAddress, vorgang); - - assertThat(((PostfachMail) body).getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.createAsMap()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfDataTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfDataTestFactory.java deleted file mode 100644 index e5d13a939d57e625562e092575dd7b1ce86cf16f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfDataTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import java.util.List; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class PostfachNachrichtPdfDataTestFactory { - - public static PostfachNachrichtPdfData create() { - return createBuilder().build(); - } - - public static PostfachNachrichtPdfData.PostfachNachrichtPdfDataBuilder createBuilder() { - return PostfachNachrichtPdfData.builder() - .createdAt(PostfachMailTestFactory.CREATED_AT) - .user(UserProfileTestFactory.create()) - .subject(PostfachMailTestFactory.SUBJECT) - .mailBody(PostfachMailTestFactory.MAIL_BODY) - .attachmentNames(List.of(BinaryFileTestFactory.NAME)); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfServiceITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfServiceITCase.java deleted file mode 100644 index fae6fb5f144c7c97bfa730fdbfe12ea88c0f559e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfServiceITCase.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStream; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; - -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.vorgang.AntragstellerTestFactory; -import de.ozgcloud.alfa.vorgang.EingangTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import lombok.SneakyThrows; - -@SpringBootTest -class PostfachNachrichtPdfServiceITCase { - - @Autowired - private PostfachNachrichtPdfService service; - @MockBean - private UserService userService; - - @DisplayName("Generate pdf file") - @Nested - class TestGeneratePdfFile { - - @BeforeEach - void mock() { - when(userService.getById(any(UserId.class))).thenReturn(UserProfileTestFactory.create()); - } - - @SneakyThrows - @Test - void generatePdfFile() { - var tempFile = createTempFile(); - - getAllAsPdf(VorgangWithEingangTestFactory.create(), new FileOutputStream(tempFile)); - - assertThat(tempFile).isNotEmpty(); - } - - @SneakyThrows - @Test - void generatePdfFileAntragstellerNotSet() { - var tempFile = createTempFile(); - - getAllAsPdf(buildVorgangAntragstellerNotSet(), new FileOutputStream(tempFile)); - - assertThat(tempFile).isNotEmpty(); - } - - @SneakyThrows - @Test - void generatePdfFileNoAttachments() { - var tempFile = createTempFile(); - - getAllAsPdf(buildVorgangAntragstellerNotSet(), - Stream.of(PostfachNachrichtPdfDataTestFactory.createBuilder().attachmentNames(Collections.emptyList()).build()), - new FileOutputStream(tempFile)); - - assertThat(tempFile).isNotEmpty(); - } - - @SneakyThrows - private File createTempFile() { - var tempFile = File.createTempFile("ozgcloud_nachricht_", ".pdf"); - // tempFile.deleteOnExit(); - return tempFile; - } - - @SneakyThrows - private void getAllAsPdf(VorgangWithEingang vorgang, OutputStream out) { - getAllAsPdf(vorgang, buildPostfachMails(), out); - } - - @SneakyThrows - private void getAllAsPdf(VorgangWithEingang vorgang, Stream<PostfachNachrichtPdfData> postfachNachrichten, OutputStream out) { - service.getAllAsPdf(vorgang, postfachNachrichten, out); - out.close(); - } - } - - @DisplayName("Map Postfach-Nachricht") - @Nested - class TestMapPostfachNachricht { - - private final ZonedDateTime createdAt = ZonedDateTime.of(2023, 9, 25, 10, 0, 0, 0, ZoneId.of("UTC")); - private final PostfachNachrichtPdfData pdfData = PostfachNachrichtPdfDataTestFactory.createBuilder().createdAt(createdAt).build(); - - @Test - void shouldMapCreatedAtWithCorrectTimezoneAndFormatting() { - var nachricht = service.mapPostfachNachricht(pdfData, AntragstellerTestFactory.create()); - - assertThat(nachricht.getCreatedAt()).isEqualTo("25.09.2023 12:00:00 MESZ"); - } - } - - private VorgangWithEingang buildVorgangAntragstellerNotSet() { - return VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()).build(); - } - - private Stream<PostfachNachrichtPdfData> buildPostfachMails() { - return Stream.of(PostfachNachrichtPdfDataTestFactory.createBuilder().subject("hase") - .attachmentNames(List.of("Hase.png", "Hasenlied.mscz", "Erweitertes-Führungszeugniß.pdf", "Haftbefehl.pdf")) - .build(), - PostfachNachrichtPdfDataTestFactory.create(), - PostfachNachrichtPdfDataTestFactory.create(), - PostfachNachrichtPdfDataTestFactory.create(), - PostfachNachrichtPdfDataTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfServiceTest.java deleted file mode 100644 index 286bdc7d05c38a2d9a6975970d8349a1346ddb0c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachNachrichtPdfServiceTest.java +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.core.io.Resource; -import org.springframework.test.util.ReflectionTestUtils; - -import de.ozgcloud.alfa.common.GermanDateTimeFormatter; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.postfach.PostfachMail.Direction; -import de.ozgcloud.alfa.postfach.PostfachNachrichtPdfModel.Nachricht; -import de.ozgcloud.alfa.vorgang.AntragstellerTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.common.pdf.PdfService; -import lombok.SneakyThrows; - -class PostfachNachrichtPdfServiceTest { - - @Spy - @InjectMocks - private PostfachNachrichtPdfService service; - @Mock - private PdfService pdfService; - @Mock - private GermanDateTimeFormatter germanDateTimeFormatter; - - @DisplayName("Get all as pdf") - @Nested - class TestGetAllAsPdf { - - @Mock - private OutputStream output; - - @DisplayName("on getting template") - @Nested - class TestGetTemplate { - - @Mock - private Resource pdfTemplate; - - @BeforeEach - void mockPdfTemplate() { - ReflectionTestUtils.setField(service, "pdfTemplate", pdfTemplate); - } - - @SneakyThrows - @Test - void shouldGetInputStreamFromResource() { - when(pdfTemplate.getInputStream()).thenReturn(InputStream.nullInputStream()); - - service.getTemplate(); - - verify(pdfTemplate).getInputStream(); - } - - @SneakyThrows - @Test - void shouldReturnIfExists() { - var inputStream = InputStream.nullInputStream(); - when(pdfTemplate.getInputStream()).thenReturn(inputStream); - - var templateInputStream = service.getTemplate(); - - assertThat(templateInputStream).isEqualTo(inputStream); - } - - @SneakyThrows - @Test - void shouldThrowExceptionIfMissing() { - when(pdfTemplate.getInputStream()).thenThrow(IOException.class); - - assertThatThrownBy(() -> service.getTemplate()).isInstanceOf(TechnicalException.class); - } - } - - @DisplayName("build model") - @Nested - class TestBuildModel { - - @DisplayName("by vorgang") - @Nested - class TestByVorgang { - - @Test - void shouldSetVorgangNummer() { - var model = service.buildModel(VorgangWithEingangTestFactory.create(), Stream.empty()); - - assertThat(model.getVorgangNummer()).isEqualTo(VorgangHeaderTestFactory.NUMMER); - } - - @Test - void shouldSetVorgangName() { - var model = service.buildModel(VorgangWithEingangTestFactory.create(), Stream.empty()); - - assertThat(model.getVorgangName()).isEqualTo(VorgangHeaderTestFactory.NAME); - } - - @Nested - class TestSetIsFirst { - - @Test - void shouldSetIsFirstTrueOnFirstMessage() { - var model = service.buildModel(VorgangWithEingangTestFactory.create(), - Stream.of(PostfachNachrichtPdfDataTestFactory.create())); - - assertThat(model.getNachrichten().get(0).isFirst()).isTrue(); - } - - @Test - void shouldSetIsFirstFalseOnOtherMessage() { - var model = service.buildModel(VorgangWithEingangTestFactory.create(), - Stream.of(PostfachNachrichtPdfDataTestFactory.create(), PostfachNachrichtPdfDataTestFactory.create(), - PostfachNachrichtPdfDataTestFactory.create())); - - assertThat(model.getNachrichten().get(1).isFirst()).isFalse(); - assertThat(model.getNachrichten().get(2).isFirst()).isFalse(); - } - } - } - - @DisplayName("by Antragsteller") - @Nested - class TestMapAntragsteller { - - @Test - void shouldMapAntragstellerAnrede() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerAnrede()).isEqualTo(AntragstellerTestFactory.ANREDE); - } - - @Test - void shouldMapAntragstellerVorname() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerVorname()).isEqualTo(AntragstellerTestFactory.VORNAME); - } - - @Test - void shouldMapAntragstellerNachname() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerNachname()).isEqualTo(AntragstellerTestFactory.NACHNAME); - } - - @Test - void shouldMapAntragstellerStrasse() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerStrasse()).isEqualTo(AntragstellerTestFactory.STRASSE); - } - - @Test - void shouldMapAntragstellerHausnummer() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerHausnummer()).isEqualTo(AntragstellerTestFactory.HAUSNUMMER); - } - - @Test - void shouldMapAntragstellerPlz() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerPlz()).isEqualTo(AntragstellerTestFactory.PLZ); - } - - @Test - void shouldMapAntragstellerOrt() { - var modelBuilder = mapAntragsteller(); - - assertThat(modelBuilder.build().getAntragstellerOrt()).isEqualTo(AntragstellerTestFactory.ORT); - } - - private PostfachNachrichtPdfModel.PostfachNachrichtPdfModelBuilder mapAntragsteller() { - var modelBuilder = PostfachNachrichtPdfModel.builder(); - - service.mapAntragsteller(modelBuilder, AntragstellerTestFactory.create()); - - return modelBuilder; - } - } - - @DisplayName("by postfachnachricht pdf data") - @Nested - class TestMapPostfachNachricht { - - @Test - void shouldMapNachrichtSubject() { - var nachricht = mapNachricht(); - - assertThat(nachricht.getSubject()).isEqualTo(PostfachMailTestFactory.SUBJECT); - } - - @Test - void shouldMapNachrichtMailBody() { - var nachricht = mapNachricht(); - - assertThat(nachricht.getMailBody()).isEqualTo(PostfachMailTestFactory.MAIL_BODY); - } - - @Test - void shouldMapNachrichtCreatedAt() { - var expected = "formatted date"; - when(germanDateTimeFormatter.formatZonedDateTime(PostfachMailTestFactory.CREATED_AT)).thenReturn(expected); - - var nachricht = mapNachricht(); - - assertThat(nachricht.getCreatedAt()).isEqualTo(expected); - } - - @Test - void shouldCallDateFormatter() { - mapNachricht(); - - verify(germanDateTimeFormatter).formatZonedDateTime(PostfachMailTestFactory.CREATED_AT); - } - - @Test - void shouldMapNachrichtCreatedBy() { - var nachricht = mapNachricht(); - - assertThat(nachricht.getCreatedBy()).isEqualTo(UserProfileTestFactory.FULLNAME); - } - - @Test - void shouldMapNachrichtAttachments() { - var nachricht = mapNachricht(); - - assertThat(nachricht.getAttachments()).containsExactly(BinaryFileTestFactory.NAME); - } - - private Nachricht mapNachricht() { - return mapNachricht(PostfachNachrichtPdfDataTestFactory.create()); - } - - private PostfachNachrichtPdfModel.Nachricht mapNachricht(PostfachNachrichtPdfData pdfData) { - return service.mapPostfachNachricht(pdfData, AntragstellerTestFactory.create()); - } - - @DisplayName("for incoming nachricht") - @Nested - class TestDirectionIn { - - @DisplayName("build absender name") - @Nested - class TestBuildUserName { - - private final PostfachNachrichtPdfData data = PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.IN) - .build(); - - @Test - void shouldReturnAntragstellerIfExists() { - var name = service.buildAbsenderName(data, AntragstellerTestFactory.create()); - - assertThat(name).isEqualTo(AntragstellerTestFactory.VORNAME + " " + AntragstellerTestFactory.NACHNAME); - } - - @Test - void shouldReturnFallbackNameForAntragsteller() { - var name = service.buildAbsenderName(data, null); - - assertThat(name).isEqualTo(PostfachNachrichtPdfService.FALLBACK_ANTRAGSTELLER_NAME); - } - - @Test - void shouldReturnEmptyStringOnNullAntragstellerName() { - var name = service.buildAbsenderName(data, AntragstellerTestFactory.createBuilder().vorname(null).nachname(null).build()); - - assertThat(name).isEqualTo(StringUtils.EMPTY); - } - } - } - - @DisplayName("for outgoing nachricht") - @Nested - class TestDirectionOut { - - @DisplayName("build absender name") - @Nested - class TestBuildUserName { - - private final PostfachNachrichtPdfData data = PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.OUT) - .build(); - - @Test - void shouldReturnUserProfileNameIfExists() { - var name = service.buildAbsenderName(data, AntragstellerTestFactory.create()); - - assertThat(name).isEqualTo(UserProfileTestFactory.FIRSTNAME + " " + UserProfileTestFactory.LASTNAME); - } - - @Test - void shouldReturnFallbackNameForUserProfile() { - var name = service.buildAbsenderName( - PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.OUT).user(null).build(), - AntragstellerTestFactory.create()); - - assertThat(name).isEqualTo(PostfachNachrichtPdfService.FALLBACK_USER_NAME); - } - - @Test - void shouldReturnEmptyStringOnNullName() { - var data = PostfachNachrichtPdfDataTestFactory.createBuilder().direction(Direction.OUT) - .user(UserProfileTestFactory.createBuilder().firstName(null).lastName(null).build()).build(); - - var name = service.buildAbsenderName(data, AntragstellerTestFactory.create()); - - assertThat(name).isEmpty(); - } - } - } - } - } - - @Test - void shouldCallPdfService() { - doReturn(InputStream.nullInputStream()).when(service).getTemplate(); - - service.getAllAsPdf(VorgangWithEingangTestFactory.create(), Stream.of(PostfachNachrichtPdfDataTestFactory.create()), output); - - verify(pdfService).createPdf(any(InputStream.class), eq(output), any(PostfachNachrichtPdfModel.class)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTest.java deleted file mode 100644 index d886861a56502ed102ffc52d3ef4368c13a358d9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; - -@SpringBootTest(classes = { PostfachPropertiesTestConfiguration.class }) -class PostfachPropertiesTest { - private static final String ORGANISATIONSEINHEITEN_ID = "oe1"; - private static final String TEST_SIG = "test1"; - private static final String TEST_ORGANISATIONS_SIG = OrganisationsEinheitSettingsTestFactory.TEST_SIGNATUR; - - @DisplayName("Test loading postfach configuration") - @Nested - @TestPropertySource(properties = { - PostfachProperties.PREFIX + ".signatur=" + TEST_SIG, - PostfachProperties.PREFIX + ".organisations-einheit-settings." + ORGANISATIONSEINHEITEN_ID + ".signatur=" + TEST_ORGANISATIONS_SIG, - }) - class TestLoadingPostfachProperties { - - @Autowired - private PostfachProperties postfachProperties; - - @Nested - class TestInitialization { - - @Test - void shouldHaveProperties() { - assertThat(postfachProperties).isNotNull(); - } - - @Test - void shouldHaveOrganisationsEinheitSettings() { - assertThat(postfachProperties.getOrganisationsEinheitSettings()).isNotNull(); - } - } - } - - @DisplayName("Test mapping organisations einheit settings") - @Nested - @TestPropertySource(properties = { - PostfachProperties.PREFIX + ".signatur=" + TEST_SIG, - PostfachProperties.PREFIX + ".organisations-einheit-settings.oe1.signatur=" + TEST_ORGANISATIONS_SIG, - }) - class TestMapOrganisationsEinheitSettings { - - @Autowired - private PostfachProperties postfachProperties; - - @Test - void shouldHaveOrganisationsEinheit() { - var props = postfachProperties.getOrganisationsEinheitSettings(); - - assertThat(props).containsKey(ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldHaveOrganisationsEinheitSetting() { - assertThat(postfachProperties.getOrganisationsEinheitSettings().get(ORGANISATIONSEINHEITEN_ID)).hasFieldOrPropertyWithValue("signatur", - TEST_ORGANISATIONS_SIG); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTestConfiguration.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTestConfiguration.java deleted file mode 100644 index 8cf7c2e98ca2ccbdbd2db76cf5131a6474d913a3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachPropertiesTestConfiguration.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableConfigurationProperties(PostfachProperties.class) -class PostfachPropertiesTestConfiguration { - - @Autowired - private PostfachProperties postfachProperties; - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java deleted file mode 100644 index 23af6bf5791e241304e8bb780d56ac35e90ca354..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsServiceTest.java +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.cloud.endpoint.RefreshEndpoint; -import org.springframework.test.util.ReflectionTestUtils; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory; -import de.ozgcloud.alfa.common.FeatureToggleProperties; -import de.ozgcloud.alfa.vorgang.ServiceKontoTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeadTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class PostfachSettingsServiceTest { - - @Spy - @InjectMocks - private PostfachSettingsService service; - @Mock - private PostfachMailRemoteService remoteService; - @Mock - private RefreshEndpoint refreshEndpoint; - @Mock - private PostfachProperties postfachProperties; - @Mock - private FeatureToggleProperties featureToggleProperties; - - @DisplayName("Is postfach configured") - @Nested - class TestIsPostfachConfigured { - - @Test - void shouldCallRemoteServiceOnMissingProperty() { - when(remoteService.getPostfachConfig()).thenReturn(PostfachConfigGroupTestFactory.create()); - - callService(); - - verify(remoteService).getPostfachConfig(); - } - - @Test - void shouldNotCallRemoteServiceOnExistingProperty() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.create()); - - callService(); - - verifyNoInteractions(remoteService); - } - - @Test - void shouldCallRemoteServiceOnlyOnce() { - when(remoteService.getPostfachConfig()).thenReturn(PostfachConfigGroupTestFactory.create()); - - callService(); - callService(); - - verify(remoteService, times(1)).getPostfachConfig(); - } - - @ParameterizedTest - @ValueSource(booleans = { false, true }) - void shouldReturnValueFromRemoteService(boolean expectedConfigured) { - var serviceResponse = PostfachConfigGroupTestFactory.createBuilder().configured(expectedConfigured).build(); - when(remoteService.getPostfachConfig()).thenReturn(serviceResponse); - - var configured = callService(); - - assertThat(configured).isEqualTo(expectedConfigured); - } - - @ParameterizedTest - @ValueSource(booleans = { false, true }) - void shouldReturnCachedValue(boolean expectedConfigured) { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.createBuilder().configured(expectedConfigured).build()); - - var configured = callService(); - - assertThat(configured).isEqualTo(expectedConfigured); - } - - private boolean callService() { - return service.isPostfachConfigured(); - } - } - - @Nested - class TestGetPostfachSettings { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void mockService() { - doReturn(true).when(service).isReplyToMessageAllowed(vorgang); - - } - - @Test - void shouldCheckIsReplyAllowed() { - callService(); - - verify(service).isReplyToMessageAllowed(vorgang); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldSetIsReplyAllowedFeature(boolean replyAllowed) { - when(service.isReplyToMessageAllowed(vorgang)).thenReturn(replyAllowed); - - var postfach = callService(); - - assertThat(postfach.getFeatures().isReply()).isEqualTo(replyAllowed); - } - - @Test - void shouldGetSignatur() { - callService(); - - verify(service).getSignatur(vorgang.getOrganisationseinheitenID()); - } - - @Test - void shouldSetSignatur() { - doReturn(SettingsTestFactory.SIGNATUR).when(service).getSignatur(vorgang.getOrganisationseinheitenID()); - - var postfach = callService(); - - assertThat(postfach.getSettings().getSignatur()).isEqualTo(SettingsTestFactory.SIGNATUR); - } - - private PostfachSettings callService() { - return service.getPostfachSettings(vorgang); - } - } - - @Nested - class TestGetSignatur { - - @Test - void shouldRefreshCloudProperties() { - callService(); - - verify(service).refreshPostfachProperties(); - } - - @Test - void shouldGetOrganisationEinheitSettings() { - callService(); - - verify(service).getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); - } - - @Nested - class OnExistingOrganisationsEinheitSignatur { - - @BeforeEach - void setUp() { - doReturn(Optional.of(OrganisationsEinheitSettingsTestFactory.create())).when(service) - .getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); - } - - @Test - void shouldReturnOrganisationsEinheitSignatur() { - var signatur = callService(); - - assertThat(signatur).isEqualTo(OrganisationsEinheitSettingsTestFactory.TEST_SIGNATUR); - } - - } - - @Nested - class OnNoOrganisationsEinheitSignatur { - - @BeforeEach - void setUp() { - doReturn(Optional.empty()).when(service) - .getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); - } - - @Test - void shouldGetSignatur() { - callService(); - - verify(postfachProperties).getSignatur(); - - } - - @Test - void shouldReturnSignatur() { - when(postfachProperties.getSignatur()).thenReturn(SettingsTestFactory.SIGNATUR); - - var signatur = callService(); - - assertThat(signatur).isEqualTo(SettingsTestFactory.SIGNATUR); - } - - } - - private String callService() { - return service.getSignatur(OrganisationsEinheitTestFactory.ID); - } - } - - @Nested - class TestRefreshPostfachProperties { - - @Test - void shouldCallRefreshEndpoint() { - service.refreshPostfachProperties(); - - verify(refreshEndpoint).refresh(); - } - } - - @Nested - @DisplayName("Is reply to a message allowed for given Vorgang") - class TestIsReplyToMessageAllowed { - - @Test - void shouldCallIsReplyAllowed() { - doReturn(true).when(service).isReplyAllowed(ServiceKontoTestFactory.TYPE); - - service.isReplyToMessageAllowed(VorgangWithEingangTestFactory.create()); - - verify(service).isReplyAllowed(ServiceKontoTestFactory.TYPE); - } - - @ParameterizedTest - @ValueSource(booleans = { false, true }) - void shouldReturnResultOfIsReplyAllowed(boolean expectedReplyAllowed) { - doReturn(expectedReplyAllowed).when(service).isReplyAllowed(ServiceKontoTestFactory.TYPE); - - var replyAllowed = service.isReplyToMessageAllowed(VorgangWithEingangTestFactory.create()); - - assertThat(replyAllowed).isEqualTo(expectedReplyAllowed); - } - - @Test - void shouldReturnFalseForNotExistingServiceKonto() { - var vorgangWithEingang = VorgangWithEingangTestFactory.createBuilder() - .header(VorgangHeadTestFactory.createBuilder() - .serviceKonto(null) - .build()) - .build(); - - var replyToMessageAllowed = service.isReplyToMessageAllowed(vorgangWithEingang); - - assertThat(replyToMessageAllowed).isFalse(); - } - } - - @Nested - class TestIsReplyAllowed { - - private static final String DUMMY_SERVICE_KONTO_TYPE = LoremIpsum.getInstance().getWords(1); - - @BeforeEach - void setUp() { - when(featureToggleProperties.isReplyAlwaysAllowed()).thenReturn(false); - } - - @Test - @DisplayName("reply not allowed if postfach not configured") - void shouldReturnFalseIfPostfachNotConfigured() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.createBuilder().postfachConfigs(List.of()).build()); - doReturn(false).when(service).isPostfachConfigured(); - - var replyAllowed = service.isReplyAllowed(PostfachConfigTestFactory.TYPE); - - assertThat(replyAllowed).isFalse(); - } - - @Test - @DisplayName("given ServiceKonto-type is not configured") - void shouldReturnFalseForNotConfiguredType() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.createBuilder().postfachConfigs(List.of()).build()); - doReturn(true).when(service).isPostfachConfigured(); - - var replyAllowed = service.isReplyAllowed(DUMMY_SERVICE_KONTO_TYPE); - - assertThat(replyAllowed).isFalse(); - } - - @Test - @DisplayName("given ServiceKonto-type is null") - void shouldReturnFalseForUnknownType() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.create()); - doReturn(true).when(service).isPostfachConfigured(); - - var replyAllowed = service.isReplyAllowed(null); - - assertThat(replyAllowed).isFalse(); - } - - @Test - @DisplayName("reply not allowed for given ServiceKonto-type") - void shouldReturnFalseIfReplyNotAllowed() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.createBuilder() - .postfachConfigs(List.of(PostfachConfigTestFactory.createBuilder().replyAllowed(false).build())) - .build()); - doReturn(true).when(service).isPostfachConfigured(); - - var replyAllowed = service.isReplyAllowed(PostfachConfigTestFactory.TYPE); - - assertThat(replyAllowed).isFalse(); - } - - @Test - @DisplayName("reply allowed for given ServiceKonto-type") - void shouldReturnTrueIfReplyIsAllowed() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.create()); - doReturn(true).when(service).isPostfachConfigured(); - - var replyAllowed = service.isReplyAllowed(PostfachConfigTestFactory.TYPE); - - assertThat(replyAllowed).isTrue(); - } - - @Test - @DisplayName("reply allowed for given lower case ServiceKonto-type") - void shouldReturnTrueIfReplyIsAllowedForLowerCaseServiceKontoType() { - setPostfachConfigGroup(PostfachConfigGroupTestFactory.create()); - doReturn(true).when(service).isPostfachConfigured(); - - var replyAllowed = service.isReplyAllowed(PostfachConfigTestFactory.TYPE.toLowerCase()); - - assertThat(replyAllowed).isTrue(); - } - - @Test - void shouldReturnTrueIfAlwaysAllowed() { - when(featureToggleProperties.isReplyAlwaysAllowed()).thenReturn(true); - - var replyAllowed = service.isReplyAllowed(PostfachConfigTestFactory.TYPE); - - assertThat(replyAllowed).isTrue(); - } - } - - private void setPostfachConfigGroup(PostfachConfigGroup postfachConfigGroup) { - ReflectionTestUtils.setField(service, "postfachConfigGroup", postfachConfigGroup); - } - - @Nested - class TestGetOrganisationsEinheitSettings { - - @Nested - class OnOrganisationIdNotNull { - - private final OrganisationsEinheitSettings organisationsEinheitSettings = OrganisationsEinheitSettingsTestFactory.create(); - private final Map<String, Object> organisationsEinheitSettingsMap = Map.of(PostfachSettingsService.FIELD_SIGNATUR, - OrganisationsEinheitSettingsTestFactory.TEST_SIGNATUR); - - @BeforeEach - void setUp() { - when(postfachProperties.getOrganisationsEinheitSettings()).thenReturn( - Map.of(OrganisationsEinheitTestFactory.ID, organisationsEinheitSettingsMap)); - } - - @Test - void shouldGetOrganisationsEinheitSettings() { - service.getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); - - verify(postfachProperties).getOrganisationsEinheitSettings(); - } - - @Test - void shouldMapToOrganisationsEinheitSettings() { - service.getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); - - verify(service).mapOrganisationsEinheitSettings(organisationsEinheitSettingsMap); - } - - @Test - void shouldReturnSettings() { - var settings = service.getOrganisationsEinheitSettings(OrganisationsEinheitTestFactory.ID); - - assertThat(settings).isPresent().get().usingRecursiveComparison().isEqualTo(organisationsEinheitSettings); - } - - @Test - void shouldReturnEmpty() { - var settings = service.getOrganisationsEinheitSettings(UUID.randomUUID().toString()); - - assertThat(settings).isEmpty(); - } - } - - @Nested - class OnOrganisationIdNull { - - @Test - void shouldReturnEmpty() { - var settings = service.getOrganisationsEinheitSettings(null); - - assertThat(settings).isEmpty(); - } - } - } - - @Nested - class TestMapOrganisationsEinheitSettings { - - private final String signatur = LoremIpsum.getInstance().getWords(2); - private final Map<String, Object> organisationsEinheitSettings = Map.of(PostfachSettingsService.FIELD_SIGNATUR, signatur); - - @Test - void shouldMap() { - var settings = service.mapOrganisationsEinheitSettings(organisationsEinheitSettings); - - assertThat(settings.getSignatur()).isEqualTo(signatur); - } - - @Test - void shouldReturnSettingsWithNullSignatur() { - var settings = service.mapOrganisationsEinheitSettings(Collections.emptyMap()); - - assertThat(settings.getSignatur()).isNull(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsTestFactory.java deleted file mode 100644 index 5b20ebd1bdc1b493ce02167aa2b6f5764bb3250a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachSettingsTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -public class PostfachSettingsTestFactory { - - public static final Features FEATURES = FeaturesTestFactory.create(); - public static final Settings SETTINGS = SettingsTestFactory.create(); - - public static PostfachSettings create() { - return createBuilder().build(); - } - - public static PostfachSettings.PostfachSettingsBuilder createBuilder() { - return PostfachSettings.builder() - .features(FEATURES) - .settings(SETTINGS); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/SettingsTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/SettingsTestFactory.java deleted file mode 100644 index bb9fe3af8aece9526ff3ec9628fabc49f361f1ef..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/SettingsTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.postfach; - -import com.thedeanda.lorem.LoremIpsum; - -public class SettingsTestFactory { - - public static final String SIGNATUR = LoremIpsum.getInstance().getParagraphs(2, 2); - - public static Settings create() { - return createBuilder().build(); - } - - public static Settings.SettingsBuilder createBuilder() { - return Settings.builder() - .signatur(SIGNATUR); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/representation/GrpcGetRepresentationsResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/representation/GrpcGetRepresentationsResponseTestFactory.java deleted file mode 100644 index ec742260047da4d66b75effc9eb340808acbc6b3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/representation/GrpcGetRepresentationsResponseTestFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.representation; - -import java.util.Collections; - -import de.ozgcloud.alfa.common.file.GrpcOzgFileTestFactory; -import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsResponse; -import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; - -public class GrpcGetRepresentationsResponseTestFactory { - - private static GrpcOzgFile GRPC_FILE = GrpcOzgFileTestFactory.create(); - - public static GrpcGetRepresentationsResponse create() { - return createBuilder().build(); - } - - public static GrpcGetRepresentationsResponse.Builder createBuilder() { - return GrpcGetRepresentationsResponse.newBuilder() - .addAllFile(Collections.singleton(GRPC_FILE)); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationByVorgangControllerTest.java deleted file mode 100644 index 3b474ef2c4a3dc27be719d84d79793483d438dcb..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/representation/RepresentationByVorgangControllerTest.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.representation; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.CollectionModel; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileModelAssembler; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileService; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import lombok.SneakyThrows; - -class RepresentationByVorgangControllerTest { - - @Spy - @InjectMocks - private RepresentationByVorgangController controller; - @Mock - private BinaryFileModelAssembler modelAssembler; - @Mock - private OzgFileService fileService; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetRepresentations { - - Stream<OzgFile> representations = Stream.of(OzgFileTestFactory.create()); - - @BeforeEach - void mockFileService() { - when(fileService.getRepresentations(VorgangHeaderTestFactory.ID)).thenReturn(representations); - when(modelAssembler.toCollectionModel(representations)).thenReturn(CollectionModel.empty()); - } - - @SneakyThrows - @DisplayName("should return ok") - @Test - void shouldReturnOk() { - var result = callEndpoint(); - - result.andExpect(status().isOk()); - } - - @DisplayName("should call file service") - @Test - void shouldCallFileService() { - callEndpoint(); - - verify(fileService).getRepresentations(VorgangHeaderTestFactory.ID); - } - - @SneakyThrows - @Test - void shouldCallModelAssembler() { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(representations); - } - - @SneakyThrows - @DisplayName("should return entity") - @Test - void shouldReturnEntity() { - var result = callEndpoint(); - - result.andExpect(jsonPath("$.content").isEmpty()); - } - - @SneakyThrows - private ResultActions callEndpoint() { - return mockMvc.perform(get(RepresentationByVorgangController.PATH, VorgangHeaderTestFactory.ID)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java deleted file mode 100644 index eaba998f73069809ba92571939ceb9ec858dabad..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerITCase.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -import org.hamcrest.core.StringEndsWith; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.AlfaTestUtils; -import lombok.SneakyThrows; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class OzgcloudResourceControllerITCase { - - @Autowired - private MockMvc mockMvc; - - @Nested - class TestGetOzgcloudResource { - - private static final String VORGANG_ID = AlfaTestUtils.createMongoDbObjectId(); - private static final String VALID_URI = "dns:///dummy.service:123/vorgangs/" + VORGANG_ID; - private static final String INVALID_URI = "dns:///dummy.service:123/" + VORGANG_ID; - - @Test - void shouldReturnStatusOk() throws Exception { - var response = doRequest("dns:///test.de/vorgangs/" + VORGANG_ID); - - response.andExpect(status().isOk()); - } - - @Test - void shouldHaveVorgangLink() throws Exception { - var response = doRequest(VALID_URI); - - response.andExpect(jsonPath("$._links.vorgang.href").value(StringEndsWith.endsWith("/api/vorgangs/" + VORGANG_ID))); - } - - @Test - void shouldHaveSelfLink() throws Exception { - var encodedUri = URLEncoder.encode(VALID_URI, StandardCharsets.UTF_8); - - var response = doRequest(VALID_URI); - - response.andExpect(jsonPath("$._links.self.href").value(StringEndsWith.endsWith(OzgcloudResourceController.PATH + "?uri=" + encodedUri))); - } - - @Test - void shouldReturnStatusNotFound() throws Exception { - var response = doRequest(INVALID_URI); - - response.andExpect(status().isNotFound()); - } - - @Test - void shouldReturnBadRequestOnNoRequestParam() throws Exception { - var response = doRequestWithQueryString(""); - - response.andExpect(status().isBadRequest()); - } - - @Test - void shouldReturnBadRequestOnEmptyUri() throws Exception { - var response = doRequestWithQueryString("?uri="); - - response.andExpect(status().isBadRequest()); - } - - @SneakyThrows - private ResultActions doRequest(String uri) { - return doRequestWithQueryString("?uri=" + uri); - } - - @SneakyThrows - private ResultActions doRequestWithQueryString(String queryString) { - return mockMvc.perform(get(OzgcloudResourceController.PATH + queryString)); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerTest.java deleted file mode 100644 index 08cd4018672dc9565d25fbd6baee36dfa71e04ed..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceControllerTest.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatcher; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.RepresentationModel; - -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.SneakyThrows; - -class OzgcloudResourceControllerTest { - - @Mock - private OzgcloudResourceURIResolver resourceAResolver; - @Mock - private OzgcloudResourceURIResolver resourceBResolver; - @Spy - private Collection<OzgcloudResourceURIResolver> resourceResolvers = new ArrayList<>(); - @Mock - private OzgcloudResourceModelAssembler assembler; - @InjectMocks - private OzgcloudResourceController controller; - - @BeforeEach - void init() { - resourceResolvers.add(resourceAResolver); - resourceResolvers.add(resourceBResolver); - } - - @Nested - class TestGetOzgcloudResource { - - @Nested - class OnUriCouldBeResolved { - - private final ArgumentMatcher<OzgcloudResourceURIResolveResult> HAS_MATCHING_RESOURCE_URI = mapping -> mapping.getResourceURI().equals( - OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI); - private final ArgumentMatcher<OzgcloudResourceURIResolveResult> HAS_MATCHING_RESOURCE_LINK = mapping -> mapping.getResourceLink().equals( - OzgcloudResourceURIResolveResultTestFactory.RESOURCE_LINK); - - @BeforeEach - void init() { - when(resourceBResolver.resolve(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI)).thenReturn(Optional.of( - OzgcloudResourceURIResolveResultTestFactory.RESOURCE_LINK)); - } - - @Test - void shouldCallResolver() { - callController(); - - verify(resourceBResolver).resolve(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI); - } - - @Test - void shouldCallAssemblerWithUri() { - callController(); - - verify(assembler).toModel(argThat(HAS_MATCHING_RESOURCE_URI)); - } - - @Test - void shouldCallAssemblerWithResourceLink() { - callController(); - - verify(assembler).toModel(argThat(HAS_MATCHING_RESOURCE_LINK)); - } - - @Test - void shouldReturnModelFromAssembler() { - EntityModel<OzgcloudResource> modelFromAssembler = EntityModel.of(new OzgcloudResource()); - when(assembler.toModel(argThat(mapping -> HAS_MATCHING_RESOURCE_URI.matches(mapping) && HAS_MATCHING_RESOURCE_LINK.matches(mapping)))) - .thenReturn(modelFromAssembler); - - var model = callController(); - - assertThat(model).isEqualTo(modelFromAssembler); - } - } - - @Nested - class OnUriCouldNotBeResolved { - - @BeforeEach - void init() { - when(resourceAResolver.resolve(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI)).thenReturn(Optional.empty()); - when(resourceBResolver.resolve(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI)).thenReturn(Optional.empty()); - } - - @Test - void shouldThrowResourceNotFoundException() { - assertThatThrownBy(TestGetOzgcloudResource.this::callController).isInstanceOf(ResourceNotFoundException.class); - } - } - - @Nested - class OnMultipleResolveResults { - - @BeforeEach - void init() { - when(resourceAResolver.resolve(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI)).thenReturn(Optional.of( - OzgcloudResourceURIResolveResultTestFactory.RESOURCE_LINK)); - when(resourceBResolver.resolve(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI)).thenReturn(Optional.of( - OzgcloudResourceURIResolveResultTestFactory.RESOURCE_LINK)); - } - - @Test - void shouldThrowTechnicalException() { - assertThatThrownBy(TestGetOzgcloudResource.this::callController).isInstanceOf(TechnicalException.class); - } - } - - @SneakyThrows - private RepresentationModel<EntityModel<OzgcloudResource>> callController() { - return controller.getOzgcloudResource(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_URI); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceModelAssemblerTest.java deleted file mode 100644 index dbdb158be27f9cabc51b285db6dbe6be728b9d2f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceModelAssemblerTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import static de.ozgcloud.alfa.resource.OzgcloudResourceController.*; -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -class OzgcloudResourceModelAssemblerTest { - - @InjectMocks - private OzgcloudResourceModelAssembler assembler; - - @Nested - class TestToModel { - - private final OzgcloudResourceURIResolveResult uriResolveResult = OzgcloudResourceURIResolveResultTestFactory.create(); - - @Test - void shouldHaveSelfLink() { - var model = callAssembler(); - - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(OzgcloudResourceController.PATH + "?" + PARAM_URI + "=" + OzgcloudResourceURIResolveResultTestFactory.ENCODED_RESOURCE_URI); - } - - @Test - void shouldHaveResourceLink() { - var model = callAssembler(); - - assertThat(model.getLink(OzgcloudResourceURIResolveResultTestFactory.RESOURCE_LINK.getRel())).isPresent().get().isEqualTo( - OzgcloudResourceURIResolveResultTestFactory.RESOURCE_LINK); - } - - private EntityModel<OzgcloudResource> callAssembler() { - return assembler.toModel(uriResolveResult); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceRootProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceRootProcessorTest.java deleted file mode 100644 index bd71e8a59b6b663e2a2b2fbc9dfc3250c7ae8fb2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceRootProcessorTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.Root; -import de.ozgcloud.alfa.RootTestFactory; - -class OzgcloudResourceRootProcessorTest { - - private final OzgcloudResourceRootProcessor processor = new OzgcloudResourceRootProcessor(); - - @Nested - class TestProcess { - - private final EntityModel<Root> model = EntityModel.of(RootTestFactory.create()); - - @Test - void shouldReturnOriginalModel() { - var result = processor.process(model); - - assertThat(result).isEqualTo(model); - } - - @Test - void shouldAddResourceLink() { - processor.process(model); - - assertThat(model.getLink(OzgcloudResourceRootProcessor.REL_RESOURCE)).isPresent().get().extracting(Link::getHref) - .isEqualTo(OzgcloudResourceController.PATH + "?uri={uri}"); - } - } -} - - diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolveResultTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolveResultTestFactory.java deleted file mode 100644 index 7d033b0cdd9f667aa2cce4c844144052724bec0f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/resource/OzgcloudResourceURIResolveResultTestFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.resource; - -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -import org.springframework.hateoas.Link; - -import com.thedeanda.lorem.LoremIpsum; - -class OzgcloudResourceURIResolveResultTestFactory { - - public static final String RESOURCE_URI = String.format("%s://%s.%s/%s", (Object[]) LoremIpsum.getInstance().getWords(4).split("\\s")); - public static final String ENCODED_RESOURCE_URI = URLEncoder.encode(RESOURCE_URI, StandardCharsets.UTF_8); - public static final Link RESOURCE_LINK = Link.of(LoremIpsum.getInstance().getUrl()).withRel(LoremIpsum.getInstance().getWords(1)); - - public static OzgcloudResourceURIResolveResult create() { - return createBuilder().build(); - } - - public static OzgcloudResourceURIResolveResult.OzgcloudResourceURIResolveResultBuilder createBuilder() { - return OzgcloudResourceURIResolveResult.builder().resourceURI(RESOURCE_URI).resourceLink(RESOURCE_LINK); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/ByStatusTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/ByStatusTestFactory.java deleted file mode 100644 index b6f68a0c65eb499149776b33be961e42a394cd04..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/ByStatusTestFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -public class ByStatusTestFactory { - - public static final int NEU_COUNT = 1; - public static final int ANGENOMMEN_COUNT = 2; - public static final int IN_BEARBEITUNG_COUNT = 3; - public static final int BESCHIEDEN_COUNT = 4; - public static final int ABGESCHLOSSEN_COUNT = 5; - public static final int VERWORFEN_COUNT = 6; - public static final int ZU_LOESCHEN_COUNT = 7; - - public static ByStatus create() { - return createBuilder().build(); - } - - public static ByStatus.ByStatusBuilder createBuilder() { - return ByStatus.builder() - .neu(NEU_COUNT) - .angenommen(ANGENOMMEN_COUNT) - .inBearbeitung(IN_BEARBEITUNG_COUNT) - .beschieden(BESCHIEDEN_COUNT) - .abgeschlossen(ABGESCHLOSSEN_COUNT) - .verworfen(VERWORFEN_COUNT) - .zuLoeschen(ZU_LOESCHEN_COUNT); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcByStatusResultTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcByStatusResultTestFactory.java deleted file mode 100644 index 745caaa5613439a3c1943aa6e51c606fdd2b9083..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcByStatusResultTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import de.ozgcloud.vorgang.statistic.GrpcByStatusResult; - -public class GrpcByStatusResultTestFactory { - - public static GrpcByStatusResult create() { - return createBuilder().build(); - } - - public static GrpcByStatusResult.Builder createBuilder() { - return GrpcByStatusResult.newBuilder() - .setNeu(ByStatusTestFactory.NEU_COUNT) - .setAngenommen(ByStatusTestFactory.ANGENOMMEN_COUNT) - .setInBearbeitung(ByStatusTestFactory.IN_BEARBEITUNG_COUNT) - .setBeschieden(ByStatusTestFactory.BESCHIEDEN_COUNT) - .setAbgeschlossen(ByStatusTestFactory.ABGESCHLOSSEN_COUNT) - .setVerworfen(ByStatusTestFactory.VERWORFEN_COUNT); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java deleted file mode 100644 index b4cd92ad65cf1ea1ccd82e27691d5f11c71eedc7..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; - -public class GrpcVorgangStatisticQueryTestFactory { - - public static final String RESULT_NAME = LoremIpsum.getInstance().getWords(1); - - public static GrpcVorgangStatisticQuery create() { - return createBuilder().build(); - } - - public static GrpcVorgangStatisticQuery.Builder createBuilder() { - return GrpcVorgangStatisticQuery.newBuilder() - .setResultName(RESULT_NAME); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResponseTestFactory.java deleted file mode 100644 index c1dba0a6cbb678e1e79458022a6ae09c756b5a28..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResponseTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse; - -public class GrpcVorgangStatisticResponseTestFactory { - - public static GrpcVorgangStatisticResponse create() { - return createBuilder().build(); - } - - public static GrpcVorgangStatisticResponse.Builder createBuilder() { - return GrpcVorgangStatisticResponse.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResultTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResultTestFactory.java deleted file mode 100644 index 1697a4e67f91cb8b0ea990e25eb1cf7ea6dae5d5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResultTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResult; - -class GrpcVorgangStatisticResultTestFactory { - public static final String RESULT_NAME = "countByStatus_NEU"; - public static final int RESULT_INT = 42; - - public static GrpcVorgangStatisticResult create() { - return createBuilder().build(); - } - - public static GrpcVorgangStatisticResult.Builder createBuilder() { - return GrpcVorgangStatisticResult.newBuilder().setName(RESULT_NAME).setResultIntValue(RESULT_INT); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticControllerTest.java deleted file mode 100644 index e02f9397d178f172699e8b757fa448d01e5df608..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticControllerTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class StatisticControllerTest { - - @InjectMocks - private StatisticController controller; - - @Mock - private StatisticService service; - - @Nested - class TestGetVorgaengeStatistic { - - @Test - void shouldCallService() { - controller.getVorgaengeStatistic(); - - verify(service).getVorgaengeStatistic(); - } - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticMapperTest.java deleted file mode 100644 index 5559f05bd8061e60cd23153ccce76193d15393c2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticMapperTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class StatisticMapperTest { - - private final StatisticMapper mapper = Mappers.getMapper(StatisticMapper.class); - - @Nested - class TestToResult { - - private final String RESULT_STRING = "result"; - private final boolean RESULT_BOOL = true; - private final int RESULT_INT = 42; - - @Test - void shouldMapName() { - var statisticResult = mapper.toResult(GrpcVorgangStatisticResultTestFactory.create()); - - assertThat(statisticResult.getName()).isEqualTo(GrpcVorgangStatisticResultTestFactory.RESULT_NAME); - } - - @Test - void shouldMapStringResult() { - var grpcResult = GrpcVorgangStatisticResultTestFactory.createBuilder().setResultStringValue(RESULT_STRING).build(); - - var statisticResult = mapper.toResult(grpcResult); - - assertThat(statisticResult.getStringValue()).isEqualTo(RESULT_STRING); - } - - @Test - void shouldMapBoolResult() { - var grpcResult = GrpcVorgangStatisticResultTestFactory.createBuilder().setResultBoolValue(RESULT_BOOL).build(); - - var statisticResult = mapper.toResult(grpcResult); - - assertThat(statisticResult.getBoolValue()).isEqualTo(RESULT_BOOL); - } - - @Test - void shouldMapIntResult() { - var grpcResult = GrpcVorgangStatisticResultTestFactory.createBuilder().setResultIntValue(RESULT_INT).build(); - - var statisticResult = mapper.toResult(grpcResult); - - assertThat(statisticResult.getIntValue()).isEqualTo(RESULT_INT); - } - - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java deleted file mode 100644 index 68ffbbedc5a6de4737f57c4c0dbfec8c59cb944b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import static de.ozgcloud.alfa.statistic.StatisticRemoteService.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.AlfaProperties; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.vorgang.common.GrpcQueryOperator; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResult; -import de.ozgcloud.vorgang.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub; - -class StatisticRemoteServiceTest { - - @Spy - @InjectMocks - private StatisticRemoteService service; - @Mock - private StatisticServiceBlockingStub serviceStub; - @Mock - private StatisticMapper mapper; - @Mock - private AlfaProperties alfaProperties; - - private static final List<VorgangStatus> STATUSES_TO_COUNT = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, - VorgangStatus.IN_BEARBEITUNG, VorgangStatus.BESCHIEDEN, - VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN); - - @DisplayName("Build count by vorgang status query") - @Nested - class TestBuildCountByVorgangStatusQuery { - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldContainResultName(VorgangStatus vorgangStatus) { - var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - - assertThat(query.getResultName()).isEqualTo(String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, vorgangStatus.name())); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldContainPath(VorgangStatus vorgangStatus) { - var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - - assertThat(query.getPath()).isEqualTo(STATUS_PATH); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldContainGroupMethod(VorgangStatus vorgangStatus) { - var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - - assertThat(query.getGroupMethod()).isEqualTo(GroupMethod.COUNT); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldContainOperator(VorgangStatus vorgangStatus) { - var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - - assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldContainOperandStringValue(VorgangStatus vorgangStatus) { - var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - - assertThat(query.getOperandStringValue()).isEqualTo(vorgangStatus.name()); - } - } - - @Nested - class TestBuildCountByStatusQueries { - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldCallBuildCountByVorgangStatusQuery(VorgangStatus vorgangStatus) { - service.buildCountByStatusQueries(STATUSES_TO_COUNT); - - verify(service).buildCountByVorgangStatusQuery(vorgangStatus); - } - } - - @Nested - class TestBuildCountWiedervorlageNextFristQuery { - - private final String applicationName = LoremIpsum.getInstance().getFirstName(); - - @BeforeEach - void init() { - when(alfaProperties.getApplicationName()).thenReturn(applicationName); - } - - @Test - void shouldBuildQuery() { - var query = service.buildCountWiedervorlageNextFristQuery(); - - assertThat(query) - .extracting( - GrpcVorgangStatisticQuery::getResultName, - GrpcVorgangStatisticQuery::getPath, - GrpcVorgangStatisticQuery::getOperator, - GrpcVorgangStatisticQuery::getGroupMethod) - .contains( - COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME, - String.format(StatisticRemoteService.WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, applicationName), - GrpcQueryOperator.UNEQUAL, - GroupMethod.COUNT - ); - } - } - - @Nested - class TestBuildExistsWiedervorlageOverdueQuery { - - private final String applicationName = LoremIpsum.getInstance().getFirstName(); - - @BeforeEach - void init() { - when(alfaProperties.getApplicationName()).thenReturn(applicationName); - } - - @Test - void shouldContainResultName() { - var query = service.buildExistsWiedervorlageOverdueQuery(); - - assertThat(query.getResultName()).isEqualTo(StatisticRemoteService.EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME); - } - - @Test - void shouldContainPath() { - var query = service.buildExistsWiedervorlageOverdueQuery(); - - assertThat(query.getPath()).isEqualTo(String.format(StatisticRemoteService.WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, applicationName)); - } - - @Test - void shouldContainGroupMethod() { - var query = service.buildExistsWiedervorlageOverdueQuery(); - - assertThat(query.getGroupMethod()).isEqualTo(GroupMethod.EXISTS); - } - - @Test - void shouldContainOperator() { - var query = service.buildExistsWiedervorlageOverdueQuery(); - - assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO); - } - - @Test - void shouldContainOperandStringValue() { - var query = service.buildExistsWiedervorlageOverdueQuery(); - - assertThat(query.getOperandStringValue()).isEqualTo(StatisticRemoteService.OPERAND_TODAY_DATE); - } - - @Test - void shouldCallPropertiesToGetClientName() { - service.buildExistsWiedervorlageOverdueQuery(); - - verify(alfaProperties).getApplicationName(); - } - } - - @DisplayName("Get vorgaenge statistic") - @Nested - class TestGetVorgaengeStatistics { - - private final GrpcVorgangStatisticResponse response = GrpcVorgangStatisticResponseTestFactory.create(); - private final GrpcVorgangStatisticQuery countVorgaengeWithUngeleseneNachrichtenQuery = GrpcVorgangStatisticQueryTestFactory.createBuilder() - .setResultName("ungelesene nachrichten").build(); - private final GrpcVorgangStatisticQuery existsWiedervorlageOverdueQuery = GrpcVorgangStatisticQueryTestFactory.createBuilder() - .setResultName("exists overdue").build(); - - @Captor - private ArgumentCaptor<GrpcVorgangStatisticRequest> grpcRequestCaptor; - - @BeforeEach - void beforeEach() { - when(serviceStub.getVorgangStatistic(any())).thenReturn(response); - - doReturn(existsWiedervorlageOverdueQuery).when(service).buildExistsWiedervorlageOverdueQuery(); - doReturn(countVorgaengeWithUngeleseneNachrichtenQuery).when(service).buildCountVorgaengeWithUngeleseneNachrichtenQuery(); - } - - @Test - void shouldCallServiceStub() { - service.getVorgaengeStatistics(Collections.emptyList()); - - verify(serviceStub).getVorgangStatistic(any()); - } - - @Test - void shouldCallBuildCountByStatusQueries() { - service.getVorgaengeStatistics(STATUSES_TO_COUNT); - - verify(service).buildCountByStatusQueries(STATUSES_TO_COUNT); - } - - @Test - void shouldCallBuildCountByVorgangStatusQuery() { - service.getVorgaengeStatistics(STATUSES_TO_COUNT); - - verify(service).buildCountWiedervorlageNextFristQuery(); - } - - @Test - void shouldCallBuildExistsWiedervorlageOverdueQuery() { - service.getVorgaengeStatistics(STATUSES_TO_COUNT); - - verify(service).buildExistsWiedervorlageOverdueQuery(); - } - - @Test - void shouldCallBuildStatisticResult() { - service.getVorgaengeStatistics(STATUSES_TO_COUNT); - - verify(service).buildStatisticResult(response); - } - - @Test - void shouldCallBuildCountVorgaengeWithUngeleseneNachrichtenQuery() { - service.getVorgaengeStatistics(STATUSES_TO_COUNT); - - verify(service).buildCountVorgaengeWithUngeleseneNachrichtenQuery(); - } - - @Test - void shouldAddCountVorgaengeWithUngeleseneNachrichtenQuery() { - service.getVorgaengeStatistics(STATUSES_TO_COUNT); - - verify(serviceStub).getVorgangStatistic(grpcRequestCaptor.capture()); - assertThat(grpcRequestCaptor.getValue().getQueryList()).contains(countVorgaengeWithUngeleseneNachrichtenQuery); - } - } - - @Nested - class TestBuildStatisticResult { - - private final String RESULT_NAME = "countByStatus"; - private final int RESULT_INT = 42; - private GrpcVorgangStatisticResponse grpcResponse; - private GrpcVorgangStatisticResult grpcResult; - - @BeforeEach - void beforeEach() { - grpcResult = GrpcVorgangStatisticResult.newBuilder() - .setName(RESULT_NAME) - .setResultIntValue(RESULT_INT) - .build(); - grpcResponse = GrpcVorgangStatisticResponse.newBuilder() - .addResult(grpcResult) - .build(); - when(mapper.toResult(grpcResult)).thenReturn(StatisticResult.builder().name(RESULT_NAME).intValue(RESULT_INT).build()); - } - - @Test - void shouldCallMapper() { - service.buildStatisticResult(grpcResponse); - - verify(mapper).toResult(grpcResult); - } - - @Test - void shouldBuildResult() { - var result = service.buildStatisticResult(grpcResponse); - - assertThat(result) - .hasSize(1) - .hasEntrySatisfying(RESULT_NAME, statisticResult -> assertThat(statisticResult.getIntValue()).isEqualTo(RESULT_INT)); - } - } - - @Nested - class TestBuildCountVorgaengeWithUngeleseneNachrichtenQuery { - - @Test - void shouldHaveResultName() { - var query = callService(); - - assertThat(query.getResultName()).isEqualTo(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME); - } - - @Test - void shouldHavePath() { - var query = callService(); - - assertThat(query.getPath()).isEqualTo(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH); - } - - @Test - void shouldHaveGroupingMethod() { - var query = callService(); - - assertThat(query.getGroupMethod()).isEqualTo(GroupMethod.COUNT); - } - - @Test - void shouldHaveOperator() { - var query = callService(); - - assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); - } - - @Test - void shouldHaveOperandValue() { - var query = callService(); - - assertThat(query.getOperandBoolValue()).isTrue(); - } - - private GrpcVorgangStatisticQuery callService() { - return service.buildCountVorgaengeWithUngeleseneNachrichtenQuery(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticResultTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticResultTestFactory.java deleted file mode 100644 index 6441789cedf3768dde13e9955a95373b32a68df0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticResultTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -class StatisticResultTestFactory { - public static final String NAME = "countWiederverolage"; - public static final int INT_VALUE = 42; - - public static StatisticResult create() { - return createBuilder().build(); - } - - public static StatisticResult.StatisticResultBuilder createBuilder() { - return StatisticResult.builder() - .name(NAME) - .intValue(INT_VALUE); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java deleted file mode 100644 index 61204730a5b571ba703774b95289d9e18a67ff7c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -import static de.ozgcloud.alfa.statistic.StatisticRemoteService.*; -import static de.ozgcloud.alfa.statistic.StatisticService.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -class StatisticServiceTest { - - @Spy - @InjectMocks - private StatisticService service; - @Mock - private StatisticRemoteService remoteService; - @Mock - private CurrentUserService currentUserService; - - @Nested - class TestBuildGetVorgaengeStatisticResult { - - @BeforeEach - void beforeEach() { - when(remoteService.buildCountByStatusResultName(any())).thenCallRealMethod(); - } - - @Test - void shouldContainCountWiedervorlage() { - var statistic = service.buildGetVorgaengeStatisticResult( - Map.of(COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME, StatisticResultTestFactory.create())); - - assertThat(statistic.getWiedervorlagen()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainDefaultCountWiedervorlage() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of()); - - assertThat(statistic.getWiedervorlagen()).isZero(); - } - - @Test - void shouldContainExistsWiedervorlageOverdue() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME, - StatisticResultTestFactory.createBuilder().boolValue(true).build())); - - assertThat(statistic.isExistsWiedervorlageOverdue()).isTrue(); - } - - @Test - void shouldContainDefaultExistsWiedervorlageOverdue() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of()); - - assertThat(statistic.isExistsWiedervorlageOverdue()).isFalse(); - } - - @Test - void shouldContainCountByStatusNeu() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.NEU.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getNeu()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainCountByStatusAngenommen() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.ANGENOMMEN.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getAngenommen()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainCountByStatusInBearbeitung() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.IN_BEARBEITUNG.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getInBearbeitung()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainCountByStatusBeschieden() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.BESCHIEDEN.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getBeschieden()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainCountByStatusAbgeschlossen() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.ABGESCHLOSSEN.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getAbgeschlossen()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainCountByStatusVerworfen() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.VERWORFEN.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getVerworfen()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainCountByStatusZuLoeschen() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, VorgangStatus.ZU_LOESCHEN.name()), - StatisticResultTestFactory.create())); - - assertThat(statistic.getByStatus().getZuLoeschen()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - - @Test - void shouldContainDefaultCountByStatus() { - var statistic = service.buildGetVorgaengeStatisticResult(Map.of()); - - assertThat(statistic.getByStatus().getNeu()).isZero(); - } - - @Test - void shouldContainUngeleseneNachrichten() { - var statistic = service.buildGetVorgaengeStatisticResult( - Map.of(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME, StatisticResultTestFactory.create())); - - assertThat(statistic.getUngeleseneNachrichten()).isEqualTo(StatisticResultTestFactory.INT_VALUE); - } - } - - @Nested - class TestGetCountByVorgangStatusList { - - @Test - void shouldGetForVerwalungUser() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - - var result = service.getCountByVorgangStatusList(); - - assertThat(result).containsAll(COUNT_BY_VORGANG_STATUS_VERWALTUNG_USER); - } - - @Test - void shouldGetForPoststelleUser() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - - var result = service.getCountByVorgangStatusList(); - - assertThat(result).containsAll(COUNT_BY_VORGANG_STATUS_POSTSTELLE_USER); - } - - @Test - void shouldGetForEinheitlicherAnsprechpartnerUser() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - - var result = service.getCountByVorgangStatusList(); - - assertThat(result).containsAll(COUNT_BY_VORGANG_EINHEITLICHER_ANSPRECHPARTNER); - } - - @Test - void shouldGetForUnknownUser() { - when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - - var result = service.getCountByVorgangStatusList(); - - assertThat(result).containsAll(Collections.emptyList()); - } - } - - @Nested - class TestGetVorgaengeStatistics { - - private final Statistic statistic = StatisticTestFactory.create(); - private final Map<String, StatisticResult> getVorgangStatisticsResponse = Map.of(COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME, - StatisticResultTestFactory.create()); - - @BeforeEach - void beforeEach() { - doReturn(COUNT_BY_VORGANG_STATUS_VERWALTUNG_USER).when(service).getCountByVorgangStatusList(); - when(remoteService.getVorgaengeStatistics(COUNT_BY_VORGANG_STATUS_VERWALTUNG_USER)).thenReturn(getVorgangStatisticsResponse); - doReturn(statistic).when(service).buildGetVorgaengeStatisticResult(getVorgangStatisticsResponse); - } - - @Test - void shouldCallGetCountByVorgangStatusList() { - service.getVorgaengeStatistic(); - - verify(service).getCountByVorgangStatusList(); - } - - @Test - void shouldCallRemoteService() { - service.getVorgaengeStatistic(); - - verify(remoteService).getVorgaengeStatistics(COUNT_BY_VORGANG_STATUS_VERWALTUNG_USER); - } - - @Test - void shouldBuildResult() { - service.getVorgaengeStatistic(); - - verify(service).buildGetVorgaengeStatisticResult(getVorgangStatisticsResponse); - } - - @Test - void shouldReturnStatistic() { - var result = service.getVorgaengeStatistic(); - - assertThat(result).isEqualTo(statistic); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticTestFactory.java deleted file mode 100644 index 0cca76f591196765c5842d4da42b411c77d326fa..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.statistic; - -public class StatisticTestFactory { - - public static final int COUNT_WIEDERVORLAGEN = 8; - public static final boolean EXISTS_WIEDERVORLAGE_OVERDUE = true; - public static final int COUNT_UNGELESENE_NACHRICHTEN = 5; - - public static Statistic create() { - return createBuilder().build(); - } - - public static Statistic.StatisticBuilder createBuilder() { - return Statistic.builder() - .byStatus(ByStatusTestFactory.create()) - .wiedervorlagen(COUNT_WIEDERVORLAGEN) - .existsWiedervorlageOverdue(EXISTS_WIEDERVORLAGE_OVERDUE) - .ungeleseneNachrichten(COUNT_UNGELESENE_NACHRICHTEN); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/system/GrpcGetSystemStatusResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/system/GrpcGetSystemStatusResponseTestFactory.java deleted file mode 100644 index 7a8a518e89d92869a018b5b574303da8645a417e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/system/GrpcGetSystemStatusResponseTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import de.ozgcloud.vorgang.system.GrpcGetSystemStatusResponse; - -public class GrpcGetSystemStatusResponseTestFactory { - - public static GrpcGetSystemStatusResponse create() { - return createBuilder().build(); - } - - public static GrpcGetSystemStatusResponse.Builder createBuilder() { - return GrpcGetSystemStatusResponse.newBuilder() - .setIsSearchServerAvailable(true) - .setJavaVersion(VorgangManagerSystemStatusTestFactory.JAVA_VERSION) - .setBuildVersion(VorgangManagerSystemStatusTestFactory.BUILD_VERSION); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/system/RemoteSystemStatusMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/system/RemoteSystemStatusMapperTest.java deleted file mode 100644 index 260723e8c6b855d1e6ed1ce217d7400be5c71477..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/system/RemoteSystemStatusMapperTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class RemoteSystemStatusMapperTest { - - private RemoteSystemStatusMapper mapper = Mappers.getMapper(RemoteSystemStatusMapper.class); - - @Test - @DisplayName("should map gRPC response to VorgangManagerSystemStatus") - void shouldMapGrpcResponse() { - var vorgangManagerSystemStatus = mapper.fromGrpc(GrpcGetSystemStatusResponseTestFactory.create()); - - assertThat(vorgangManagerSystemStatus).isEqualTo(VorgangManagerSystemStatusTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/system/SystemStatusRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/system/SystemStatusRemoteServiceTest.java deleted file mode 100644 index 73db0e1ea0262801e4ec85b57c6996212fd978a5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/system/SystemStatusRemoteServiceTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.vorgang.system.GrpcGetSystemStatusRequest; -import de.ozgcloud.vorgang.system.SystemStatusServiceGrpc.SystemStatusServiceBlockingStub; - -class SystemStatusRemoteServiceTest { - - @InjectMocks - private SystemStatusRemoteService service; - - @Mock - private SystemStatusServiceBlockingStub serviceStub; - @Mock - private RemoteSystemStatusMapper mapper; - - @Nested - class TestGetSystemStatus { - - private static final GrpcGetSystemStatusRequest SYSTEM_STATUS_REQUEST = GrpcGetSystemStatusRequest.newBuilder().build(); - private static final VorgangManagerSystemStatus VORGANG_MANAGER_SYSTEM_STATUS = VorgangManagerSystemStatusTestFactory.create(); - - @BeforeEach - void init() { - when(mapper.fromGrpc(any())).thenReturn(VORGANG_MANAGER_SYSTEM_STATUS); - } - - @Test - void shouldCallRemoteService() { - service.getSystemStatus(); - - verify(serviceStub).getSystemStatus(SYSTEM_STATUS_REQUEST); - } - - @Test - void shouldGetSearchServerStatus() { - when(serviceStub.getSystemStatus(any())).thenReturn(GrpcGetSystemStatusResponseTestFactory.create()); - - var vorgangManagerSystemStatus = service.getSystemStatus(); - - assertThat(vorgangManagerSystemStatus).isEqualTo(VORGANG_MANAGER_SYSTEM_STATUS); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/system/SystemStatusServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/system/SystemStatusServiceTest.java deleted file mode 100644 index 3e87294ea1d1fa3240a04cea79f2eaee3c5ccb9a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/system/SystemStatusServiceTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -class SystemStatusServiceTest { - - @InjectMocks - private SystemStatusService service; - - @Mock - private SystemStatusRemoteService remoteService; - - @Nested - class TestIsSearchServerAvailable { - - @BeforeEach - void mockService() { - when(remoteService.getSystemStatus()).thenReturn(VorgangManagerSystemStatusTestFactory.create()); - } - - @Test - void shouldCallRemoteService() { - service.isSearchServerAvailable(); - - verify(remoteService).getSystemStatus(); - } - - @Test - void shouldRemotAvailablity() { - var result = service.isSearchServerAvailable(); - - assertThat(result).isEqualTo(VorgangManagerSystemStatusTestFactory.SEARCH_AVAILABLE); - } - - @Test - void shouldReturnFalseOnError() { - when(remoteService.getSystemStatus()).thenThrow(RuntimeException.class); - - var result = service.isSearchServerAvailable(); - - assertThat(result).isFalse(); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/system/VorgangManagerSystemStatusTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/system/VorgangManagerSystemStatusTestFactory.java deleted file mode 100644 index f55704003775b94ce42c325154fc66f9eeb3eff5..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/system/VorgangManagerSystemStatusTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.system; - -import de.ozgcloud.alfa.system.VorgangManagerSystemStatus.VorgangManagerSystemStatusBuilder; - -public class VorgangManagerSystemStatusTestFactory { - - public static final String JAVA_VERSION = "17"; - public static final String BUILD_VERSION = "b1"; - - public static final boolean SEARCH_AVAILABLE = true; - - public static VorgangManagerSystemStatus create() { - return createBuilder().build(); - } - - private static VorgangManagerSystemStatusBuilder createBuilder() { - return VorgangManagerSystemStatus.builder() - .isSearchServerAvailable(SEARCH_AVAILABLE) - .javaVersion(JAVA_VERSION) - .buildVersion(BUILD_VERSION); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/AntragstellerMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/AntragstellerMapperTest.java deleted file mode 100644 index ca35d3553a7583af4133ae2f870fcc4ff9e2e92a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/AntragstellerMapperTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.StringToNullMapper; -import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; - -class AntragstellerMapperTest { - - @InjectMocks - private final AntragstellerMapper mapper = Mappers.getMapper(AntragstellerMapper.class); - @Spy - private final GrpcFormDataMapper grpcFormDataMapper = Mappers.getMapper(GrpcFormDataMapper.class); - @Spy - private final StringToNullMapper stringToNullMapper = Mappers.getMapper(StringToNullMapper.class); - - @Test - void shouldMap() { - var antragsteller = mapper.toAntragsteller(GrpcAntragstellerTestFactory.create()); - - assertThat(antragsteller).usingRecursiveComparison().ignoringFields("otherData").isEqualTo(AntragstellerTestFactory.create()); - } - - @Test - void shouldCallGrpcFormDataMapper() { - mapper.toAntragsteller(GrpcAntragstellerTestFactory.create()); - - verify(grpcFormDataMapper).mapFromFormData(GrpcAntragstellerTestFactory.OTHER_DATA); - } - - @Test - void shouldCallStringToNullMapper() { - mapper.toAntragsteller(GrpcAntragstellerTestFactory.create()); - - verify(stringToNullMapper, atLeastOnce()).fromString(any()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/AntragstellerTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/AntragstellerTestFactory.java deleted file mode 100644 index 3828ff5941b7bd32f1473a62c12ea33128ef093f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/AntragstellerTestFactory.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Map; - -public class AntragstellerTestFactory { - - public final static String ANREDE = GrpcAntragstellerTestFactory.ANREDE; - public final static String NACHNAME = GrpcAntragstellerTestFactory.NACHNAME; - public final static String VORNAME = GrpcAntragstellerTestFactory.VORNAME; - public final static String GEBURTSDATUM_STR = GrpcAntragstellerTestFactory.GEBURTSDATUM_STR; - public final static String GEBURTSORT = GrpcAntragstellerTestFactory.GEBURTSORT; - public final static String GEBURTSNAME = GrpcAntragstellerTestFactory.GEBURTSNAME; - public final static String EMAIL = GrpcAntragstellerTestFactory.EMAIL; - public final static String TELEFON = GrpcAntragstellerTestFactory.TELEFON; - public final static String STRASSE = GrpcAntragstellerTestFactory.STRASSE; - public final static String HAUSNUMMER = GrpcAntragstellerTestFactory.HAUSNUMMER; - public final static String PLZ = GrpcAntragstellerTestFactory.PLZ; - public final static String ORT = GrpcAntragstellerTestFactory.ORT; - - public final static String POSTFACH_ID = GrpcAntragstellerTestFactory.POSTFACH_ID; - - public final static String OTHER_DATA_KEY = "Test"; - public final static String OTHER_DATA_VALUE = "Eintrag"; - - public static final Map<String, Object> OTHER_DATA = Map.of(OTHER_DATA_KEY, OTHER_DATA_VALUE); - - public static Antragsteller create() { - return createBuilder().build(); - } - - public static Antragsteller.AntragstellerBuilder createBuilder() { - return Antragsteller.builder() - .anrede(ANREDE) - .vorname(VORNAME) - .nachname(NACHNAME) - .geburtsdatum(GEBURTSDATUM_STR) - .geburtsname(GEBURTSNAME) - .geburtsort(GEBURTSORT) - .email(EMAIL) - .telefon(TELEFON) - .strasse(STRASSE) - .hausnummer(HAUSNUMMER) - .plz(PLZ) - .ort(ORT) - .postfachId(POSTFACH_ID) - .otherData(OTHER_DATA); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java deleted file mode 100644 index 815a95d45f20410e43a8b11c007468353946ae3c..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -class EingangHeaderMapperTest { - - private final EingangHeaderMapper mapper = Mappers.getMapper(EingangHeaderMapper.class); - - @DisplayName("To EingangHeader") - @Nested - class TestToEingangHeader { - - @Test - void shouldMapCreatedAt() { - var eingang = callMapper(); - - assertThat(eingang.getCreatedAt()).isEqualTo(GrpcEingangHeaderTestFactory.CREATED_AT); - } - - @Test - void shouldMapRequestId() { - var eingang = callMapper(); - - assertThat(eingang.getRequestId()).isEqualTo(GrpcEingangHeaderTestFactory.REQUEST_ID); - } - - @Test - void shouldMapFormEngineName() { - var eingang = callMapper(); - - assertThat(eingang.getFormEngineName()).isEqualTo(GrpcEingangHeaderTestFactory.FORM_ENGINE_NAME); - } - - private EingangHeader callMapper() { - return mapper.toEingangHeader(GrpcEingangHeaderTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java deleted file mode 100644 index d0f962b9d1fff8fdf9b848a58db3e05e196a859a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.ZonedDateTime; - -public class EingangHeaderTestFactory { - - public static final String CREATED_AT_STR = "2020-01-10T10:30:00Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - public static final String FORM_ENGINE_NAME = "AFM"; - public static final String FORM_ID = "test-form-id"; - - public static EingangHeader create() { - return createBuilder().build(); - } - - public static EingangHeader.EingangHeaderBuilder createBuilder() { - return EingangHeader.builder().createdAt(CREATED_AT).formEngineName(FORM_ENGINE_NAME).formId(FORM_ID); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangMapperTest.java deleted file mode 100644 index 71d11107a48f11dfd1f7704b7b57b2f96ca7b066..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangMapperTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; - -class EingangMapperTest { - - @InjectMocks - private final EingangMapper mapper = Mappers.getMapper(EingangMapper.class); - - @Mock - private AntragstellerMapper antragstellerMapper; - @Mock - private EingangHeaderMapper eingangHeaderMapper; - @Spy - private final GrpcFormDataMapper formDataMapper = Mappers.getMapper(GrpcFormDataMapper.class); - - @DisplayName("From grpc") - @Nested - class TestFromGrpc { - - @BeforeEach - void mockMapperReturnValues() { - lenient().when(antragstellerMapper.toAntragsteller(any())).thenReturn(AntragstellerTestFactory.create()); - lenient().when(eingangHeaderMapper.toEingangHeader(any())).thenReturn(EingangHeaderTestFactory.create()); - } - - @Test - void shouldMapIdToId() { - var eingang = fromGrpc(); - - assertThat(eingang.getId()).isEqualTo(GrpcEingangTestFactory.ID); - } - - @Test - void shouldHaveAntragsteller() { - var eingang = fromGrpc(); - - assertThat(eingang.getAntragsteller()).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create()); - } - - @Test - void shouldHaveEingangHeader() { - var eingang = fromGrpc(); - - assertThat(eingang.getHeader()).usingRecursiveComparison().isEqualTo(EingangHeaderTestFactory.create()); - } - - private Eingang fromGrpc() { - return fromGrpc(GrpcEingangTestFactory.create()); - } - - private Eingang fromGrpc(GrpcEingang eingang) { - return mapper.fromGrpc(GrpcEingangTestFactory.create()); - } - } - - @DisplayName("With") - @Nested - class TestWithEmpty { - - @DisplayName("empty eingang") - @Nested - class TestEingang { - - @Test - void shouldProceedFromGrpcMapping() { - var eingang = mapper.fromGrpc(GrpcEingang.newBuilder().build()); - - assertThat(eingang.getAntragsteller()).isNull(); - assertThat(eingang.getHeader()).isNull(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangTestFactory.java deleted file mode 100644 index 7fdd289611568e838c938ebbc0ba28de43ca0509..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangTestFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Map; -import java.util.UUID; - -public class EingangTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - - public static final String SINGLE_FIELD_NAME = "name"; - public static final String SINGLE_FIELD_VALUE = "Thea"; - public static final String NUMERIC_FIELD_NAME = "alter"; - public static final Integer NUMERIC_FIELD_VALUE = 42; - - public static final String SUBFORM_FIELD_NAME = "E-Mail"; - public static final String SUBFORM_FIELD_VALUE = "thea@burger-portal.sh.de"; - public static final String SUBFORM_NAME = "kontakt"; - public static final Map<String, Object> SUBFORM = Map.of(SUBFORM_FIELD_NAME, SUBFORM_FIELD_VALUE); - - public static final Map<String, Object> AS_MAP = Map.of(SINGLE_FIELD_NAME, SINGLE_FIELD_VALUE, NUMERIC_FIELD_NAME, NUMERIC_FIELD_VALUE, SUBFORM_NAME, SUBFORM); - - public static Eingang create() { - return createBuilder().build(); - } - - public static Eingang.EingangBuilder createBuilder() { - return Eingang.builder() - .id(ID) - .antragsteller(AntragstellerTestFactory.create()) - .header(EingangHeaderTestFactory.create()) - .zustaendigeStelle(ZustaendigeStelleTestFactory.create()) - .formData(AS_MAP); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/FilterCriteriaTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/FilterCriteriaTestFactory.java deleted file mode 100644 index 26260de64895de4f711bc175f539a05bc983c932..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/FilterCriteriaTestFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; -import java.util.Optional; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -public class FilterCriteriaTestFactory { - - public static final boolean FILTER_BY_ORGANISATIONS_EINHEITEN_ID = true; - public static final boolean FILTER_BY_ASSIGNED_TO = true; - public static final VorgangStatus VORGANG_STATUS = VorgangStatus.NEU; - public static final String ORGANISATIONS_EINHEIT_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - public static final boolean HAS_NEXT_WIEDERVORLAGE_FRIST = false; - public static final boolean HAS_UNGELESENE_NACHRICHTEN = false; - - public static FilterCriteria create() { - return createBuilder().build(); - } - - public static FilterCriteria.FilterCriteriaBuilder createBuilder() { - return FilterCriteria.builder() - .filterByOrganisationseinheitenId(FILTER_BY_ORGANISATIONS_EINHEITEN_ID) - .status(Optional.of(VORGANG_STATUS)) - .filterByAssignedTo(FILTER_BY_ASSIGNED_TO) - .assignedTo(Optional.of(UserProfileTestFactory.ID)) - .organisationsEinheitenId(List.of(ORGANISATIONS_EINHEIT_ID)) - .hasNextWiedervorlageFrist(HAS_NEXT_WIEDERVORLAGE_FRIST) - .hasUngeleseneNachrichten(HAS_UNGELESENE_NACHRICHTEN); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/FindVorgaengeRequestCriteriaTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/FindVorgaengeRequestCriteriaTestFactory.java deleted file mode 100644 index 9c55be49382d9452b665e5a527790b38a2f46f94..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/FindVorgaengeRequestCriteriaTestFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.Optional; - -import com.thedeanda.lorem.LoremIpsum; - -public class FindVorgaengeRequestCriteriaTestFactory { - - public static final int PAGE = 0; - public static final int LIMIT = 100; - public static final String SEARCH_BY = LoremIpsum.getInstance().getWords(2); - public static final OrderBy ORDER_BY = OrderBy.PRIORITY; - - public static FindVorgaengeHeaderRequestCriteria create() { - return createBuilder().build(); - } - - public static FindVorgaengeHeaderRequestCriteria.FindVorgaengeHeaderRequestCriteriaBuilder createBuilder() { - return FindVorgaengeHeaderRequestCriteria.builder() - .page(PAGE) - .limit(LIMIT) - .searchBy(Optional.of(SEARCH_BY)) - .orderBy(ORDER_BY) - .filterCriteria(FilterCriteriaTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcAntragstellerTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcAntragstellerTestFactory.java deleted file mode 100644 index 121dd339cdbdec5cc3cca51f48b017b2c990089d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcAntragstellerTestFactory.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller; -import de.ozgcloud.vorgang.vorgang.GrpcFormData; -import de.ozgcloud.vorgang.vorgang.GrpcFormField; - -public class GrpcAntragstellerTestFactory { - - public final static String ANREDE = "HERR/FRAU"; - public final static String NACHNAME = LoremIpsum.getInstance().getLastName(); - public final static String VORNAME = LoremIpsum.getInstance().getFirstName(); - public final static String GEBURTSDATUM_STR = "21.03.1995"; - public final static String GEBURTSORT = LoremIpsum.getInstance().getCountry(); - public final static String GEBURTSNAME = LoremIpsum.getInstance().getFirstName(); - public final static String EMAIL = LoremIpsum.getInstance().getEmail(); - public static final String TELEFON = "+ 49 4621 9654"; - public static final String STRASSE = "Lachstrasse"; - public static final String HAUSNUMMER = "8484"; - public static final String PLZ = "12345"; - public static final String ORT = "Wohlfuehlhausen"; - public static final String POSTFACH_ID = UUID.randomUUID().toString(); - - public final static GrpcFormData OTHER_DATA = GrpcFormData.newBuilder() - .addField(GrpcFormField.newBuilder() - .setName(AntragstellerTestFactory.OTHER_DATA_KEY) - .setValue(AntragstellerTestFactory.OTHER_DATA_VALUE).build()) - .build(); - - public static GrpcAntragsteller create() { - return createBuilder().build(); - } - - public static GrpcAntragsteller.Builder createBuilder() { - return GrpcAntragsteller.newBuilder() - .setAnrede(ANREDE) - .setGeburtsdatum(GEBURTSDATUM_STR) - .setNachname(NACHNAME) - .setVorname(VORNAME) - .setGeburtsname(GEBURTSNAME) - .setGeburtsort(GEBURTSORT) - .setEmail(EMAIL) - .setTelefon(TELEFON) - .setStrasse(STRASSE) - .setHausnummer(HAUSNUMMER) - .setPlz(PLZ) - .setOrt(ORT) - .setPostfachId(POSTFACH_ID) - .setOtherData(OTHER_DATA); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcClientAttributeTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcClientAttributeTestFactory.java deleted file mode 100644 index 658647a55dcc1fe5920664b4e4ca6827da92dc12..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcClientAttributeTestFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.common.callcontext.CallContextTestFactory; -import de.ozgcloud.alfa.common.clientattribute.ClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute.Builder; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; - -class GrpcClientAttributeTestFactory { - - static final String CLIENT = CallContextTestFactory.CLIENT_NAME; - static final GrpcAccessPermission ACCESS = GrpcAccessPermission.READ_WRITE; - - static final GrpcClientAttribute create() { - return createBuilder().build(); - } - - static final Builder createBuilder() { - return GrpcClientAttribute.newBuilder() - .setClientName(CLIENT) - .setAccess(ACCESS); - } - - static final GrpcClientAttribute createWith(ClientAttribute clientAttribute, boolean value) { - return createBuilder().setAttributeName(clientAttribute.getAttributeName()) - .setClientName(clientAttribute.getClientName().toString()) - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()) - .build(); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java deleted file mode 100644 index f41d637242c11d30b954605b01ab96709c715e20..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.vorgang.vorgang.GrpcEingangHeader; - -public class GrpcEingangHeaderTestFactory { - - public final static String REQUEST_ID = UUID.randomUUID().toString(); - private final static String CREATED_AT_STR = "2021-01-10T10:30:00Z"; - public final static ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - private final static String FORM_ID = UUID.randomUUID().toString(); - public final static String FORM_NAME = LoremIpsum.getInstance().getWords(1); - private final static String SENDER = LoremIpsum.getInstance().getName(); - private final static String CUSTOMER = LoremIpsum.getInstance().getName(); - private final static String CUSTOMER_ID = UUID.randomUUID().toString(); - private final static String CLIENT = LoremIpsum.getInstance().getName(); - private final static String CLIENT_ID = UUID.randomUUID().toString(); - public final static String FORM_ENGINE_NAME = "AFM"; - - public static GrpcEingangHeader create() { - return createBuilder().build(); - } - - public static GrpcEingangHeader.Builder createBuilder() { - return GrpcEingangHeader.newBuilder() - .setRequestId(REQUEST_ID) - .setCreatedAt(CREATED_AT_STR) - .setFormId(FORM_ID) - .setFormName(FORM_NAME) - .setSender(SENDER) - .setCustomer(CUSTOMER) - .setCustomerId(CUSTOMER_ID) - .setClient(CLIENT) - .setClientId(CLIENT_ID) - .setFormEngineName(FORM_ENGINE_NAME); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangTestFactory.java deleted file mode 100644 index 2a3e8adc401c02982920dd1fde2b25f26d0058a0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangTestFactory.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.UUID; - -import de.ozgcloud.vorgang.vorgang.GrpcEingang; -import de.ozgcloud.vorgang.vorgang.GrpcFormData; -import de.ozgcloud.vorgang.vorgang.GrpcSubForm; - -public class GrpcEingangTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final GrpcSubForm SUB_FORM = GrpcSubFormTestFactory.create(); - - public static GrpcEingang create() { - return createBuilder().build(); - } - - public static GrpcEingang.Builder createBuilder() { - return GrpcEingang.newBuilder() - .setId(ID) - .setHeader(GrpcEingangHeaderTestFactory.create()) - .setAntragsteller(GrpcAntragstellerTestFactory.create()) - .setFormData(GrpcFormData.newBuilder().addForm(GrpcSubFormTestFactory.create()).build()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFilterByTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFilterByTestFactory.java deleted file mode 100644 index 2e506c47bb6e8649dfa1cb2f9dbfd95a02dc71df..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFilterByTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.vorgang.vorgang.GrpcFilterBy; - -public class GrpcFilterByTestFactory { - - static final boolean FILTER_BY_ORGANISATIONSEINHEITEN_ID = true; - - public static GrpcFilterBy create() { - return createBuilder().build(); - } - - public static GrpcFilterBy.Builder createBuilder() { - return GrpcFilterBy.newBuilder() - .setFilterByOrganisationseinheitenId(FILTER_BY_ORGANISATIONSEINHEITEN_ID) - .addStatus(VorgangStatus.NEU.name()) - .addOrganisationseinheitId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFindVorgangRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFindVorgangRequestTestFactory.java deleted file mode 100644 index 2785bb9851f77c74a4081e144ee0d2b96f5dd6c0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFindVorgangRequestTestFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.FindVorgaengeRequestCriteriaTestFactory.*; - -import de.ozgcloud.vorgang.vorgang.GrpcFilterBy; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; - -public class GrpcFindVorgangRequestTestFactory { - - final static GrpcFilterBy FILTER_BY = GrpcFilterByTestFactory.create(); - static final int OFFSET = 50; - - public static GrpcFindVorgangRequest create() { - return createBuilder().build(); - } - - public static GrpcFindVorgangRequest.Builder createBuilder() { - return GrpcFindVorgangRequest.newBuilder() - .setFilterBy(FILTER_BY) - .setSearchBy(SEARCH_BY) - .setLimit(LIMIT) - .setOffset(OFFSET); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFormDataMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFormDataMapperTest.java deleted file mode 100644 index 8ef7cad82a2633a729bb5fd7daffcbd084c1cbf1..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFormDataMapperTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; -import de.ozgcloud.vorgang.vorgang.GrpcFormData; -import de.ozgcloud.vorgang.vorgang.GrpcFormField; -import de.ozgcloud.vorgang.vorgang.GrpcSubForm; - -class GrpcFormDataMapperTest { - - @InjectMocks - private GrpcFormDataMapper MAPPER_INSTANCE = Mappers.getMapper(GrpcFormDataMapper.class); - - @Mock - private GrpcFormDataMapper grpcFormDataMapper; - - @BeforeEach - void mockMapperReturnValues() { - lenient().when(grpcFormDataMapper.mapToFormData(any())) - .thenReturn(GrpcFormData.newBuilder().addField(GrpcFormFieldTestFactory.create()).build()); - } - - @Nested - class TestSimpleValueMapping { - - @Test - void shouldHaveField() { - - GrpcFormData formData = MAPPER_INSTANCE.mapToFormData(Map.of("key", "value")); - - assertThat(formData.getFieldList()).hasSize(1); - } - - @Test - void shouldNotHaveSubForms() { - - GrpcFormData formData = MAPPER_INSTANCE.mapToFormData(Map.of("key", "value")); - - assertThat(formData.getFormList()).isEmpty(); - } - - @Test - void shouldHaveNameField() { - - GrpcFormData formData = MAPPER_INSTANCE.mapToFormData(Map.of("key", "value")); - - assertThat(formData.getField(0).getName()).isEqualTo("key"); - assertThat(formData.getField(0).getValue()).isEqualTo("value"); - } - } - - @Nested - class TestSubFormMapping { - - @Test - void shouldHaveSubForm() { - - GrpcFormData formData = MAPPER_INSTANCE.mapToFormData(Map.of("key", Map.of("subKey", "value"))); - - assertThat(formData.getFormList()).hasSize(1); - } - - @Test - void shouldNotHaveFields() { - - GrpcFormData formData = MAPPER_INSTANCE.mapToFormData(Map.of("key", Map.of("subKey", "value"))); - - assertThat(formData.getFieldList()).isEmpty(); - } - - @Test - void shouldHaveSubFormField() { - - GrpcFormData formData = MAPPER_INSTANCE.mapToFormData(Map.of("key", Map.of("subKey", "value"))); - - assertThat(formData.getForm(0).getFieldList()).hasSize(1); - assertThat(formData.getForm(0).getTitle()).isEqualTo("key"); - assertThat(formData.getForm(0).getField(0).getName()).isEqualTo("subKey"); - assertThat(formData.getForm(0).getField(0).getValue()).isEqualTo("value"); - } - } - - @Nested - class TestMapStringListsToFields { - - @Test - void emptyMapShouldNotBeMapped() { - - List<GrpcFormField> fields = MAPPER_INSTANCE.mapStringListsToFields(Collections.emptyMap()); - - assertThat(fields).isEmpty(); - } - - @Test - void simpleValueShouldNotBeMapped() { - - List<GrpcFormField> fields = MAPPER_INSTANCE.mapStringListsToFields(Map.of("a", "b")); - - assertThat(fields).isEmpty(); - } - - @Test - void listObjectValuesShouldBeMapped() { - - List<GrpcFormField> fields = MAPPER_INSTANCE.mapStringListsToFields(Map.of("key", List.of("value1", "value2"))); - - assertThat(fields).hasSize(2); - assertThat(fields.get(0).getName()).isEqualTo("key"); - assertThat(fields.get(0).getValue()).isEqualTo("value1"); - - assertThat(fields.get(1).getName()).isEqualTo("key"); - assertThat(fields.get(1).getValue()).isEqualTo("value2"); - } - } - - @Nested - class TestMapObjectListsToFields { - - @Test - void simpleValueShouldNotBeMapped() { - - List<GrpcSubForm> fields = MAPPER_INSTANCE.mapObjectListsToFields(Map.of("a", "b")); - - assertThat(fields).isEmpty(); - } - - @Test - void listOfSimpleValueShouldNotBeMapped() { - - List<GrpcSubForm> fields = MAPPER_INSTANCE.mapObjectListsToFields(Map.of("a", List.of("l1", "l2"))); - - assertThat(fields).isEmpty(); - } - - @Test - void listOfObjectsShouldBeMappedToSubForms() { - - List<GrpcSubForm> fields = MAPPER_INSTANCE - .mapObjectListsToFields(Map.of("key", List.of(Collections.emptyMap(), Collections.emptyMap()))); - - assertThat(fields).hasSize(2); - } - - @Test - void listOfObjectsShouldMappedToSubFormTitle() { - - List<GrpcSubForm> fields = MAPPER_INSTANCE - .mapObjectListsToFields(Map.of("key", List.of(Collections.emptyMap(), Collections.emptyMap()))); - - assertThat(fields.get(0).getTitle()).isEqualTo("key"); - assertThat(fields.get(1).getTitle()).isEqualTo("key"); - } - - @Test - void listOfObjectsShouldBeMapped() { - - List<GrpcSubForm> fields = MAPPER_INSTANCE - .mapObjectListsToFields(Map.of("key", List.of(Map.of("a1", "a2")))); - - assertThat(fields.get(0).getFieldCount()).isEqualTo(1); - assertThat(fields.get(0).getField(0).getName()).isEqualTo("a1"); - assertThat(fields.get(0).getField(0).getValue()).isEqualTo("a2"); - } - - @Test - void doubleNestedListObjectValuesShouldBeMapped() { - GrpcFormData formData = MAPPER_INSTANCE - .mapToFormData(Map.of("key1", Map.of("key2", List.of("value1", "value2")))); - - assertThat(formData.getForm(0).getFieldCount()).isEqualTo(2); - } - - @Test - void multipleNestedListObjectValuesShouldBeMapped() { - GrpcFormData formData = MAPPER_INSTANCE - .mapToFormData(Map.of("key1", Map.of("key2", Map.of("key3", List.of("value1", "value2"))))); - - assertThat(formData.getForm(0).getSubForm(0).getFieldCount()).isEqualTo(2); - } - } - - @Nested - class TestMapListOfMixedValuesInFormData { - - @Test - void shouldMapListOfStrings() { - - GrpcFormData formData = MAPPER_INSTANCE - .mapToFormData(Map.of("key", List.of("value1", "value2", Map.of("internKey1", "internValue1")))); - - assertThat(formData.getFieldCount()).isEqualTo(2); - assertThat(formData.getFormCount()).isEqualTo(1); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFormFieldTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFormFieldTestFactory.java deleted file mode 100644 index 5390df9fef91767bf9b16dee4ae15ef322311d1e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcFormFieldTestFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcFormField; - -public class GrpcFormFieldTestFactory { - - public static final String TEST_NAME = "name"; - public static final String TEST_VALUE = "value"; - - public static GrpcFormField create() { - return createBuilder().build(); - } - - private static GrpcFormField.Builder createBuilder() { - return GrpcFormField.newBuilder() - .setName(TEST_NAME) - .setValue(TEST_VALUE); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcLockTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcLockTestFactory.java deleted file mode 100644 index b8f28d98535105c457b34f1c3d6b8ce4f2e56951..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcLockTestFactory.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcLock; - -class GrpcLockTestFactory { - - public static GrpcLock create() { - return createBuilder().build(); - } - - public static GrpcLock.Builder createBuilder() { - return GrpcLock.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcQueryTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcQueryTestFactory.java deleted file mode 100644 index ba2578462f88cf2a75865b559999305074294593..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcQueryTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcQuery; - -public class GrpcQueryTestFactory { - - public static GrpcQuery create() { - return createBuilder().build(); - } - - public static GrpcQuery.Builder createBuilder() { - return GrpcQuery.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcServiceKontoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcServiceKontoTestFactory.java deleted file mode 100644 index bbf0d7241f41592c923742776617d98b9d37a4f0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcServiceKontoTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.postfach.GrpcPostfachAddressTestFactory; -import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto; - -public class GrpcServiceKontoTestFactory { - - public static GrpcServiceKonto create() { - return createBuilder().build(); - } - - public static GrpcServiceKonto.Builder createBuilder() { - return GrpcServiceKonto.newBuilder() - .setType(ServiceKontoTestFactory.TYPE) - .addPostfachAddresses(GrpcPostfachAddressTestFactory.create()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcSubFormTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcSubFormTestFactory.java deleted file mode 100644 index 344fa9ea9cbe426b70a6599f0b30ac50292be273..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcSubFormTestFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcFormField; -import de.ozgcloud.vorgang.vorgang.GrpcSubForm; - -public class GrpcSubFormTestFactory { - - public static final String TITLE = "person"; - - public static final String FIELD_NAME = EingangTestFactory.SINGLE_FIELD_NAME; - public static final String FIELD_VALUE = EingangTestFactory.SINGLE_FIELD_VALUE; - - public static final String SUBFORM_NAME = EingangTestFactory.SUBFORM_NAME; - public static final String SUBFORM_FIELD_NAME = EingangTestFactory.SUBFORM_FIELD_NAME; - public static final String SUBFORM_FIELD_VALUE = EingangTestFactory.SUBFORM_FIELD_VALUE; - - public static GrpcSubForm create() { - return createBuilder().build(); - } - - public static GrpcSubForm.Builder createBuilder() { - return GrpcSubForm.newBuilder() - .setTitle(TITLE) - .addField(GrpcFormField.newBuilder().setName(FIELD_NAME).setValue(FIELD_VALUE).build()) - .addSubForm(GrpcSubForm.newBuilder().setTitle(SUBFORM_NAME).addField( - GrpcFormField.newBuilder().setName(SUBFORM_FIELD_NAME).setValue(SUBFORM_FIELD_VALUE).build())); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangAttachedItemTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangAttachedItemTestFactory.java deleted file mode 100644 index 320ab3992636c2491895e6dc22f9742c0e6fa5c9..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangAttachedItemTestFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.common.GrpcProperty; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; - -public class GrpcVorgangAttachedItemTestFactory { - - public static final GrpcObject ITEM = GrpcObject.newBuilder() - .addProperty(GrpcProperty.newBuilder() - .setName(VorgangAttachedItemTestFactory.ITEM_KEY) - .addValue(VorgangAttachedItemTestFactory.ITEM_VALUE) - .build()) - .build(); - - public static GrpcVorgangAttachedItem create() { - return createBuilder().build(); - } - - public static GrpcVorgangAttachedItem.Builder createBuilder() { - return GrpcVorgangAttachedItem.newBuilder() - .setId(VorgangAttachedItemTestFactory.ID) - .setClient(VorgangAttachedItemTestFactory.CLIENT) - .setVorgangId(VorgangHeaderTestFactory.ID) - .setItemName(VorgangAttachedItemTestFactory.ITEM_NAME) - .setItem(ITEM) - .setVersion(VorgangAttachedItemTestFactory.VERSION); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangHeadTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangHeadTestFactory.java deleted file mode 100644 index b11ce836e7bf43f9c4ff85bcc3d5d73a9a8886fa..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangHeadTestFactory.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHead; - -class GrpcVorgangHeadTestFactory { - - public static GrpcVorgangHead create() { - return createBuilder().build(); - } - - public static GrpcVorgangHead.Builder createBuilder() { - return GrpcVorgangHead.newBuilder(); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangHeaderTestFactory.java deleted file mode 100644 index 8c29adb1aa652663f4f8600230f409e51323b562..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangHeaderTestFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory.*; - -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; - -public class GrpcVorgangHeaderTestFactory { - - public static GrpcVorgangHeader create() { - return createBuilder().build(); - } - - public static GrpcVorgangHeader.Builder createBuilder() { - return GrpcVorgangHeader.newBuilder() - .setNummer(NUMMER) - .setCreatedAt(CREATED_AT_STR) - .setAktenzeichen(AKTENZEICHEN) - .setAssignedTo(ASSIGNED_TO) - .setName(NAME) - .setStatus(STATUS.name()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangTestFactory.java deleted file mode 100644 index 84c1f1032fda779c7a05c75c6d547183c423fbd8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangTestFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.time.LocalDateTime; -import java.util.UUID; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; - -public class GrpcVorgangTestFactory { - - private static final int TOTAL = 100; - - private static final String ID = UUID.randomUUID().toString(); - private static final String NAME = LoremIpsum.getInstance().getWords(10); - private static final String CREATED_AT = LocalDateTime.now().toString(); - private static final String STATUS = "NEU"; - private static final String NUMMER = "VorgangNummer123"; - - public static GrpcFindVorgangResponse createVorgangResponse() { - return createVorgangResponseBuilder().build(); - } - - private static GrpcFindVorgangResponse.Builder createVorgangResponseBuilder() { - return GrpcFindVorgangResponse.newBuilder() - .setTotal(TOTAL) - .addVorgang(create()); - } - - private static GrpcVorgangHeader create() { - return createBuilder().build(); - } - - private static GrpcVorgangHeader.Builder createBuilder() { - return GrpcVorgangHeader.newBuilder() - .setId(ID) - .setName(NAME) - .setNummer(NUMMER) - .setCreatedAt(CREATED_AT) - .setStatus(STATUS); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangWithEingangResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangWithEingangResponseTestFactory.java deleted file mode 100644 index 4587533e83eeaa160b5402770cea15325eee0559..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangWithEingangResponseTestFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse; - -class GrpcVorgangWithEingangResponseTestFactory { - - static GrpcFindVorgangWithEingangResponse createVorgangWithEingangResponse() { - return createVorgangWithEingangResponseBuilder().build(); - } - - private static GrpcFindVorgangWithEingangResponse.Builder createVorgangWithEingangResponseBuilder() { - return GrpcFindVorgangWithEingangResponse.newBuilder().setVorgangWithEingang(GrpcVorgangWithEingangTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangWithEingangTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangWithEingangTestFactory.java deleted file mode 100644 index 4d7328845dc47fca9167c505e85b95006aadd00e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcVorgangWithEingangTestFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory.*; - -import de.ozgcloud.alfa.common.clientattribute.ClientAttribute; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang; - -class GrpcVorgangWithEingangTestFactory { - - static GrpcVorgangWithEingang create() { - return createBuilder().build(); - } - - static GrpcVorgangWithEingang createWithEingang(GrpcEingang eingang) { - return createBuilder().setEingang(eingang).build(); - } - - static GrpcVorgangWithEingang.Builder createBuilder() { - return GrpcVorgangWithEingang.newBuilder() - .setStatus(STATUS.name()) - .setNummer(NUMMER) - .setAktenzeichen(AKTENZEICHEN) - .setAssignedTo(ASSIGNED_TO) - .setCreatedAt(CREATED_AT_STR) - .clearClientAttributes() - .addClientAttributes(GrpcClientAttributeTestFactory.createWith(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, true)) - .setEingang(GrpcEingangTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcZustaendigeStelleTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcZustaendigeStelleTestFactory.java deleted file mode 100644 index 750847635dbabbd7c3445ae0a01e9b6a1019a0dc..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcZustaendigeStelleTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; - -public class GrpcZustaendigeStelleTestFactory { - private static final String EMAIL = ZustaendigeStelleTestFactory.EMAIL; - private static final String ORGANISATIONSEINHEITEN_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID; - - public static GrpcZustaendigeStelle create() { - return createBuilder().build(); - } - - public static GrpcZustaendigeStelle.Builder createBuilder() { - return GrpcZustaendigeStelle.newBuilder() - .setEmail(EMAIL) - .setOrganisationseinheitenId(ORGANISATIONSEINHEITEN_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java deleted file mode 100644 index 96f08f793d99849a616a42b1f5eec827c8905894..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; -import de.ozgcloud.common.test.TestUtils; - -public class RedirectRequestTestFactory { - - public static final String EMAIL = "test@ozg-sh.de"; - public static final String PASSWORD_AS_STR = "ValidesPassword"; - public static final char[] PASSWORD = PASSWORD_AS_STR.toCharArray(); - - public static RedirectRequest create() { - return createBuilder().build(); - } - - public static RedirectRequest.RedirectRequestBuilder createBuilder() { - return RedirectRequest.builder() - .email(EMAIL) - .password(PASSWORD); - } - - public static String createRedirectRequestContent(CreateCommand command) { - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl", - command.getCommandOrder().name(), - TestUtils.addQuote(command.getRedirectRequest().getEmail()), - TestUtils.addQuote(String.valueOf(command.getRedirectRequest().getPassword()))); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ServiceKontoMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ServiceKontoMapperTest.java deleted file mode 100644 index b8ca43838277e000853ecf15f5e6bf6698639bec..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ServiceKontoMapperTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import de.ozgcloud.alfa.postfach.GrpcPostfachAddressTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class ServiceKontoMapperTest { - - @InjectMocks - private ServiceKontoMapper mapper = Mappers.getMapper(ServiceKontoMapper.class); - @Spy - private GrpcObjectMapper grpcObjectMapper = Mappers.getMapper(GrpcObjectMapper.class); - - @DisplayName("From serviceKonto") - @Nested - class TestFromServiceKonto { - - @Test - void shouldMap() { - var serviceKonto = fromServiceKonto(); - - assertThat(serviceKonto).usingRecursiveComparison().isEqualTo(ServiceKontoTestFactory.create()); - } - - @Test - void shouldCallGrpcObjectMapper() { - fromServiceKonto(); - - verify(grpcObjectMapper).mapFromGrpc(GrpcPostfachAddressTestFactory.createStringBasedIdentifier()); - } - - private ServiceKonto fromServiceKonto() { - return mapper.fromServiceKonto(GrpcServiceKontoTestFactory.create()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ServiceKontoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ServiceKontoTestFactory.java deleted file mode 100644 index 53e485ae9eb78e7d1bbb9f9a8853d037b467f9a8..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ServiceKontoTestFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.postfach.PostfachAddressTestFactory; - -public class ServiceKontoTestFactory { - - public static final String TYPE = "OSI"; - - public static ServiceKonto create() { - return createBuilder().build(); - } - - public static ServiceKonto.ServiceKontoBuilder createBuilder() { - return ServiceKonto.builder() - .type(TYPE) - .postfachAddress(PostfachAddressTestFactory.create()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangAuthorizationServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangAuthorizationServiceTest.java deleted file mode 100644 index 3d2c55320cd1e02891163650cae3fcc5888d768d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangAuthorizationServiceTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -class VorgangAuthorizationServiceTest { - - @InjectMocks - private VorgangAuthorizationService service; - @Mock - private CurrentUserService userService; - - @Nested - class TestVerifyByUserRole { - - @Nested - class TestForVerwaltungPoststelle { - - @BeforeEach - void mockUserRole() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - } - - @DisplayName("should return true by vorgangstatus 'Neu'") - @Test - void shouldReturnTrue() { - var authorized = service.verifyByUserRole(VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.NEU).build()); - - assertThat(authorized).isTrue(); - } - - @DisplayName("should return false by other vorgangstatus then 'Neu'") - @ParameterizedTest - @EnumSource(value = VorgangStatus.class, names = { "ANGENOMMEN", "VERWORFEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", - "WEITERGELEITET" }) - void shouldReturnFalse(VorgangStatus status) { - var authorized = service.verifyByUserRole(VorgangWithEingangTestFactory.createBuilder().status(status).build()); - - assertThat(authorized).isFalse(); - } - } - - @Nested - class TestForOtherRoles { - - @BeforeEach - void mockUserRole() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - } - - @DisplayName("should return true on role 'VERWALTUNG_USER' independent which vorgangstatus") - @ParameterizedTest - @EnumSource(value = VorgangStatus.class, names = { "NEU", "ANGENOMMEN", "VERWORFEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", - "WEITERGELEITET" }) - void shouldReturnTrue(VorgangStatus status) { - var authorized = service.verifyByUserRole(VorgangWithEingangTestFactory.createBuilder().status(status).build()); - - assertThat(authorized).isTrue(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java deleted file mode 100644 index d916fca57012f1ecab9d21af08457d73be29b688..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.hamcrest.core.StringEndsWith; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.bescheid.BescheidService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.clientattribute.ClientAttributeService; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserService; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.statistic.ByStatusTestFactory; -import de.ozgcloud.alfa.statistic.StatisticController; -import de.ozgcloud.alfa.statistic.StatisticTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class VorgangControllerITCase { - - @MockBean - private VorgangRemoteService remoteService; - @MockBean - private CommandController commandController; - @MockBean - private ForwardingController forwardingController; - @MockBean - private PostfachMailController postfachMailController; - @MockBean - private ClientAttributeService clientAttributeService; - @MockBean - private StatisticController statisticController; - @MockBean - private VorgangAttachedItemService vorgangAttachedItemService; - @MockBean - private CurrentUserService currentUserService; - @MockBean - private UserService userService; - @MockBean - private BescheidService bescheidService; - - @Autowired - private MockMvc mockMvc; - - @BeforeEach - void mock() { - when(currentUserService.getUser()).thenReturn(UserProfileTestFactory.create()); - when(userService.getInternalId(any())).thenReturn(Optional.of(UserProfileTestFactory.INTERNAL_ID)); - when(statisticController.getVorgaengeStatistic()).thenReturn(StatisticTestFactory.create()); - when(vorgangAttachedItemService.findLoeschAnforderung(anyString())).thenReturn(Stream.of(VorgangAttachedItemTestFactory.create())); - } - - @DisplayName("Vorganglist by page and limit") - @Nested - class TestVorgangListByPage { - - private static final String PATH = VorgangController.PATH + "?page=0&limit=100"; - - private final VorgaengeHeaderResponse response = VorgaengeHeaderResponse.builder().vorgaengeHeader(List.of( - VorgangHeaderTestFactory.createBuilder().nextFrist(WiedervorlageTestFactory.FRIST).build())).build(); - - @BeforeEach - void mockRemoteService() { - when(remoteService.findVorgaengeHeader(any(), any())).thenReturn(response); - } - - @Test - void shouldReturnResult() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath("$._embedded.vorgangHeaderList[0].nextFrist").value(WiedervorlageTestFactory.FRIST_STR)); - } - - @Test - void shouldReturnStatusOk() throws Exception { - var response = doRequest(); - - response.andExpect(status().isOk()); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(PATH, VorgangHeaderTestFactory.ID)); - } - - @DisplayName("statistic") - @Nested - class TestStatisic { - - @DisplayName("by status") - @Nested - class TestByStatus { - - private static final String BY_STATUS_PATH = "$.statistic.byStatus."; - - @Test - void shouldContainNeu() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath(BY_STATUS_PATH + "neu").value(ByStatusTestFactory.NEU_COUNT)); - } - - @Test - void shouldContainAngenommen() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath(BY_STATUS_PATH + "angenommen").value(ByStatusTestFactory.ANGENOMMEN_COUNT)); - } - - @Test - void shouldContainInBearbeitung() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath(BY_STATUS_PATH + "inBearbeitung").value(ByStatusTestFactory.IN_BEARBEITUNG_COUNT)); - } - - @Test - void shouldContainBeschieden() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath(BY_STATUS_PATH + "beschieden").value(ByStatusTestFactory.BESCHIEDEN_COUNT)); - } - - @Test - void shouldContainAbgeschlossen() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath(BY_STATUS_PATH + "abgeschlossen").value(ByStatusTestFactory.ABGESCHLOSSEN_COUNT)); - } - - @Test - void shouldContainVerworfen() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath(BY_STATUS_PATH + "verworfen").value(ByStatusTestFactory.VERWORFEN_COUNT)); - } - } - - @Test - void shouldContainWiedervorlagen() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath("$.statistic.wiedervorlagen").value(StatisticTestFactory.COUNT_WIEDERVORLAGEN)); - } - - @Test - void shouldContainUngeleseneNachrichten() throws Exception { - var response = doRequest(); - - response.andExpect(jsonPath("$.statistic.ungeleseneNachrichten").value(StatisticTestFactory.COUNT_UNGELESENE_NACHRICHTEN)); - } - } - } - - @Nested - class TestGetSingleVorgang { - - public static final String PATH = VorgangController.PATH + "/{id}"; - - @Test - void shouldReturnNotFound() throws Exception { - when(remoteService.findVorgangWithEingang(anyString(), any())).thenThrow(new ResourceNotFoundException(Vorgang.class, StringUtils.EMPTY)); - - var response = doRequest(); - - response.andExpect(status().isNotFound()); - } - - @Test - void shouldFormatDateTime() throws Exception { - when(bescheidService.existsBescheid(anyString())).thenReturn(true); - when(remoteService.findVorgangWithEingang(anyString(), any())).thenReturn(VorgangWithEingangTestFactory.create()); - - var response = doRequest(); - - response.andExpect(status().isOk()).andExpect(jsonPath("$.createdAt").value(VorgangHeaderTestFactory.CREATED_AT_STR)); - } - - @Test - void shouldHaveAnnehmenLink() throws Exception { - when(bescheidService.existsBescheid(anyString())).thenReturn(true); - when(remoteService.findVorgangWithEingang(anyString(), any())).thenReturn(VorgangWithEingangTestFactory.create()); - - var response = doRequest(); - - response.andExpect(jsonPath("$._links.annehmen.href") - .value("http://localhost/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/relations/" + VorgangHeaderTestFactory.ID + "/" - + VorgangHeaderTestFactory.VERSION + "/commands")); - } - - @Nested - class TestLinkToAssignedUser { - - @Test - void shouldReturnStatusOk() throws Exception { - when(bescheidService.existsBescheid(anyString())).thenReturn(true); - when(remoteService.findVorgangWithEingang(anyString(), any())).thenReturn(VorgangWithEingangTestFactory.create()); - - var response = doRequest(); - - response.andExpect(status().is2xxSuccessful()); - } - - @Test - void shouldBePresentIfAssigned() throws Exception { - when(bescheidService.existsBescheid(anyString())).thenReturn(true); - when(remoteService.findVorgangWithEingang(anyString(), any())).thenReturn(VorgangWithEingangTestFactory.create()); - - var response = doRequest(); - - response.andExpect(jsonPath("$._links.assignedTo.href") - .value(StringEndsWith.endsWith("/api/userProfiles/" + UserProfileTestFactory.ID))); - } - - @Test - void shouldNOTBePresentIfNOSTAssigned() throws Exception { - when(remoteService.findVorgangWithEingang(anyString(), any())) - .thenReturn(VorgangWithEingangTestFactory.createBuilder().assignedTo(null).build()); - - var response = doRequest(); - - response.andExpect(jsonPath("$._links.assignedTo.href").doesNotExist()); - } - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(PATH, VorgangHeaderTestFactory.ID).with(csrf())); - } - } - - @Nested - class TestClientAttribute { - - @Test - void shouldReturnNoContent() throws Exception { - var content = VorgangHeaderTestFactory.createHasNewPostfachNachrichtContent(false); - - var response = doRequest(content); - - response.andExpect(status().isNoContent()); - } - - @Test - void shouldReturnUnprocessableEntity() throws Exception { - var content = VorgangHeaderTestFactory.createHasNewPostfachNachrichtContent(true); - - var response = doRequest(content); - - response.andExpect(status().isUnprocessableEntity()); - } - - private ResultActions doRequest(String content) throws Exception { - return mockMvc.perform(put("/api/vorgangs/{0}/hasNewPostfachNachricht", VorgangHeaderTestFactory.ID).with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java deleted file mode 100644 index ba6f94d6a7ba3f5518b8b371b8a1d346161afb94..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java +++ /dev/null @@ -1,927 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.EingangTestFactory.*; -import static org.assertj.core.api.AssertionsForClassTypes.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.context.ApplicationContext; -import org.springframework.core.env.Environment; -import org.springframework.hateoas.EntityModel; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.clientattribute.ClientAttributeService; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.statistic.StatisticController; -import de.ozgcloud.alfa.statistic.StatisticTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import lombok.SneakyThrows; - -class VorgangControllerTest { - - private static final String RESET_POSTFACH_NACHRICHT_PATH = VorgangController.PATH + "/{0}/hasNewPostfachNachricht"; - private static final String PATH = VorgangController.PATH + "/"; - - @Spy - @InjectMocks - private VorgangController controller; - @Mock - private VorgangService vorgangService; - @Mock - private VorgangModelAssembler modelAssembler; - - @Mock - private ClientAttributeService clientAttributeService; - - @Mock - private StatisticController statisticController; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("VorgangList") - @Nested - class TestVorgangList { - - private static final int PAGE = 5; - private static final int LIMIT = 7; - - @Captor - private ArgumentCaptor<FindVorgaengeHeaderRequestCriteria> criteriaCaptor; - - @BeforeEach - void initTest() { - when(vorgangService.findVorgaengeHeader(any())).thenReturn(VorgangListResponseTestFactory.create()); - when(statisticController.getVorgaengeStatistic()).thenReturn(StatisticTestFactory.create()); - } - - @DisplayName("Get all") - @Nested - class TestGetAll { - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT))) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all by status") - @Nested - class TestGetAllByStatus { - - private static final VorgangStatus STATUS = VorgangStatus.NEU; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shoulHaveSetStatus() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getStatus()).hasValue(STATUS); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_STATUS, STATUS.toString())) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all by searchBy") - @Nested - class TestGetAllBySearchBy { - - private static final String SEARCH_BY = "TestSearchByString"; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shoulHaveSetSearchBy() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getSearchBy()).hasValue(SEARCH_BY); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_SEARCH, SEARCH_BY)) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all by assignedTo") - @Nested - class TestGetAllByAssigendTo { - - private static final UserId ASSIGNED_TO = UserProfileTestFactory.ID; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shoulHaveSetAssignedToAsOptional() { - doRequest(); - - verify(controller).asOptional(ASSIGNED_TO); - } - - @Test - void shoulHaveSetAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO); - } - - @Test - void shouldSetFilterByAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue(); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_ASSIGNED_TO, ASSIGNED_TO.toString())) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all by assignedTo and searchBy") - @Nested - class TestGetAllByAssigendToAndSearchBy { - - private static final UserId ASSIGNED_TO = UserProfileTestFactory.ID; - private static final String SEARCH_BY = "TestSearchByString"; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shouldSetAssignedAsOptional() { - doRequest(); - - verify(controller).asOptional(ASSIGNED_TO); - } - - @Test - void shoulHaveSetAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO); - } - - @Test - void shoulHaveSetSearchBy() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getSearchBy()).hasValue(SEARCH_BY); - } - - @Test - void shouldSetFilterByAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue(); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_ASSIGNED_TO, ASSIGNED_TO.toString()) - .param(VorgangController.PARAM_SEARCH, SEARCH_BY)) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all by assignedTo and status") - @Nested - class TestGetAllByAssigendToAndStatus { - - private static final UserId ASSIGNED_TO = UserProfileTestFactory.ID; - private static final VorgangStatus STATUS = VorgangStatus.NEU; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shouldSetAssignedAsOptional() { - doRequest(); - - verify(controller).asOptional(ASSIGNED_TO); - } - - @Test - void shoulHaveSetAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO); - } - - @Test - void shoulHaveSetStatus() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getStatus()).hasValue(STATUS); - } - - @Test - void shouldSetFilterByAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue(); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_ASSIGNED_TO, ASSIGNED_TO.toString()) - .param(VorgangController.PARAM_STATUS, STATUS.toString())) - .andExpect(status().isOk()); - } - } - - @DisplayName("Get all by existing next wiedervorlage frist") - @Nested - class TestGetAllByExistingNextWiedervorlageFrist { - - private static final String HAS_NEXT_WIEDERVORLAGE_FRIST = "exists"; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shouldHaveCallExistNextWiedervorlageFrist() { - doRequest(); - - verify(controller).existNextWiedervorlageFrist(HAS_NEXT_WIEDERVORLAGE_FRIST); - } - - @Test - void shoulHaveSetHasNextWiedervorlageFrist() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasNextWiedervorlageFrist()).isTrue(); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST, HAS_NEXT_WIEDERVORLAGE_FRIST)) - .andExpect(status().isOk()); - } - - @DisplayName("Get all by assignedTo and existing next wiedervorlage frist") - @Nested - class TestGetAllByAssignedtoAndExistingNextWiedervorlageFrist { - - private static final UserId ASSIGNED_TO = UserProfileTestFactory.ID; - private static final String HAS_NEXT_WIEDERVORLAGE_FRIST = "exists"; - - @Test - void shouldCallHandleGetAllRequest() { - doRequest(); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @DisplayName("build criteria") - @Nested - class TestBuildCriteria { - - @Test - void shouldHaveSetPage() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @Test - void shoulHaveSetLimit() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @Test - void shouldSetAssignedAsOptional() { - doRequest(); - - verify(controller).asOptional(ASSIGNED_TO); - } - - @Test - void shoulHaveSetAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO); - } - - @Test - void shouldSetFilterByAssignedTo() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue(); - } - - @Test - void shouldHaveCallExistNextWiedervorlageFrist() { - doRequest(); - - verify(controller).existNextWiedervorlageFrist(HAS_NEXT_WIEDERVORLAGE_FRIST); - } - - @Test - void shoulHaveSetHasNextWiedervorlageFrist() { - doRequest(); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasNextWiedervorlageFrist()).isTrue(); - } - } - - @SneakyThrows - private void doRequest() { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_ASSIGNED_TO, ASSIGNED_TO.toString()) - .param(VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST, HAS_NEXT_WIEDERVORLAGE_FRIST)) - .andExpect(status().isOk()); - } - } - } - - @Nested - class TestGetAllByUngeleseneNachrichten { - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCallHandleGetAllRequest(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCriteriaHavePage(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCriteriaHaveLimit(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - static List<String> nachrichtenValues() { - return List.of(VorgangController.PARAM_NACHRICHTEN_UNGELESENE, "", "dummy"); - } - - @Nested - class WithParamNachrichtenUngelesene { - - @Test - void shouldCriteriaHaveHasUngeleseneNachrichtenTrue() { - doRequestWithNachrichtenParam(VorgangController.PARAM_NACHRICHTEN_UNGELESENE); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isTrue(); - } - } - - @Nested - class WithoutParamNachrichtenUngelesene { - - @ParameterizedTest - @ValueSource(strings = {"", "dummy"}) - void shouldCriteriaHaveHasUngeleseneNachrichtenFalse(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isFalse(); - } - } - - @SneakyThrows - private void doRequestWithNachrichtenParam(String paramValue) { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_NACHRICHTEN, paramValue)) - .andExpect(status().isOk()); - } - } - - @Nested - class TestGetAllByAssignedToAndUngeleseneNachrichten { - - private static final UserId ASSIGNED_TO = UserProfileTestFactory.ID; - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCallHandleGetAllRequest(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class)); - } - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCriteriaHavePage(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE); - } - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCriteriaHaveLimit(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT); - } - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldCriteriaHaveAssignedTo(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO); - } - - @ParameterizedTest - @MethodSource("nachrichtenValues") - void shouldSetFilterByAssignedTo(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue(); - } - - static List<String> nachrichtenValues() { - return List.of(VorgangController.PARAM_NACHRICHTEN_UNGELESENE, "", "dummy"); - } - - @Nested - class WithParamNachrichtenUngelesene { - - @Test - void shouldCriteriaHaveHasUngeleseneNachrichtenTrue() { - doRequestWithNachrichtenParam(VorgangController.PARAM_NACHRICHTEN_UNGELESENE); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isTrue(); - } - } - - @Nested - class WithoutParamNachrichtenUngelesene { - - @ParameterizedTest - @ValueSource(strings = {"", "dummy"}) - void shouldCriteriaHaveHasUngeleseneNachrichtenFalse(String nachrichtenValue) { - doRequestWithNachrichtenParam(nachrichtenValue); - - verify(controller).handleGetAllRequest(criteriaCaptor.capture()); - assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isFalse(); - } - } - - @SneakyThrows - private void doRequestWithNachrichtenParam(String paramValue) { - mockMvc.perform(get(PATH) - .param(VorgangController.PARAM_PAGE, Integer.toString(PAGE)) - .param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT)) - .param(VorgangController.PARAM_ASSIGNED_TO, ASSIGNED_TO.toString()) - .param(VorgangController.PARAM_NACHRICHTEN, paramValue)) - .andExpect(status().isOk()); - } - } - } - - @DisplayName("As Optional") - @Nested - class TestAsOptional { - - @Test - void shouldReturnEmptyOnEmptyUserId() { - var optional = controller.asOptional(UserId.empty()); - - assertThat(optional).isNotPresent(); - } - - @Test - void shouldReturnFilledIfNotEmpty() { - var userId = UserId.from("DummyUserId"); - - var optional = controller.asOptional(userId); - - assertThat(optional).hasValue(userId); - } - } - - @DisplayName("Exist next wiedervorlage frist") - @Nested - class TestExistNextWiedervorlageFrist { - - @Test - void shouldReturnTrueOnMatchingParameter() { - var exists = controller.existNextWiedervorlageFrist(VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS); - - assertThat(exists).isTrue(); - } - - @Test - void shouldReturnFalseOnOther() { - var exists = controller.existNextWiedervorlageFrist("quatsch"); - - assertThat(exists).isFalse(); - } - } - - @DisplayName("Vorgang with eingang") - @Nested - class TestVorgangWithEingang { - - private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @BeforeEach - void initTest() { - when(vorgangService.findVorgangWithEingang(any())).thenReturn(VorgangWithEingangTestFactory.create()); - when(modelAssembler.toModel(any())).then(i -> EntityModel.of(i.getArgument(0))); - - ApplicationContext context = mock(ApplicationContext.class); - Environment environment = mock(Environment.class); - when(environment.getProperty(anyString())).thenReturn("test/"); - when(context.getEnvironment()).thenReturn(environment); - urlProvider.setApplicationContext(context); - } - - @Test - void shouldCallService() throws Exception { - performRequest(); - - verify(vorgangService).findVorgangWithEingang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - performRequest(); - - verify(modelAssembler).toModel(any()); - } - - @Nested - class TestDataMapping { - - @DisplayName("Single Field should be in json first level") - @Test - void singleField() throws Exception { - performRequest().andExpect(jsonPath("$.eingang.formData." + SINGLE_FIELD_NAME).value(SINGLE_FIELD_VALUE)); - } - - @DisplayName("Numeric field should be numeric in json") - @Test - void numericField() throws Exception { - performRequest().andExpect(jsonPath("$.eingang.formData." + NUMERIC_FIELD_NAME).isNumber()); - performRequest().andExpect(jsonPath("$.eingang.formData." + NUMERIC_FIELD_NAME).value(NUMERIC_FIELD_VALUE)); - } - - @DisplayName("SubForm should have name as key") - @Test - void keyOfsubForm() throws Exception { - performRequest().andExpect(jsonPath("$.eingang.formData." + SUBFORM_NAME).isMap()); - } - - @DisplayName("SubForm-Field should be present") - @Test - void subFormField() throws Exception { - performRequest().andExpect(jsonPath("$.eingang.formData." + SUBFORM_NAME + "." + SUBFORM_FIELD_NAME).value(SUBFORM_FIELD_VALUE)); - } - - } - - private ResultActions performRequest() throws Exception { - return mockMvc.perform(get(PATH + "/" + VorgangHeaderTestFactory.ID)).andExpect(status().isOk()); - } - } - - @DisplayName("Reset new postfachNachricht") - @Nested - class TestResetNewPostfachNachricht { - - @Test - void resetNewPostfachNachricht() throws Exception { - performRequest("{\"hasNewPostfachNachricht\":false}").andExpect(status().isNoContent()); - - verify(clientAttributeService).resetPostfachNachricht(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldReturnUnprocessableEntity() throws Exception { - performRequest("{\"hasNewPostfachNachricht\":true}").andExpect(status().isUnprocessableEntity()); - - verify(clientAttributeService, never()).resetPostfachNachricht(VorgangHeaderTestFactory.ID); - } - - private ResultActions performRequest(String body) throws Exception { - return mockMvc - .perform(put(RESET_POSTFACH_NACHRICHT_PATH, VorgangHeaderTestFactory.ID).contentType(MediaType.APPLICATION_JSON_VALUE) - .content(body)); - } - } - - @Nested - class TestIsEditable { - - private final Vorgang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldCallService() { - controller.isEditable(vorgang); - - verify(vorgangService).isVorgangEditable(vorgang); - } - - @ParameterizedTest - @ValueSource(booleans = {true, false}) - void shouldReturnServiceResult(boolean serviceResult) { - when(vorgangService.isVorgangEditable(vorgang)).thenReturn(serviceResult); - - var editable = controller.isEditable(vorgang); - - assertThat(editable).isEqualTo(serviceResult); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeadTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeadTestFactory.java deleted file mode 100644 index 2c064f1da49527cf51877e6faadb046e6c44195e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeadTestFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -public class VorgangHeadTestFactory { - - public static VorgangHead create() { - return createBuilder().build(); - } - - public static VorgangHead.VorgangHeadBuilder createBuilder() { - return VorgangHead.builder() - .serviceKonto(ServiceKontoTestFactory.create()); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeaderMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeaderMapperTest.java deleted file mode 100644 index 66927d5cf6f096c5a1d5a14835dfe2e2936e6d76..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeaderMapperTest.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory.*; -import static org.assertj.core.api.Assertions.*; - -import java.time.format.DateTimeFormatter; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.clientattribute.ClientAttribute; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; - -class VorgangHeaderMapperTest { - - @Spy - @InjectMocks - private VorgangHeaderMapper mapper = Mappers.getMapper(VorgangHeaderMapper.class); - - @Spy - private UserIdMapper userIdMapper = Mappers.getMapper(UserIdMapper.class); - - @Nested - class TestToVorgangHeader { - - @Test - void shouldMapCreatedAt() { - var header = callMapper(); - - assertThat(header.getCreatedAt()).isEqualTo(CREATED_AT); - } - - @Test - void shouldMapNummer() { - var header = callMapper(); - - assertThat(header.getNummer()).isEqualTo(NUMMER); - } - - @Test - void shouldMapAktenzeichen() { - var header = callMapper(); - - assertThat(header.getAktenzeichen()).isEqualTo(AKTENZEICHEN); - } - - @Test - void shouldMapStatus() { - var header = callMapper(); - - assertThat(header.getStatus()).isEqualTo(VorgangStatus.NEU); - } - - @Test - void shouldMapAssignedTo() { - var header = callMapper(); - - assertThat(header.getAssignedTo()).isEqualTo(UserId.from(ASSIGNED_TO)); - } - - @Nested - class NextFrist { - - private final GrpcClientAttributeValue value = GrpcClientAttributeValue.newBuilder() - .setStringValue(WiedervorlageTestFactory.FRIST.format(DateTimeFormatter.ISO_DATE)).build(); - - @Test - void shouldSetEmptyOptionalIfNotExist() { - var vorgangHeaderWithEmptyClientAttributes = GrpcVorgangHeaderTestFactory.createBuilder().clearClientAttributes().build(); - - var header = mapper.toVorgangHeader(vorgangHeaderWithEmptyClientAttributes); - - assertThat(header.getNextFrist()).isNull(); - } - - @Test - void shouldNotSetIfWrongClient() { - var clientAttribute = GrpcClientAttribute.newBuilder() - .setAttributeName(ClientAttribute.WIEDERVORLAGE_NEXT_FRIST.getAttributeName()) - .setValue(value) - .build(); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder() - .addClientAttributes(clientAttribute).build(); - - var header = mapper.toVorgangHeader(vorgangHeader); - - assertThat(header.getNextFrist()).isNull(); - - } - - @Test - void shouldSetIfExists() { - var clientAttribute = GrpcClientAttribute.newBuilder() - .setAttributeName(ClientAttribute.WIEDERVORLAGE_NEXT_FRIST.getAttributeName()) - .setClientName(ClientAttribute.WIEDERVORLAGE_NEXT_FRIST.getClientName().toString()) - .setValue(value) - .build(); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder() - .addClientAttributes(clientAttribute).build(); - - var header = mapper.toVorgangHeader(vorgangHeader); - - assertThat(header.getNextFrist()).isEqualTo(WiedervorlageTestFactory.FRIST); - } - - } - - @Nested - class HasPostfachNachricht { - @Test - void shouldSetFalseIfNotExists() { - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().clearClientAttributes().build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isHasPostfachNachricht()).isFalse(); - } - - @Test - void shouldSetFalseForWrongClient() { - var clientAttribute = GrpcClientAttributeTestFactory.createBuilder() - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build()) - .build(); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().addClientAttributes(clientAttribute).build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isHasPostfachNachricht()).isFalse(); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldBeValueOfClientAttribute(boolean value) { - var clientAttribute = GrpcClientAttributeTestFactory.createWith(ClientAttribute.HAS_POSTFACH_NACHRICHT, value); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().addClientAttributes(clientAttribute).build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isHasPostfachNachricht()).isEqualTo(value); - } - } - - @Nested - class HasNewPostfachNachricht { - @Test - void shouldSetFalseIfNotExists() { - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().clearClientAttributes().build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isHasNewPostfachNachricht()).isFalse(); - } - - @Test - void shouldSetFalseForWrongClient() { - var clientAttribute = GrpcClientAttributeTestFactory.createBuilder() - .setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build()) - .build(); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().addClientAttributes(clientAttribute).build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isHasPostfachNachricht()).isFalse(); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldBeValueOfClientAttribute(boolean value) { - var clientAttribute = GrpcClientAttributeTestFactory.createWith(ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, value); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().addClientAttributes(clientAttribute).build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isHasNewPostfachNachricht()).isEqualTo(value); - } - } - - @Nested - class TestAntragBewilligt { - @Test - void shouldSetNull() { - var vorgangHeaderWithEmptyClientAttributes = GrpcVorgangHeaderTestFactory.createBuilder().clearClientAttributes().build(); - - var header = mapper.toVorgangHeader(vorgangHeaderWithEmptyClientAttributes); - - assertThat(header.getAntragBewilligt()).isNull(); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldBeValueOfClientAttribute(boolean value) { - var clientAttribute = GrpcClientAttributeTestFactory.createWith(ClientAttribute.ANTRAG_BEWILLIGT, value); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().addClientAttributes(clientAttribute).build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.getAntragBewilligt()).isEqualTo(value); - } - } - - private VorgangHeader callMapper() { - return mapper.toVorgangHeader(GrpcVorgangHeaderTestFactory.create()); - } - } - - @Nested - class TestArchiving { - - @Test - void shouldBeFalseIfClientAttributeIsMissing() { - var header = mapper.toVorgangHeader(GrpcVorgangHeaderTestFactory.create()); - - assertThat(header.isArchiving()).isFalse(); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldBeValueOfClientAttribute(boolean value) { - var clientAttribute = GrpcClientAttributeTestFactory.createWith(ClientAttribute.ARCHIVING, value); - var vorgangHeader = GrpcVorgangHeaderTestFactory.createBuilder().addClientAttributes(clientAttribute).build(); - - var mapped = mapper.toVorgangHeader(vorgangHeader); - - assertThat(mapped.isArchiving()).isEqualTo(value); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeaderTestFactory.java deleted file mode 100644 index 5653c4e4a3f525f50a01127f02fb0768d6f7a971..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangHeaderTestFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.common.AlfaTestUtils.*; - -import java.time.ZonedDateTime; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.common.test.TestUtils; - -public class VorgangHeaderTestFactory { - - public static final String ID = createMongoDbObjectId(); - public static final long VERSION = 42L; - public static final String NAME = LoremIpsum.getInstance().getWords(10); - public static final VorgangStatus STATUS = VorgangStatus.NEU; - public static final String CREATED_AT_STR = "2021-01-10T10:30:00Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - public static final String NUMMER = "VorgangNummerTest123"; - public static final String AKTENZEICHEN = "0123456789XY"; - public static final String ASSIGNED_TO = "paul"; - - public static VorgangHeader create() { - return createBuilder().build(); - } - - public static VorgangHeader.VorgangHeaderBuilder createBuilder() { - return VorgangHeader.builder() - .id(ID) - .version(VERSION) - .name(NAME) - .nummer(NUMMER) - .status(STATUS) - .createdAt(CREATED_AT) - .assignedTo(UserProfileTestFactory.ID); - } - - public static String createHasNewPostfachNachrichtContent(boolean hasNewPostfachNachricht) { - return TestUtils.loadTextFile("jsonTemplates/command/hasNewPostfachNachricht.json.tmpl", String.valueOf(hasNewPostfachNachricht)); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangITCase.java deleted file mode 100644 index 8b557304e3659685c7c3e3aab8c6a2c42bb1faa2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangITCase.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.io.File; -import java.io.FileOutputStream; - -import org.apache.commons.io.FileUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.bescheid.BescheidService; -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import lombok.SneakyThrows; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class VorgangITCase { - - @MockBean - private VorgangRemoteService remoteService; - - @MockBean - private CommandController commandController; - - @MockBean - private CurrentUserService userService; - - @MockBean - private PostfachMailController postfachController; - - @MockBean - private VorgangAttachedItemService vorgangAttachedItemService; - @MockBean - private BescheidService bescheidService; - - @Autowired - private MockMvc mockMvc; - - @WithMockUser - @Nested - class TestGetVorgangWithEingang { - - static final String SINGLE_PATH = VorgangController.PATH + "/{id}"; - - @BeforeEach - void mockStub() { - when(postfachController.isPostfachConfigured()).thenReturn(true); - when(remoteService.findVorgangWithEingang(anyString(), any())).thenReturn(VorgangWithEingangTestFactory.create()); - } - - @Test - void shouldReturnVorgangOnMatchingOrganisationseinheitId() throws Exception { - when(userService.getUser()).thenReturn( - UserProfileTestFactory.createBuilder().clearOrganisationseinheitIds() - .organisationseinheitId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID).build()); - - doRequest().andExpect(status().isOk()); - } - - @Test - void shouldReturnVorgangOnEmptyUserOrganisationseinheitIdList() throws Exception { - when(userService.getUser()).thenReturn(UserProfileTestFactory.createBuilder().clearOrganisationseinheitIds().build()); - - doRequest().andExpect(status().isOk()); - } - - @Nested - class TestAuthorizationByRole { - - @Nested - class TestForVerwaltungPoststelle { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - } - - @DisplayName("should return http forbidden status if vorgangstatus is different to 'Neu'") - @ParameterizedTest - @EnumSource(value = VorgangStatus.class, names = { "ANGENOMMEN", "VERWORFEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", - "WEITERGELEITET" }) - void shouldReturnForbiddenStatus(VorgangStatus status) throws Exception { - when(remoteService.findVorgangWithEingang(anyString(), any())) - .thenReturn(VorgangWithEingangTestFactory.createBuilder().status(status).build()); - - doRequest().andExpect(status().isForbidden()); - } - - @SneakyThrows - @DisplayName("should return http ok status if vorgangstatus is equal 'Neu'") - @Test - void shouldReturnOkStatus() { - when(bescheidService.existsBescheid(anyString())).thenReturn(true); - when(remoteService.findVorgangWithEingang(anyString(), any())) - .thenReturn(VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.NEU).build()); - - doRequest().andExpect(status().isOk()); - } - } - - @Nested - class TestForOtherRoles { - - @BeforeEach - void mockUserRole() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - } - - @DisplayName("should return true on role 'VERWALTUNG_USER' independent which vorgangstatus") - @ParameterizedTest - @EnumSource(value = VorgangStatus.class, names = { "NEU", "ANGENOMMEN", "VERWORFEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", - "WEITERGELEITET" }) - void shouldReturnTrue(VorgangStatus status) throws Exception { - when(remoteService.findVorgangWithEingang(anyString(), any())) - .thenReturn(VorgangWithEingangTestFactory.createBuilder().status(status).build()); - - doRequest().andExpect(status().isOk()); - } - } - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(SINGLE_PATH, VorgangHeaderTestFactory.ID)); - } - } - - @Disabled("Der Test schreibt die Datei auf die Platte.") - @Nested - class TestExport { - - @SneakyThrows - @Test - void shouldCreateZip() { - when(remoteService.findVorgangWithEingang(any(), any())).thenReturn(VorgangWithEingangTestFactory.create()); - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - - var response = doRequest().andReturn().getResponse(); - var content = response.getContentAsByteArray(); - var fileName = getFileName(response); - - writeFile(content, fileName); - - var wroteableFile = FileUtils.getFile(fileName); - assertThat(wroteableFile).isNotNull(); - } - - private String getFileName(MockHttpServletResponse response) { - var header = response.getHeaders("Content-Disposition").get(0); - return header.substring(header.indexOf("filename=") + 9); - } - - @SneakyThrows - private void writeFile(byte[] content, String fileName) { - var file = new File(fileName); - var fos = new FileOutputStream(file); - fos.write(content); - fos.close(); - } - - @SneakyThrows - private ResultActions doRequest() throws Exception { - return mockMvc.perform(asyncDispatch( - mockMvc.perform(get(VorgangController.PATH + "/" + VorgangHeaderTestFactory.ID).header(HttpHeaders.ACCEPT, - MediaType.APPLICATION_OCTET_STREAM_VALUE)).andReturn())) - .andExpect(status().isOk()); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangListResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangListResponseTestFactory.java deleted file mode 100644 index d1a9307662770d5b74a9a3c2c350ce9084151fd0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangListResponseTestFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import com.thedeanda.lorem.LoremIpsum; - -public class VorgangListResponseTestFactory { - - public static final int TOTAL = 300; - - public static VorgaengeHeaderResponse create() { - return createBuilder().build(); - } - - public static VorgaengeHeaderResponse.VorgaengeHeaderResponseBuilder createBuilder() { - return VorgaengeHeaderResponse.builder() - .total(TOTAL) - .vorgaengeHeader(createList()); - } - - public static List<VorgangHeader> createList() { - return IntStream.range(0, 10) - .mapToObj(i -> VorgangHeaderTestFactory.createBuilder().name(i + LoremIpsum.getInstance().getName()).build()) - .collect(Collectors.toList()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java deleted file mode 100644 index 94ae793fbbe99920ac5cb16dc8551675ecd9b93d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.statistic.StatisticTestFactory; - -class VorgangModelAssemblerTest { - - @Spy - @InjectMocks - private VorgangModelAssembler modelAssembler; - @Mock - private CurrentUserService userService; - @Mock - private VorgangService vorgangService; - - private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - private static final int PAGE_SIZE = 100; - - @DisplayName("To collectionModel") - @Nested - class TestCollectionModel { - - @BeforeEach - void prepareBuilder() { - initUserProfileUrlProvider(urlProvider); - } - - @DisplayName("init model") - @Nested - class TestInitModel { - - @Test - void shouldBeCalled() { - var requestCriteria = FindVorgaengeRequestCriteriaTestFactory.createBuilder().searchBy(Optional.empty()).build(); - var response = VorgaengeHeaderResponse.builder().vorgaengeHeader(Collections.emptyList()).total(PAGE_SIZE).build(); - var entities = Stream.of(VorgangHeaderTestFactory.create()); - var statistic = StatisticTestFactory.create(); - - modelAssembler.toCollectionModel(entities, response, requestCriteria, statistic); - - verify(modelAssembler).initModel(entities, statistic); - } - } - - @DisplayName("next link") - @Nested - class TestNextLink { - - @Test - void shouldAddIfPagesLeft() { - var requestCriteria = FindVorgaengeRequestCriteriaTestFactory.createBuilder().searchBy(Optional.empty()).build(); - var response = VorgaengeHeaderResponse.builder().vorgaengeHeader(Collections.emptyList()).total(PAGE_SIZE).build(); - - var model = modelAssembler.toCollectionModel(Stream.of(VorgangHeaderTestFactory.create()), response, requestCriteria, - StatisticTestFactory.create()); - - assertThat(model.getLink(VorgangModelAssembler.REL_NEXT).get()).extracting(Link::getHref) - .isEqualTo(VorgangController.PATH + "?page=1&limit=100&assignedTo=" + UserProfileTestFactory.ID.toString() + "&status=NEU"); - } - - @Test - void shouldNotAddIfLastPage() { - var requestCriteria = FindVorgaengeRequestCriteriaTestFactory.create(); - - var response = VorgaengeHeaderResponse.builder() - .vorgaengeHeader(List.of(VorgangHeaderTestFactory.create())) - .total(1).build(); - - var model = modelAssembler.toCollectionModel(Stream.of(VorgangHeaderTestFactory.create()), response, requestCriteria, - StatisticTestFactory.create()); - - assertThat(model.getLink(VorgangModelAssembler.REL_NEXT)).isNotPresent(); - } - } - - @DisplayName("previous link") - @Nested - class TestPreviousLink { - - @Test - void shouldAddIfNotFirstPage() { - var requestCriteria = FindVorgaengeRequestCriteriaTestFactory.createBuilder() - .page(1) - .limit(1) - .searchBy(Optional.empty()) - .build(); - var response = VorgaengeHeaderResponse.builder() - .vorgaengeHeader(List.of(VorgangHeaderTestFactory.create())) - .total(200) - .build(); - - var model = modelAssembler.toCollectionModel(Stream.of(VorgangHeaderTestFactory.create(), VorgangHeaderTestFactory.create()), - response, - requestCriteria, StatisticTestFactory.create()); - - assertThat(model.getLink(VorgangModelAssembler.REL_PREVIOUS).get()).extracting(Link::getHref) - .isEqualTo(VorgangController.PATH + "?page=0&limit=1&assignedTo=" + UserProfileTestFactory.ID.toString() + "&status=NEU"); - } - - @Test - void shouldNotAddIfFirstPage() { - var requestCriteria = FindVorgaengeRequestCriteriaTestFactory.createBuilder().page(0).build(); - var response = VorgaengeHeaderResponse.builder().vorgaengeHeader(Collections.emptyList()).total(PAGE_SIZE).build(); - - var model = modelAssembler.toCollectionModel(Stream.of(VorgangHeaderTestFactory.create()), response, requestCriteria, - StatisticTestFactory.create()); - - assertThat(model.getLink(VorgangModelAssembler.REL_PREVIOUS)).isNotPresent(); - } - } - - @DisplayName("add self link") - @Nested - class TestSelfLink { - - final FindVorgaengeHeaderRequestCriteria requestCriteria = FindVorgaengeRequestCriteriaTestFactory.createBuilder() - .page(1) - .limit(1) - .build(); - final VorgaengeHeaderResponse response = VorgaengeHeaderResponse.builder() - .vorgaengeHeader(List.of(VorgangHeaderTestFactory.create())) - .total(200) - .build(); - - @Test - void shouldAddLink() { - var model = modelAssembler.toCollectionModel(Stream.of(VorgangHeaderTestFactory.create(), VorgangHeaderTestFactory.create()), - response, - requestCriteria, StatisticTestFactory.create()); - - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).isPresent(); - assertThat(model.getLink(IanaLinkRelations.SELF_VALUE).get()).extracting(Link::getHref).isEqualTo(VorgangController.PATH); - } - } - } - - @DisplayName("Build page link") - @Nested - class TestBuildPageLink { - - private final String linkRel = "dummyLinkRel"; - final FindVorgaengeHeaderRequestCriteria requestCriteria = FindVorgaengeRequestCriteriaTestFactory.createBuilder().build(); - - @Test - void shouldContainsPage() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria); - - assertThat(link.getHref()).contains(VorgangController.PARAM_PAGE + "=0"); - } - - @Test - void shouldContainsLimit() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria); - - assertThat(link.getHref()).contains(VorgangController.PARAM_LIMIT + "=" + FindVorgaengeRequestCriteriaTestFactory.LIMIT); - } - - @Test - void shouldHaveLinkRel() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria); - - assertThat(link.hasRel(linkRel)).isTrue(); - } - - @DisplayName("search by") - @Nested - class TestSearchBy { - - @Test - void shouldAddAsParamIfExists() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria); - - assertThat(link.getHref()) - .contains(VorgangController.PARAM_SEARCH + "=" - + FindVorgaengeRequestCriteriaTestFactory.SEARCH_BY.replace(StringUtils.SPACE, "%20")); - } - - @Test - void shouldNOTaddIfNotExists() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria.toBuilder().searchBy(Optional.empty()).build()); - - assertThat(link.getHref()).doesNotContain(VorgangController.PARAM_SEARCH); - } - } - - @DisplayName("assignedTo") - @Nested - class TestAssignedTo { - - @Test - void shouldAddAsParamIfShouldFilter() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria); - - assertThat(link.getHref()).contains(VorgangController.PARAM_ASSIGNED_TO + "=" + UserProfileTestFactory.ID); - } - - @Test - void shouldNOTaddIfShouldNotFilter() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria.toBuilder().filterCriteria( - FilterCriteriaTestFactory.createBuilder().filterByAssignedTo(false).build()).build()); - - assertThat(link.getHref()).doesNotContain(VorgangController.PARAM_ASSIGNED_TO); - } - - @DisplayName("getAssignedToValue") - @Nested - class TestGetAssignedToValue { - - @Test - void shouldReturnValueIfExists() { - var assignedToValue = modelAssembler.getAssignedToValue(FilterCriteriaTestFactory.create()); - - assertThat(assignedToValue).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - @Test - void shouldReturnEmptyStringIfNotExists() { - var assignedToValue = modelAssembler - .getAssignedToValue(FilterCriteriaTestFactory.createBuilder().assignedTo(Optional.empty()).build()); - - assertThat(assignedToValue).isEqualTo(StringUtils.EMPTY); - } - } - } - - @DisplayName("status") - @Nested - class TestStatus { - - @Test - void shouldAddAsParamIfExists() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria); - - assertThat(link.getHref()).contains(VorgangController.PARAM_STATUS + "=" + FilterCriteriaTestFactory.VORGANG_STATUS); - } - - @Test - void shouldNOTaddIfNotExists() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria.toBuilder().filterCriteria( - FilterCriteriaTestFactory.createBuilder().status(Optional.empty()).build()).build()); - - assertThat(link.getHref()).doesNotContain(VorgangController.PARAM_STATUS); - } - } - - @DisplayName("next wiedervorlage frist") - @Nested - class TestWiedervorlagen { - - @Test - void shouldAddAsParamExists() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria.toBuilder() - .filterCriteria(FilterCriteriaTestFactory.createBuilder().hasNextWiedervorlageFrist(true).build()).build()); - - assertThat(link.getHref()) - .contains(VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST + "=" + VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS); - } - - @Test - void shouldNOTaddIfNotExists() { - var link = modelAssembler.buildPageLink(0, linkRel, requestCriteria.toBuilder().filterCriteria( - FilterCriteriaTestFactory.createBuilder().hasNextWiedervorlageFrist(false).build()).build()); - - assertThat(link.getHref()).doesNotContain(VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST); - } - } - } - - @Nested - class TestLinksOnModel { - - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void beforeEach() { - initUserProfileUrlProvider(urlProvider); - } - - @Test - void shouldHaveSelfLink() { - var link = toModel().getLink(IanaLinkRelations.SELF_VALUE); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(VorgangController.PATH + "/" + VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveVorgangMitEingangLink() { - var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_MIT_EINGANG); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(VorgangController.PATH + "/" + VorgangHeaderTestFactory.ID); - } - - @Test - void shouldHaveAssignLink() { - doReturn(true).when(modelAssembler).isAssigneable(vorgang); - - var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(buildCommandLink()); - } - - @Test - void shouldNotHaveAssignLink() { - doReturn(false).when(modelAssembler).isAssigneable(vorgang); - - var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); - - assertThat(link).isEmpty(); - } - - @Test - void shouldHaveWiedervorlagenLink() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - - var link = toModel().getLink(VorgangModelAssembler.REL_WIEDERVORLAGEN); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/wiedervorlages?vorgangId=" + VorgangHeaderTestFactory.ID); - } - - @Test - void shouldNotHaveWiedervorlagenLink() { - var link = toModel().getLink(VorgangModelAssembler.REL_WIEDERVORLAGEN); - - assertThat(link).isEmpty(); - } - - private String buildCommandLink() { - return String.format("/api/vorgangs/%s/relations/%s/%s/commands", VorgangHeaderTestFactory.ID, - VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION); - } - - private EntityModel<Vorgang> toModel() { - return modelAssembler.toModel(vorgang); - } - } - - @Nested - class TestIsAssigneable { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shoudCheckIfVorgangIsEditable() { - givenVerwaltungUser(); - - modelAssembler.isAssigneable(vorgang); - - verify(vorgangService).isVorgangEditable(vorgang); - } - - @Test - void shouldReturnTrueForVerwaltungUser() { - givenVerwaltungUser(); - givenVorgangIsEditable(); - - assertThat(modelAssembler.isAssigneable(vorgang)).isTrue(); - } - - @Test - void shouldReturnTrueForPoststelleUser() { - givenNotVerwaltungUser(); - givenPoststelleUser(); - givenVorgangIsEditable(); - - assertThat(modelAssembler.isAssigneable(vorgang)).isTrue(); - } - - @Test - void shouldReturnFalseForNotPoststelleUser() { - givenNotVerwaltungUser(); - givenNotPoststelleUser(); - - assertThat(modelAssembler.isAssigneable(vorgang)).isFalse(); - } - - @Test - void shouldReturnFalseForVerwaltungUserAndVorgangNotEditable() { - givenVerwaltungUser(); - givenVorgangIsNotEditable(); - - var assignable = modelAssembler.isAssigneable(vorgang); - - assertThat(assignable).isFalse(); - } - - @Test - void shouldReturnFalseForPoststelleUserAndVorgangNotEditable() { - givenNotVerwaltungUser(); - givenPoststelleUser(); - givenVorgangIsNotEditable(); - - var assignable = modelAssembler.isAssigneable(vorgang); - - assertThat(assignable).isFalse(); - } - - private void givenVerwaltungUser() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - } - - private void givenNotVerwaltungUser() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - } - - private void givenPoststelleUser() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - } - - private void givenNotPoststelleUser() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - } - - private void givenVorgangIsEditable() { - doReturn(true).when(vorgangService).isVorgangEditable(vorgang); - } - - private void givenVorgangIsNotEditable() { - doReturn(false).when(vorgangService).isVorgangEditable(vorgang); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangPropertyTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangPropertyTestFactory.java deleted file mode 100644 index 06361c8e3919a0642f726ff8b9a7e7f2ff73d212..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangPropertyTestFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty; - -public class VorgangPropertyTestFactory { - - public static VorgangProperty create() { - return createBuilder().build(); - } - - public static VorgangProperty.VorgangPropertyBuilder createBuilder() { - return VorgangProperty.builder() - .formEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME) - .formId(EingangHeaderTestFactory.FORM_ID); - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangRemoteServiceTest.java deleted file mode 100644 index f3b2aa79d3b618844df34c2fada22c0d38d415ec..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangRemoteServiceTest.java +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.VorgangRemoteService.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.vorgang.common.GrpcQueryOperator; -import de.ozgcloud.vorgang.vorgang.GrpcFilterBy; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; -import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; -import de.ozgcloud.vorgang.vorgang.GrpcQuery; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression; -import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; - -class VorgangRemoteServiceTest { - - @Spy - @InjectMocks // NOSONAR - private VorgangRemoteService service; - - @Mock - private VorgangServiceBlockingStub serviceStub; - @Mock - private VorgangHeaderMapper vorgangHeaderMapper; - @Mock - private VorgangWithEingangMapper vorgangWithEingangMapper; - - private final GrpcFilterBy filterBy = GrpcFilterByTestFactory.create(); - - private final GrpcQuery query = GrpcQueryTestFactory.create(); - - @DisplayName("Find vorgaenge header") - @Nested - class TestFindVorgaengeHeader { - - private final FilterCriteria filterCriteria = FilterCriteriaTestFactory.create(); - - @DisplayName("should") - @Nested - class TestProzess { - - private final FindVorgaengeHeaderRequestCriteria requestCriteria = FindVorgaengeRequestCriteriaTestFactory.create(); - - @BeforeEach - void initMockReturnValues() { - doReturn(query).when(service).createQuery(any()); - doReturn(filterBy).when(service).createFilterBy(any()); - doReturn(VorgangListResponseTestFactory.create()).when(service).buildVorgaengeHeaderResponse(any()); - } - - @Test - void callBuildRequest() { - callService(); - - verify(service).buildFindVorgangRequest(requestCriteria, filterCriteria); - } - - @Test - void callCreateQuery() { - callService(); - - verify(service).createQuery(filterCriteria); - } - - @Test - void callCreateFilterBy() { - callService(); - - verify(service).createFilterBy(filterCriteria); - } - - @Test - void callStub() { - callService(); - - verify(serviceStub).findVorgang(any()); - } - - private VorgaengeHeaderResponse callService() { - return service.findVorgaengeHeader(requestCriteria, filterCriteria); - } - } - - @DisplayName("build find vorgang request") - @Nested - class TestBuildFindVorgangRequest { - - @BeforeEach - void initMockReturnValues() { - doReturn(query).when(service).createQuery(any()); - doReturn(filterBy).when(service).createFilterBy(any()); - } - - @Test - void shouldSetLimit() { - var request = callService(); - - assertThat(request.getLimit()).isEqualTo(FindVorgaengeRequestCriteriaTestFactory.LIMIT); - } - - @Test - void shouldSetOffset() { - var request = callService(); - - assertThat(request.getOffset()) - .isEqualTo(FindVorgaengeRequestCriteriaTestFactory.PAGE * FindVorgaengeRequestCriteriaTestFactory.LIMIT); - } - - @Test - void shouldSetQuery() { - var request = callService(); - - assertThat(request.getQuery()).isEqualTo(query); - } - - @Test - void shouldSetFilterBy() { - var request = callService(); - - assertThat(request.getFilterBy()).isEqualTo(filterBy); - } - - @Test - void shouldSetOrderBy() { - var request = callService(); - - assertThat(request.getOrderBy().name()).isEqualTo(FindVorgaengeRequestCriteriaTestFactory.ORDER_BY.name()); - } - - private GrpcFindVorgangRequest callService() { - return service.buildFindVorgangRequest(FindVorgaengeRequestCriteriaTestFactory.create(), filterCriteria); - } - } - - @DisplayName("response") - @Nested - class TestResponse { - - private final GrpcFindVorgangResponse findVorgangRespone = GrpcVorgangTestFactory.createVorgangResponse(); - private final VorgangHeader vorgangHeader = VorgangHeaderTestFactory.create(); - - @BeforeEach - void initMockReturnValues() { - when(vorgangHeaderMapper.toVorgangHeader(any())).thenReturn(vorgangHeader); - } - - @Test - void shouldReturnMappedVorgangHeader() { - var vorgangResponse = callService(); - - assertThat(vorgangResponse.getVorgaengeHeader()).hasSize(1); - assertThat(vorgangResponse.getVorgaengeHeader().get(0)).isEqualTo(vorgangHeader); - } - - @Test - void shouldReturnTotal() { - var vorgangResponse = callService(); - - assertThat(vorgangResponse.getTotal()).isEqualTo(findVorgangRespone.getTotal()); - } - - @Test - void shouldMapVorgangHeader() { - callService(); - - verify(vorgangHeaderMapper).toVorgangHeader(any()); - } - - private VorgaengeHeaderResponse callService() { - return service.buildVorgaengeHeaderResponse(findVorgangRespone); - } - } - } - - @Nested - class TestCreateQuery { - - @Nested - class WhenHasUngeleseneNachrichtenIsTrue { - - private final FilterCriteria filterCriteria = FilterCriteriaTestFactory.createBuilder().hasUngeleseneNachrichten(true).build(); - - @Test - void shouldAddExpression() { - var query = service.createQuery(filterCriteria); - - assertThat(query.getExpressionsList()).extracting(GrpcVorgangQueryExpression::getPath) - .containsOnlyOnce(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH); - } - - @Test - void shouldHaveOperator() { - var expression = getExpression(service.createQuery(filterCriteria)); - - assertThat(expression.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); - } - - @Test - void shouldHaveOperandBoolValue() { - var expression = getExpression(service.createQuery(filterCriteria)); - - assertThat(expression.getOperandBoolValue()).isTrue(); - } - - private GrpcVorgangQueryExpression getExpression(GrpcQuery query) { - return query.getExpressionsList().stream() - .filter(expression -> expression.getPath().equals(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH)).findFirst().orElseThrow(); - } - } - - @Nested - class WhenHasUngeleseneNachrichtenIsFalse { - - private final FilterCriteria filterCriteria = FilterCriteriaTestFactory.createBuilder().hasUngeleseneNachrichten(false).build(); - - @Test - void shouldNotAddExpression() { - var query = service.createQuery(filterCriteria); - - assertThat(query.getExpressionsList()).extracting(GrpcVorgangQueryExpression::getPath) - .isNotEqualTo(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH); - } - } - } - - @DisplayName("Create filterBy") - @Nested - class TestCreateFilterBy { - - @Test - void shouldSetFilterByOrganisationsEinheitId() { - var filterCriteria = createFilterBy(); - - assertThat(filterCriteria.getFilterByOrganisationseinheitenId()) - .isEqualTo(FilterCriteriaTestFactory.FILTER_BY_ORGANISATIONS_EINHEITEN_ID); - } - - @Test - void shouldSetOrganisationsEinheitIds() { - var filterCriteria = createFilterBy(); - - assertThat(filterCriteria.getOrganisationseinheitIdList()).containsExactly(FilterCriteriaTestFactory.ORGANISATIONS_EINHEIT_ID); - } - - @DisplayName("filterAssignedTo") - @Nested - class TestFilterAssignedTo { - - @Test - void shouldBeSet() { - var filterCriteria = createFilterBy(); - - assertThat(filterCriteria.getFilterByAssignedTo()).isTrue(); - } - } - - @DisplayName("assignedTo") - @Nested - class TestAssignedTo { - - @Test - void shouldBeSetIfExists() { - var filterCriteria = createFilterBy(); - - assertThat(filterCriteria.getAssignedTo()).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - @Test - void shouldNotBeSetIfNotExist() { - var filterCriteria = createFilterBy(FilterCriteriaTestFactory.createBuilder().assignedTo(Optional.empty()).build()); - - assertThat(filterCriteria.getAssignedTo()).isEqualTo(StringUtils.EMPTY); - } - } - - @DisplayName("status") - @Nested - class TestStatus { - - @Test - void shouldBeSetIfExists() { - var filterCriteria = createFilterBy(); - - assertThat(filterCriteria.getStatusList()).containsExactly(FilterCriteriaTestFactory.VORGANG_STATUS.toString()); - } - - @Test - void shouldNotBeSetIfNotExist() { - var filterCriteria = createFilterBy(FilterCriteriaTestFactory.createBuilder().status(Optional.empty()).build()); - - assertThat(filterCriteria.getStatusCount()).isZero(); - - } - } - - @DisplayName("hasNextWiedervorlageFrist") - @Nested - class TestHasNextWiedervorlageFrist { - - @Test - void shouldBeSetToFalse() { - var filterCriteria = createFilterBy(FilterCriteriaTestFactory.createBuilder().hasNextWiedervorlageFrist(false).build()); - - assertThat(filterCriteria.getHasNextWiedervorlageFrist()).isFalse(); - } - - @Test - void shouldNotBeSetToTrue() { - var filterCriteria = createFilterBy(FilterCriteriaTestFactory.createBuilder().hasNextWiedervorlageFrist(true).build()); - - assertThat(filterCriteria.getHasNextWiedervorlageFrist()).isTrue(); - } - } - - private GrpcFilterBy createFilterBy() { - return createFilterBy(FilterCriteriaTestFactory.create()); - } - - private GrpcFilterBy createFilterBy(FilterCriteria filterCriteria) { - return service.createFilterBy(filterCriteria); - } - } - - @DisplayName("Find vorgangWithEingang") - @Nested - class TestFindVorgangWithEingang { - - private final FilterCriteria filterCriteria = FilterCriteriaTestFactory.create(); - - @Nested - class TestCalls { - - private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void mockReturnValue() { - when(serviceStub.findVorgangWithEingang(any())) - .thenReturn(GrpcVorgangWithEingangResponseTestFactory.createVorgangWithEingangResponse()); - when(vorgangWithEingangMapper.toVorgangWithEingang(any())).thenReturn(vorgangWithEingang); - doReturn(filterBy).when(service).createFilterBy(any()); - } - - @Test - void shouldCreateFilterBy() { - callService(); - - verify(service).createFilterBy(any()); - } - - @Test - void shouldCallBuildRequest() { - callService(); - - verify(service).buildFindVorgangWithEingangRequest(VorgangHeaderTestFactory.ID, filterCriteria); - } - - @Test - void shouldCallStub() { - callService(); - - verify(serviceStub).findVorgangWithEingang(any()); - } - - @Test - void shouldCallMapper() { - callService(); - - verify(vorgangWithEingangMapper).toVorgangWithEingang(any()); - } - - @Test - void shouldReturn() { - var result = callService(); - - assertThat(result).isEqualTo(vorgangWithEingang); - } - } - - @DisplayName("build request") - @Nested - class TestBuildRequest { - - @BeforeEach - void mockReturnValue() { - doReturn(filterBy).when(service).createFilterBy(any()); - } - - @Test - void shouldHaveFilter() { - var filter = service.buildFindVorgangWithEingangRequest(VorgangHeaderTestFactory.ID, filterCriteria); - - assertThat(filter.getFilterBy()).isNotNull(); - } - - @Test - void shouldContainsVorgangId() { - var filter = service.buildFindVorgangWithEingangRequest(VorgangHeaderTestFactory.ID, filterCriteria); - - assertThat(filter.getId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - } - - private VorgangWithEingang callService() { - return service.findVorgangWithEingang(VorgangHeaderTestFactory.ID, filterCriteria); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java deleted file mode 100644 index fa26b153010675a2873b292c5ae8716e90ce3f98..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java +++ /dev/null @@ -1,456 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -class VorgangServiceTest { - - @Spy - @InjectMocks // NOSONAR - private VorgangService service; - - @Mock - private VorgangRemoteService remoteService; - - @Mock - private CurrentUserService userService; - - @DisplayName("Find vorgaenge header") - @Nested - class TestFindVorgaengeHeader { - - private final FindVorgaengeHeaderRequestCriteria requestCriteria = FindVorgaengeRequestCriteriaTestFactory.create(); - private final FilterCriteria filterCriteria = FilterCriteria.builder().build(); - - @Test - void shouldCallRemoteService() { - doReturn(requestCriteria).when(service).setOrderBy(any()); - doReturn(filterCriteria).when(service).buildFilterCriteria(any()); - - service.findVorgaengeHeader(requestCriteria); - - verify(remoteService).findVorgaengeHeader(requestCriteria, filterCriteria); - } - - @Test - void shouldBuildFilterCriteria() { - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - - service.findVorgaengeHeader(requestCriteria); - - verify(service).buildFilterCriteria(requestCriteria.getFilterCriteria()); - } - - @DisplayName("order by") - @Nested - class TestOrderBy { - - @DisplayName("for " + UserRole.EINHEITLICHER_ANSPRECHPARTNER) - @Nested - class TestForEinheitlicherAnsprechpartner { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - } - - @Test - void shouldSetEaPriority() { - var request = service.setOrderBy(FindVorgaengeRequestCriteriaTestFactory.create()); - - assertThat(request.getOrderBy()).isEqualTo(OrderBy.EA_PRIORITY); - } - } - - @DisplayName("for " + UserRole.VERWALTUNG_POSTSTELLE) - @Nested - class TestForVerwaltungPoststelle { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - } - - @Test - void shouldSetPriority() { - - var request = service.setOrderBy(FindVorgaengeRequestCriteriaTestFactory.create()); - - assertThat(request.getOrderBy()).isEqualTo(OrderBy.PRIORITY); - } - } - - @DisplayName("for " + UserRole.VERWALTUNG_USER) - @Nested - class TestForVerwaltungUser { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - } - - @Test - void shouldSetToPriorityAsDefault() { - var request = service.setOrderBy(FindVorgaengeRequestCriteriaTestFactory.createBuilder() - .filterCriteria(FilterCriteriaTestFactory.createBuilder() - .hasNextWiedervorlageFrist(false).status(Optional.empty()).build()) - .build()); - - assertThat(request.getOrderBy()).isEqualTo(OrderBy.PRIORITY); - } - - @Test - void shouldSetToCreatedAtDescOnExistingStatus() { - var request = service.setOrderBy(FindVorgaengeRequestCriteriaTestFactory.createBuilder() - .filterCriteria(FilterCriteriaTestFactory.createBuilder() - .hasNextWiedervorlageFrist(false).build()) - .build()); - - assertThat(request.getOrderBy()).isEqualTo(OrderBy.CREATED_AT_DESC); - } - - @Test - void shouldSetToNextWiedervorlageFristIfItsTrue() { - var request = service.setOrderBy(FindVorgaengeRequestCriteriaTestFactory.createBuilder() - .filterCriteria(FilterCriteriaTestFactory.createBuilder() - .hasNextWiedervorlageFrist(true) - .status(Optional.empty()).build()) - .build()); - - assertThat(request.getOrderBy()).isEqualTo(OrderBy.NEXT_WIEDERVORLAGE_FRIST); - } - } - } - } - - @DisplayName("Build filter criteria") - @Nested - class TestBuildFilterCriteria { - - @DisplayName("assignedTo") - @Nested - class TestAssignedTo { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(any())).thenReturn(false); - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - } - - @Test - void shouldBeSetIfExists() { - var filterCriteria = buildFilterCriteria(FilterCriteriaTestFactory.create()); - - assertThat(filterCriteria.getAssignedTo()).hasValue(UserProfileTestFactory.ID); - } - - @Test - void shouldNotBeSetIfNotExist() { - var filterCriteria = buildFilterCriteria(FilterCriteriaTestFactory.createBuilder().assignedTo(Optional.empty()).build()); - - assertThat(filterCriteria.getAssignedTo()).isNotPresent(); - - } - } - - @DisplayName("status") - @Nested - class TestStatus { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(any())).thenReturn(false); - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - } - - @Test - void shouldBeSetIfExists() { - var filterCriteria = buildFilterCriteria(FilterCriteriaTestFactory.create()); - - assertThat(filterCriteria.getStatus()).hasValue(VorgangStatus.NEU); - } - - @Test - void shouldNotBeSetIfNotExist() { - var filterCriteria = buildFilterCriteria(FilterCriteriaTestFactory.createBuilder().status(Optional.empty()).build()); - - assertThat(filterCriteria.getStatus()).isNotPresent(); - - } - } - - @DisplayName("for " + UserRole.VERWALTUNG_POSTSTELLE) - @Nested - class TestForVerwaltungPoststelle { - - @BeforeEach - void mockUser() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - } - - @Test - void shouldFillFilterByOrganisationseinheiten() { - var filterBy = buildFilterCriteria(); - - assertThat(filterBy.isFilterByOrganisationseinheitenId()).isFalse(); - } - - @Test - void shouldFillStatus() { - var filterBy = buildFilterCriteria(); - - assertThat(filterBy.getStatus()).hasValue(VorgangStatus.NEU); - } - } - - @DisplayName("for " + UserRole.EINHEITLICHER_ANSPRECHPARTNER) - @Nested - class TestForEa { - - @BeforeEach - void mockUser() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - } - - @Test - void shouldFillFilterByOrganisationseinheiten() { - var filterBy = buildFilterCriteria(); - - assertThat(filterBy.isFilterByOrganisationseinheitenId()).isFalse(); - } - } - - @DisplayName("for " + UserRole.VERWALTUNG_USER) - @Nested - class TestForVerwaltungUser { - - @BeforeEach - void mockUser() { - when(userService.hasRole(anyString())).thenReturn(false); - } - - @Test - void shouldCallUserService() { - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - - buildFilterCriteria(); - - verify(userService).getUser(); - } - - @Test - void shouldFillFilterByOrganisationseinheitenId() { - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - - var filterBy = buildFilterCriteria(); - - assertThat(filterBy.isFilterByOrganisationseinheitenId()).isTrue(); - } - - @Test - void shouldFillOrganisationseinheitenId() { - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - - var filterBy = buildFilterCriteria(); - - assertThat(filterBy.getOrganisationsEinheitenId()).containsExactly(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } - } - - private FilterCriteria buildFilterCriteria() { - return buildFilterCriteria(FilterCriteria.builder().build()); - } - - private FilterCriteria buildFilterCriteria(FilterCriteria filterCriteria) { - return service.buildFilterCriteria(filterCriteria); - } - } - - @DisplayName("Find vorgangWithEingang") - @Nested - class TestFindVorgangWithEingang { - - private final FilterCriteria filterCriteria = FilterCriteria.builder().build(); - - @Test - void shouldCallRemoteService() { - doReturn(filterCriteria).when(service).buildFilterCriteria(any()); - - service.findVorgangWithEingang(VorgangHeaderTestFactory.ID); - - verify(remoteService).findVorgangWithEingang(VorgangHeaderTestFactory.ID, filterCriteria); - } - - @Test - void shouldBuildFilterCriteria() { - when(userService.getUser()).thenReturn(UserProfileTestFactory.create()); - - service.findVorgangWithEingang(VorgangHeaderTestFactory.ID); - - verify(service).buildFilterCriteria(any(FilterCriteria.class)); - } - } - - @Nested - class TestIsVorgangEditable { - - @Nested - class OnIsVorgangWithEingang { - - private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldCheckIfVorgangIsEditable() { - service.isVorgangEditable(vorgangWithEingang); - - verify(service).isVorgangWithEingangEditable(vorgangWithEingang); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldReturnCheckResult(boolean checkResult) { - when(service.isVorgangWithEingangEditable(vorgangWithEingang)).thenReturn(checkResult); - - var editable = service.isVorgangEditable(vorgangWithEingang); - - assertThat(editable).isEqualTo(checkResult); - } - } - - @Nested - class OnIsNotVorgangWithEingang { - - private final Vorgang vorgang = VorgangHeaderTestFactory.create(); - private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void init() { - doReturn(vorgangWithEingang).when(service).findVorgangWithEingang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldFindVorgangWithEingang() { - service.isVorgangEditable(vorgang); - - verify(service).findVorgangWithEingang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCheckIfVorgangIsEditable() { - service.isVorgangEditable(vorgang); - - verify(service).isVorgangWithEingangEditable(vorgangWithEingang); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldReturnCheckResult(boolean checkResult) { - when(service.isVorgangWithEingangEditable(vorgangWithEingang)).thenReturn(checkResult); - - var editable = service.isVorgangEditable(vorgang); - - assertThat(editable).isEqualTo(checkResult); - } - } - } - - @Nested - class TestIsVorgangWithEingangEditable { - - @ParameterizedTest - @EnumSource - void shouldBeFalseWhenVorgangIsLocked(VorgangStatus status) { - var vorgang = VorgangWithEingangTestFactory.createBuilder() - .header(VorgangHeadTestFactory.createBuilder().locked(true).build()) - .status(status) - .build(); - - var editable = service.isVorgangWithEingangEditable(vorgang); - - assertThat(editable).isFalse(); - } - - @Test - void shouldBeFalseWhenVorgangZuLoeschen() { - var vorgang = VorgangWithEingangTestFactory.createBuilder() - .header(VorgangHeadTestFactory.createBuilder().locked(false).build()) - .status(VorgangStatus.ZU_LOESCHEN) - .build(); - - var editable = service.isVorgangWithEingangEditable(vorgang); - - assertThat(editable).isFalse(); - } - - @ParameterizedTest - @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ZU_LOESCHEN") - void shouldBeTrueWhenVorgangIsNotZuLoeschen(VorgangStatus status) { - var vorgang = VorgangWithEingangTestFactory.createBuilder() - .header(VorgangHeadTestFactory.createBuilder().locked(false).build()) - .status(status) - .build(); - - var editable = service.isVorgangWithEingangEditable(vorgang); - - assertThat(editable).isTrue(); - } - - @ParameterizedTest - @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ZU_LOESCHEN") - void shouldBeTrueIfHeaderIsNull(VorgangStatus status) { - var vorgang = VorgangWithEingangTestFactory.createBuilder() - .header(null) - .status(status) - .build(); - - var editable = service.isVorgangWithEingangEditable(vorgang); - - assertThat(editable).isTrue(); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java deleted file mode 100644 index c0d0d621086cc1897b118c89dec48315eb47a45a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangURIResolverTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; - -class VorgangURIResolverTest { - - private VorgangURIResolver resolver = new VorgangURIResolver(); - - @Nested - class TestResolve { - - private static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - @ParameterizedTest - @MethodSource("invalidVorgangUris") - void shouldReturnEmptyIfUriIsNotRecognized(String uri) { - var result = resolver.resolve(uri); - - assertThat(result).isEmpty(); - } - - @ParameterizedTest - @MethodSource("validVorgangUris") - void shouldReturnLink(String uri) { - var result = resolver.resolve(uri); - - assertThat(result).isPresent(); - } - - @Nested - class TestVorgangLink { - - @ParameterizedTest - @MethodSource("de.ozgcloud.alfa.vorgang.VorgangURIResolverTest$TestResolve#validVorgangUris") - void shouldHaveCorrectRelValue(String uri) { - var result = resolver.resolve(uri); - - assertThat(result).get().extracting(Link::getRel).extracting(LinkRelation::value).isEqualTo(VorgangURIResolver.REL_NAME); - } - - @ParameterizedTest - @MethodSource("de.ozgcloud.alfa.vorgang.VorgangURIResolverTest$TestResolve#validVorgangUris") - void shouldHaveHrefOfVorgang(String uri) { - var result = resolver.resolve(uri); - - assertThat(result).get().extracting(Link::getHref).isEqualTo("/api/vorgangs/" + VORGANG_ID); - } - } - - private static Stream<String> validVorgangUris() { - return Stream.of( - "dns:///dummy.service/vorgangs/" + VORGANG_ID, - "dns:///dummy.service:123/vorgangs/" + VORGANG_ID, - "http://dummy.web.url/vorgangs/" + VORGANG_ID); - } - - private static Stream<String> invalidVorgangUris() { - return Stream.of("dns:///dummy.service/res-a/" + VORGANG_ID, - "dns:///dummy.service/" + VORGANG_ID, - "dns:///dummy.service/vorgangs/xyz/" + VORGANG_ID, - "dns:///dummy.service/vorgangs/" + VORGANG_ID + "/" + VORGANG_ID); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapperITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapperITCase.java deleted file mode 100644 index ae4343470ef40e7defacebd787ae9386262c9248..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapperITCase.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import java.util.List; -import java.util.Map; - -import org.apache.commons.collections.MapUtils; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import de.ozgcloud.vorgang.vorgang.GrpcEingang; -import de.ozgcloud.vorgang.vorgang.GrpcFormData; -import de.ozgcloud.vorgang.vorgang.GrpcFormField; - -@SpringBootTest -class VorgangWithEingangMapperITCase { - - @Autowired - private VorgangWithEingangMapper mapper; - - @Nested - class TestToVorgangWithEingang { - - @Nested - class TestMappingFormData { - - @Test - void shouldMapListOfStrings() { - var vorgang = mapper.toVorgangWithEingang(GrpcVorgangWithEingangTestFactory.createWithEingang(buildEingang())); - - assertThat(vorgang.getEingang().getFormData()).containsKey("TEST"); - assertThat(getMapEntry(vorgang, "TEST")).containsEntry("value", List.of("VALUE1", "VALUE2")); - } - - private GrpcEingang buildEingang() { - return GrpcEingangTestFactory.createBuilder().setFormData(GrpcFormData.newBuilder() - .addField(GrpcFormField.newBuilder().setName("TEST").setValue("VALUE1").build()) - .addField(GrpcFormField.newBuilder().setName("TEST").setValue("VALUE2").build())) - .build(); - } - - @SuppressWarnings("unchecked") - private Map<String, Object> getMapEntry(VorgangWithEingang vorgang, String key) { - return MapUtils.getMap(vorgang.getEingang().getFormData(), key); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapperTest.java deleted file mode 100644 index d250ba9754edca347108767a369ddc4c152240b3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangMapperTest.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.MockedStatic.Verification; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.BaseTypesMapper; -import de.ozgcloud.alfa.common.clientattribute.ClientAttribute; -import de.ozgcloud.alfa.common.clientattribute.ClientAttributeUtils; -import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue; -import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang; - -class VorgangWithEingangMapperTest { - - @Spy - @InjectMocks - private final VorgangWithEingangMapper mapper = Mappers.getMapper(VorgangWithEingangMapper.class); - - @Spy - private final UserIdMapper userIdMapper = Mappers.getMapper(UserIdMapper.class); - - @Spy - private final BaseTypesMapper baseTypesMapper = Mappers.getMapper(BaseTypesMapper.class); - - private MockedStatic<ClientAttributeUtils> utilsMockedStatic; - - @Mock - private EingangMapper eingangMapper; - - @DisplayName("To VorgangWithEingang") - @Nested - class TestToVorgangWithEingang { - private GrpcVorgangWithEingang grpcVorgangMitEingang = GrpcVorgangWithEingangTestFactory.create(); - private Verification staticClientAttributeUtilsCall = () -> ClientAttributeUtils.findGrpcValue( - ClientAttribute.HAS_NEW_POSTFACH_NACHRICHT, - grpcVorgangMitEingang.getClientAttributesList()); - - @BeforeEach - void setUpStaticMock() { - utilsMockedStatic = mockStatic(ClientAttributeUtils.class); - } - - @AfterEach - void closeStaticMock() { - utilsMockedStatic.close(); - } - - @Test - void shouldMapCreatedAt() { - var vorgang = callMapper(); - - assertThat(vorgang.getCreatedAt()).isEqualTo(CREATED_AT); - } - - @Test - void shouldMapNummer() { - var vorgang = callMapper(); - - assertThat(vorgang.getNummer()).isEqualTo(NUMMER); - } - - @Test - void shouldMapAktenzeichen() { - var vorgang = callMapper(); - - assertThat(vorgang.getAktenzeichen()).isEqualTo(AKTENZEICHEN); - } - - @Test - void shouldMapStatus() { - var vorgang = callMapper(); - - assertThat(vorgang.getStatus()).isEqualTo(VorgangStatus.NEU); - } - - @Test - void shouldMapAssignedTo() { - var vorgang = callMapper(); - - assertThat(vorgang.getAssignedTo()).isEqualTo(UserId.from(ASSIGNED_TO)); - } - - @Test - void shouldMapClientAttributeHasNewPostfachNachrichtToDefault() { - utilsMockedStatic.when(staticClientAttributeUtilsCall) - .thenReturn(Optional.empty()); - - var vorgang = callMapper(); - - assertThat(vorgang.isHasNewPostfachNachricht()).isFalse(); - } - - @ParameterizedTest - @ValueSource(booleans = { true, false }) - void shouldMapClientAttributeHasNewPostfachNachrichtToAttributeValue(boolean value) { - utilsMockedStatic - .when(staticClientAttributeUtilsCall) - .thenReturn(Optional.of(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build())); - - var vorgang = callMapper(); - - assertThat(vorgang.isHasNewPostfachNachricht()).isEqualTo(value); - } - - @Test - void shouldMapLockedToFalseIfLockIsNotPresent() { - var grpcVorgang = GrpcVorgangWithEingangTestFactory.createBuilder().setHeader(GrpcVorgangHeadTestFactory.create()).build(); - - var vorgang = mapper.toVorgangWithEingang(grpcVorgang); - - assertThat(vorgang.getHeader().isLocked()).isFalse(); - } - - @Test - void shouldMapLockedToTrueIfLockIsPresent() { - var grpcVorgang = GrpcVorgangWithEingangTestFactory.createBuilder() - .setHeader(GrpcVorgangHeadTestFactory.createBuilder().setLock(GrpcLockTestFactory.create()).build()) - .build(); - - var vorgang = mapper.toVorgangWithEingang(grpcVorgang); - - assertThat(vorgang.getHeader().isLocked()).isTrue(); - } - - private VorgangWithEingang callMapper() { - return mapper.toVorgangWithEingang(grpcVorgangMitEingang); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java deleted file mode 100644 index 87d377093b7b9438cef8bd144f1f736f34656072..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; -import org.springframework.web.util.UriComponentsBuilder; -import org.springframework.web.util.UriTemplate; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; - -class VorgangWithEingangProcessorTest { - - @Spy - @InjectMocks - private VorgangWithEingangProcessor processor; - @Mock - private PostfachMailController postfachMailController; - @Mock - private CurrentUserService userService; - @Mock - private UserManagerUrlProvider userManagerUrlProvider; - - @Mock - private VorgangProcessorProperties vorgangProcessorProperties; - - private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @DisplayName("Attachments") - @Nested - class TestAttachments { - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - @DisplayName("link") - @Nested - class TestLink { - - private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/attachments"; - private final LinkRelation linkRel = VorgangWithEingangProcessor.REL_ATTACHMENTS; - - @DisplayName("should be present if attachments exists") - @Test - void shouldBePresent() { - var link = processor.process(buildModelWithAttachments(1)).getLink(linkRel); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(PATH); - } - - @Test - void shouldNotBePresent() { - var link = processor.process(buildModelWithAttachments(0)).getLink(linkRel); - - assertThat(link).isNotPresent(); - } - } - - @DisplayName("download link") - @Nested - class TestDownloadLink { - - private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/attachments"; - private final LinkRelation linkRel = VorgangWithEingangProcessor.REL_DOWNLOAD_ATTACHMENTS; - - @DisplayName("should be present if attachments exists") - @Test - void shouldBePresent() { - var link = processor.process(buildModelWithAttachments(1)).getLink(linkRel); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(PATH); - } - - @Test - void shouldNotBePresent() { - var link = processor.process(buildModelWithAttachments(0)).getLink(linkRel); - - assertThat(link).isNotPresent(); - } - } - - private EntityModel<VorgangWithEingang> buildModelWithAttachments(int numberOfAttachments) { - return buildModelWithEingang(EingangTestFactory.createBuilder() - .numberOfAttachments(numberOfAttachments) - .build()); - } - - private EntityModel<VorgangWithEingang> buildModelWithEingang(Eingang eingang) { - return EntityModel.of(VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build()); - } - } - - @DisplayName("Representations") - @Nested - class TestRepresentationsLink { - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - private static final String PATH = "/api/vorgang/" + VorgangHeaderTestFactory.ID + "/representations"; - - private final LinkRelation linkRel = VorgangWithEingangProcessor.REL_REPRESENTATIONS; - - @DisplayName("should be present if representations exist") - @Test - void shouldBePresent() { - var link = processor.process(buildModelWithRepresentation(1)).getLink(linkRel); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(PATH); - } - - @Test - void shouldNotBePresent() { - var link = processor.process(buildModelWithRepresentation(0)).getLink(linkRel); - - assertThat(link).isNotPresent(); - } - - private EntityModel<VorgangWithEingang> buildModelWithRepresentation(int numberOfRepresentations) { - return buildModelWithEingang(EingangTestFactory.createBuilder() - .numberOfRepresentations(numberOfRepresentations) - .build()); - } - - private EntityModel<VorgangWithEingang> buildModelWithEingang(Eingang eingang) { - return EntityModel.of(VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build()); - } - } - - @Nested - class TestPostfachMailsLink { - - private final EntityModel<VorgangWithEingang> model = EntityModel.of(VorgangWithEingangTestFactory.create()); - - @Test - void shouldCallPostfachMailController() { - processor.process(model).getLink(VorgangWithEingangProcessor.REL_POSTFACH_MAILS); - - verify(postfachMailController).isPostfachConfigured(); - } - - @Test - void shouldBePresentIfConfigured() { - when(postfachMailController.isPostfachConfigured()).thenReturn(true); - - var link = processor.process(model).getLink(VorgangWithEingangProcessor.REL_POSTFACH_MAILS); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo("/api/postfachMails?vorgangId=" + VorgangHeaderTestFactory.ID); - } - - @Test - void shouldNotBePresentIfNotConfigured() { - when(postfachMailController.isPostfachConfigured()).thenReturn(false); - - var link = processor.process(model).getLink(VorgangWithEingangProcessor.REL_POSTFACH_MAILS); - - assertThat(link).isEmpty(); - } - } - - @Nested - class TestForwardingLink { - - @DisplayName("should NOT be present in other Role then EA") - @ParameterizedTest - @EnumSource - void shouldNotBePresentWithoutRole(Vorgang.VorgangStatus status) { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - - var link = processor.process(buildVorgangInStatus(status)).getLink(VorgangWithEingangProcessor.REL_VORGANG_FORWARDING); - - assertThat(link).isEmpty(); - } - - @DisplayName("with role EinheitlicherAnsprechpartner") - @Nested - class TestWithRoleEinheitlicherAnsprechpartner { - @BeforeEach - void init() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - } - - @DisplayName("should be present in any Status") - @ParameterizedTest - @EnumSource() - void shouldBePresent(VorgangStatus status) { - var link = processor.process(buildVorgangInStatus(status)).getLink(VorgangWithEingangProcessor.REL_VORGANG_FORWARDING); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo("/api/forwardings?vorgangId=" + VorgangHeaderTestFactory.ID); - } - } - - private EntityModel<VorgangWithEingang> buildVorgangInStatus(VorgangStatus status) { - return EntityModel.of(VorgangWithEingangTestFactory.createBuilder().status(status).build()); - } - } - - @DisplayName("Historie Link") - @Nested - class TestHistorieLink { - - @Test - void shouldBePresent() { - var link = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())).getLink(VorgangWithEingangProcessor.REL_HISTORIE); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo("/api/histories?vorgangId=" + VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Search user profile link") - @Nested - class TestSearchUserProfileLink { - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - @DisplayName("on configured for search user profile") - @Nested - class TestIsConfigured { - - @BeforeEach - void init() { - when(userManagerUrlProvider.isConfiguredForSearchUserProfile()).thenReturn(true); - } - - @Test - void shouldAddIfConfigured() { - when(userManagerUrlProvider.getSearchUserProfilesTemplate()).thenReturn( - UriComponentsBuilder.fromUriString("/api/userProfiles/?searchBy={searchBy}")); - - var model = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_SEARCH_USER)).isPresent().get().extracting(Link::getHref).isEqualTo( - "/api/userProfiles/?searchBy={searchBy}&deleted=false&organisationsEinheitId=" - + ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldNotAddIfOrganisationsEinheitIdIsMissing() { - var model = processor.process(EntityModel.of(createVorgangWithoutOrganisationsEinheitId())); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_SEARCH_USER)).isNotPresent(); - } - } - - @DisplayName("on not configured for search user profile") - @Nested - class TestIsNotConfigured { - - @BeforeEach - void init() { - when(userManagerUrlProvider.isConfiguredForSearchUserProfile()).thenReturn(false); - } - - @Test - void shouldNotAddifNotConfigured() { - var model = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_SEARCH_USER)).isNotPresent(); - } - - @Test - void shouldNotAddIfOrganisationsEinheitIdIsPresent() { - var model = processor.process(EntityModel.of(createVorgangWithoutOrganisationsEinheitId())); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_SEARCH_USER)).isNotPresent(); - } - } - - private VorgangWithEingang createVorgangWithoutOrganisationsEinheitId() { - var zustaendigeStelle = ZustaendigeStelleTestFactory.createBuilder().organisationseinheitenId(null).build(); - var eingang = EingangTestFactory.createBuilder().zustaendigeStelle(zustaendigeStelle).build(); - - return VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build(); - } - } - - @DisplayName("Process vorgang") - @Nested - class TestProcessVorgang { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final EntityModel<VorgangWithEingang> vorgangEntityModel = EntityModel.of(vorgang); - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - @DisplayName("on matching configuration") - @Nested - class TestOnMatchingConfiguration { - - @BeforeEach - void init() { - when(vorgangProcessorProperties.getProcessor()).thenReturn(List.of(VorgangPropertyTestFactory.create())); - } - - @Test - void shouldBeVisible() { - var entityModel = processor.process(vorgangEntityModel); - - assertThat(entityModel.getLink(VorgangWithEingangProcessor.REL_PROCESS_VORGANG)) - .isPresent().get().extracting(Link::getHref).isEqualTo(buildExpectedLink()); - } - - private String buildExpectedLink() { - return new UriTemplate(CommandByRelationController.COMMAND_BY_RELATION_PATH) - .expand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString(); - } - } - - @DisplayName("on non matching configuration") - @Nested - class TestOnNonMatchingConfiguration { - - @Test - void shouldNotBeVisibleOnWrongFormId() { - var properties = List.of(VorgangPropertyTestFactory.createBuilder().formId("quatsch").build()); - when(vorgangProcessorProperties.getProcessor()).thenReturn(properties); - - var model = processor.process(vorgangEntityModel); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_PROCESS_VORGANG)).isNotPresent(); - } - - @Test - void shouldNotBeVisibleOnWrongFormEngineName() { - var properties = List.of(VorgangPropertyTestFactory.createBuilder().formEngineName("quatsch").build()); - when(vorgangProcessorProperties.getProcessor()).thenReturn(properties); - - var model = processor.process(vorgangEntityModel); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_PROCESS_VORGANG)).isNotPresent(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangTest.java deleted file mode 100644 index 1e877a76938d73f46da9a17498e3fb96ce8ce38b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -class VorgangWithEingangTest { - - @Test - void shouldGetOrganisationseinheitWhenSet() { - VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - String organisationseinheitenID = vorgang.getOrganisationseinheitenID(); - - assertThat(organisationseinheitenID).isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); - } - - @Test - void shouldNotGetOrganisationseinheitWithEingangUnset() { - VorgangWithEingang vorgang = createVorgangWithNullEingang(); - - String organisationseinheitenID = vorgang.getOrganisationseinheitenID(); - - assertThat(organisationseinheitenID).isNull(); - } - - @Test - void shouldNotGetOrganisationseinheitWithZustaendigeStelleUnset() { - VorgangWithEingang vorgang = createVorgangWithNullZustaendigeStelle(); - - String organisationseinheitenID = vorgang.getOrganisationseinheitenID(); - - assertThat(organisationseinheitenID).isNull(); - } - - @Test - void shouldNotGetOrganisationseinheitWithOrganisationseinheitUnset() { - VorgangWithEingang vorgang = createVorgangWithNullOrganisationseinheit(); - - String organisationseinheitenID = vorgang.getOrganisationseinheitenID(); - - assertThat(organisationseinheitenID).isNull(); - } - - private VorgangWithEingang createVorgangWithNullEingang() { - return createVorgangWithEingang(null); - } - - private VorgangWithEingang createVorgangWithNullZustaendigeStelle() { - Eingang eingang = EingangTestFactory.createBuilder().zustaendigeStelle(null).build(); - - return createVorgangWithEingang(eingang); - } - - private VorgangWithEingang createVorgangWithNullOrganisationseinheit() { - ZustaendigeStelle zustaendigeStelle = ZustaendigeStelle.builder().organisationseinheitenId(null).build(); - Eingang eingang = EingangTestFactory.createBuilder().zustaendigeStelle(zustaendigeStelle).build(); - - return createVorgangWithEingang(eingang); - } - - private VorgangWithEingang createVorgangWithEingang(Eingang eingang) { - return VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build(); - } - -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangTestFactory.java deleted file mode 100644 index 1a861d8dbf9fc746ec8bdd9db3fc2954840dee99..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangTestFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory.*; - -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; - -public class VorgangWithEingangTestFactory { - - public static VorgangWithEingang create() { - return createBuilder().build(); - } - - public static VorgangWithEingang.VorgangWithEingangBuilder createBuilder() { - return VorgangWithEingang.builder() - .id(ID) - .version(VERSION) - .assignedTo(UserProfileTestFactory.ID) - .name(NAME) - .status(STATUS) - .nummer(NUMMER) - .aktenzeichen(AKTENZEICHEN) - .createdAt(CREATED_AT) - .hasNewPostfachNachricht(true) - .header(VorgangHeadTestFactory.create()) - .eingang(EingangTestFactory.create()); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleMapperTest.java deleted file mode 100644 index 1602c6a806145ebae7c5e315e20558969fca745b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleMapperTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; - -public class ZustaendigeStelleMapperTest { - private final ZustaendigeStelleMapper mapper = Mappers.getMapper(ZustaendigeStelleMapper.class); - - @Nested - class TestMapToZustaendigeStelle { - - @Test - void shouldMap() { - var zustaendigeStelle = mapper.mapToZustaendigeStelle(GrpcZustaendigeStelleTestFactory.create()); - assertThat(zustaendigeStelle).usingRecursiveComparison().isEqualTo(ZustaendigeStelleTestFactory.create()); - } - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleTestFactory.java deleted file mode 100644 index 5b02cb6d8d0b4b053e58dae5257db77546b2d272..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/ZustaendigeStelleTestFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang; - -public class ZustaendigeStelleTestFactory { - public static final String EMAIL = "test@test.de"; - public static final String ORGANISATIONSEINHEITEN_ID = "123456"; - - public static ZustaendigeStelle create() { - return createBuilder().build(); - } - - public static ZustaendigeStelle.ZustaendigeStelleBuilder createBuilder() { - return ZustaendigeStelle.builder() - .email(EMAIL) - .organisationseinheitenId(ORGANISATIONSEINHEITEN_ID); - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java deleted file mode 100644 index 83e431f870d0b470841cb427a4c4a4954b83acbf..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java +++ /dev/null @@ -1,395 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang.command; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; - -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class VorgangCommandProcessorTest { - - private static final String EXPECTED_COMMAND_LINK_TEMPL = "/api/vorgangs/%s/relations/%s/%d/commands"; - private static final String EXPECTED_COMMAND_LINK = String.format(EXPECTED_COMMAND_LINK_TEMPL, CommandTestFactory.VORGANG_ID, - VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION); - - @Spy - @InjectMocks - private VorgangCommandProcessor processor; - @Mock - private CurrentUserService userService; - @Mock - private VorgangController vorgangController; - - @Test - void shouldNotAddLinksIfVorgangIsNull() { - var entityModel = mock(EntityModel.class); - - processor.process(entityModel); - - verify(entityModel, never()).add(any(Link.class)); - } - - @ParameterizedTest - @EnumSource(value = VorgangStatus.class) - void shouldNotAddLinksIfVorgangIsNotEditable(VorgangStatus status) { - var vorgang = VorgangHeaderTestFactory.createBuilder().status(status).build(); - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var entityModel = processor.process(EntityModel.of(vorgang)); - - assertThat(entityModel.hasLinks()).isFalse(); - } - - @Nested - @DisplayName("add 'annehmen' link") - class TestAnnehmenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_ANNEHMEN; - - @Test - void shouldBePresent() { - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.NEU)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref).isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) - void shouldNOTbePresentbyStatus(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - @DisplayName("add 'verwerfen' link") - class TestVerwerfenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_VERWERFEN; - - @ParameterizedTest - @ValueSource(strings = { "EINHEITLICHER_ANSPRECHPARTNER", "VERWALTUNG_USER" }) - void shouldBePresentAtStatusAndRole(String userRole) { - doReturn(userRole).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.NEU)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref).isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) - void shouldNOTbePresentAtStatusAndRoleEa(VorgangStatus status) { - doReturn(UserRole.EINHEITLICHER_ANSPRECHPARTNER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) - void shouldNOTbePresentAtStatusAndRoleVerwaltungUser(VorgangStatus status) { - doReturn(UserRole.VERWALTUNG_USER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - @DisplayName("add 'zurueckholen' link") - class TestZurueckholenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_ZURUECKHOLEN; - - @ParameterizedTest - @ValueSource(strings = { "EINHEITLICHER_ANSPRECHPARTNER", "VERWALTUNG_USER" }) - void shouldBePresentAtStatusAndRole(String userRole) { - doReturn(userRole).when(processor).getUserRole(); - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.VERWORFEN)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref).isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(names = { "NEU", "ANGENOMMEN" }) - void shouldNOTbePresentAtStatusAndRoleVerwaltungUser(VorgangStatus status) { - doReturn(UserRole.VERWALTUNG_USER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - - @ParameterizedTest - @EnumSource(names = { "NEU", "ANGENOMMEN" }) - void shouldNOTbePresentAtStatusAndRoleEa(VorgangStatus status) { - doReturn(UserRole.EINHEITLICHER_ANSPRECHPARTNER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - @DisplayName("add 'bearbeiten' link") - class TestBearbeitenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_BEARBEITEN; - - @Test - void shouldBePresent() { - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.ANGENOMMEN)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "ANGENOMMEN", "ABGESCHLOSSEN" }) - void shouldNOTbePresentbyStatus(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - @DisplayName("add 'bescheiden' link") - class TestBescheidenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_BESCHEIDEN; - - @Test - void shouldBePresent() { - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.IN_BEARBEITUNG)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "IN_BEARBEITUNG" }) - void shouldNOTbePresentbyStatus(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - @DisplayName("add 'zurueckstellen' link") - class TestZurueckstellenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_ZURUECKSTELLEN; - - @Test - void shouldBePresent() { - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.IN_BEARBEITUNG)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref).isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "IN_BEARBEITUNG" }) - void shouldNOTbePresentbyStatus(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - @DisplayName("add 'abschliessen' link") - class TestAbschliessenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_ABSCHLIESSEN; - - @Nested - class TestOnVerwaltungUser { - - @BeforeEach - void mockUserRole() { - doReturn(UserRole.VERWALTUNG_USER).when(processor).getUserRole(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "IN_BEARBEITUNG", "BESCHIEDEN" }) - void shouldBePresent(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "IN_BEARBEITUNG", "BESCHIEDEN" }) - void shouldNOTbePresentbyStatus(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - class TestOnEinheitlicherAnsprechpartner { - - @BeforeEach - void mockUserRole() { - doReturn(UserRole.EINHEITLICHER_ANSPRECHPARTNER).when(processor).getUserRole(); - } - - @Test - void shouldBePresent() { - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.IN_BEARBEITUNG)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo(EXPECTED_COMMAND_LINK); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "IN_BEARBEITUNG" }) - void shouldNOTbePresentbyStatus(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - } - - @Nested - @DisplayName("add 'wiedereroeffnen' link") - class TestWiedereroeffnenLink { - - private final LinkRelation linkRel = VorgangCommandProcessor.REL_VORGANG_WIEDEREROEFFNEN; - - @DisplayName("on Vorgang with Status Abgeschlossen") - @ParameterizedTest - @ValueSource(strings = { "EINHEITLICHER_ANSPRECHPARTNER", "VERWALTUNG_USER" }) - void shouldBePresentOnStatusAbgeschlossen(String userRole) { - doReturn(userRole).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.ABGESCHLOSSEN)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref).isEqualTo(EXPECTED_COMMAND_LINK); - } - - @Test - @DisplayName("on Vorgang with Status Beschieden and Role VerwaltungUser") - void shouldBePresentOnStatusBeschieden() { - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.BESCHIEDEN)); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref).isEqualTo(EXPECTED_COMMAND_LINK); - } - - @Test - @DisplayName("on Vorgang with Status Beschieden and Role EA") - void shouldBeNotPresentOnStatusBeschiedenAndRoleEA() { - doReturn(UserRole.EINHEITLICHER_ANSPRECHPARTNER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(VorgangStatus.BESCHIEDEN)); - - assertThat(processed.getLink(linkRel)).isNotPresent(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "ABGESCHLOSSEN", "BESCHIEDEN" }) - void shouldNOTbePresentbyStatusAndRoleVerwaltungUser(VorgangStatus status) { - doReturn(UserRole.VERWALTUNG_USER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "ABGESCHLOSSEN", "BESCHIEDEN" }) - void shouldNOTbePresentbyStatusAndRoleEA(VorgangStatus status) { - doReturn(UserRole.EINHEITLICHER_ANSPRECHPARTNER).when(processor).getUserRole(); - - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - } - - @Nested - class TestRoleVerwaltungPoststelle { - @BeforeEach - void init() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(Boolean.FALSE); - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(Boolean.TRUE); - } - - @ParameterizedTest - @EnumSource() - void shouldNotBePresent(VorgangStatus status) { - var processed = processor.process(buildEditableVorgangInStatus(status)); - - assertThat(processed.getLinks()).isEmpty(); - } - } - - private EntityModel<Vorgang> buildEditableVorgangInStatus(VorgangStatus status) { - var vorgangInStatus = VorgangHeaderTestFactory.createBuilder().status(status).build(); - when(vorgangController.isEditable(vorgangInStatus)).thenReturn(true); - return EntityModel.of(vorgangInStatus); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java deleted file mode 100644 index 64fd8c50634f12d18c5e14de0e2226252ad21fa4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (C) 2024 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. - */ -package de.ozgcloud.alfa.vorgang.command; - -import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.LinkRelation; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.command.CommandController; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingTestFactory; - -class VorgangWithEingangCommandProcessorTest { - - @Spy - @InjectMocks - private VorgangWithEingangCommandProcessor processor; - @Mock - private CurrentUserService userService; - @Mock - private CommandController commandController; - @Mock - private ForwardingController forwardingController; - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private EntityModel<VorgangWithEingang> vorgangEntityModel = EntityModel.of(vorgang); - - private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @Test - void shouldReturnEntityModel() { - initUserProfileUrlProvider(urlProvider); - - var result = processor.process(vorgangEntityModel); - - assertThat(result).isNotNull(); - } - - @Nested - class TestAddForwardLink { - - private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.IN_BEARBEITUNG).build(); - - @BeforeEach - void init() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - } - - @DisplayName("should be true for Role EINHEITLICHER_ANSPRECHPARTNER, Status IN_BEARBEITUNG and Forwarding with Error") - @Test - void shouldBeTrue() { - when(forwardingController.findFailedForwardings(anyString())).thenReturn(Collections.singletonList(ForwardingTestFactory.create())); - - var addLink = processor.isForwardingAllowed(vorgang); - - assertThat(addLink).isTrue(); - } - - @Test - void shouldBeTrueInStatusNeu() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.NEU).build(); - - var addLink = processor.isForwardingAllowed(vorgang); - - assertThat(addLink).isTrue(); - } - - @Test - void shouldBeFalseForRoleNotEA() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - - var addLink = processor.isForwardingAllowed(vorgang); - - assertThat(addLink).isFalse(); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NEU", "IN_BEARBEITUNG" }) - void shouldBeFalseForVorgangInOtherStatus(VorgangStatus status) { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); - - var addLink = processor.isForwardingAllowed(vorgang); - - assertThat(addLink).isFalse(); - } - - @Test - void shouldBeFalseIfNoFailedForwarding() { - when(forwardingController.findFailedForwardings(anyString())).thenReturn(Collections.emptyList()); - - var addLink = processor.isForwardingAllowed(vorgang); - - assertThat(addLink).isFalse(); - } - - @Test - void shouldBeFalseOnStatusWeitergeleitet() { - VorgangWithEingang vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.WEITERGELEITET).build(); - - var addLink = processor.isForwardingAllowed(vorgang); - - assertThat(addLink).isFalse(); - } - - } - - @Nested - @DisplayName("add 'forward' link") - class TestForwardLink { - - private final LinkRelation linkRel = VorgangWithEingangCommandProcessor.REL_VORGANG_FORWARD; - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - @Test - void shouldNotBePresent() { - doReturn(false).when(processor).isForwardingAllowed(any()); - - var processed = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())); - - assertThat(processed.getLink(linkRel)).isEmpty(); - } - - @Test - void shouldBePresent() { - doReturn(true).when(processor).isForwardingAllowed(any()); - - var processed = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())); - - assertThat(processed.getLink(linkRel)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/relations/" + VorgangHeaderTestFactory.ID + "/" - + VorgangHeaderTestFactory.VERSION + "/commands"); - } - - } - - @Nested - class TestPendingCommandsLink { - - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - - @Test - void shouldExists() { - when(commandController.existsPendingCommands(any())).thenReturn(true); - - var link = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())) - .getLink(VorgangWithEingangCommandProcessor.REL_PENDING_COMMANDS); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo("/api/commands?pending=true&vorgangId=" + VorgangHeaderTestFactory.ID); - } - - @Test - void shouldNotExists() { - when(commandController.existsPendingCommands(any())).thenReturn(false); - - var link = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())) - .getLink(VorgangWithEingangCommandProcessor.REL_PENDING_COMMANDS); - - assertThat(link).isNotPresent(); - } - - @DisplayName("should have link with user role " + UserRole.EINHEITLICHER_ANSPRECHPARTNER) - void shouldExistsByRoleEA() { - when(commandController.existsPendingCommands(any())).thenReturn(false); - - var link = processor.process(EntityModel.of(VorgangWithEingangTestFactory.create())) - .getLink(VorgangWithEingangCommandProcessor.REL_PENDING_COMMANDS); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/commands?pending=true&vorgangId=" + VorgangHeaderTestFactory.ID); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingControllerTest.java deleted file mode 100644 index 670bbd3dcfbf08a51a52bc57e4d69c912a1bf801..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingControllerTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class ForwardingControllerTest { - - @InjectMocks - private ForwardingController controller; - @Mock - private ForwardingService service; - @Mock - private ForwardingModelAssembler modelAssembler; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestFindByVorgang { - @Test - void shouldReturn200() throws Exception { - doRequest().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - doRequest(); - - verify(service).findByVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - doRequest(); - - verify(modelAssembler).toCollectionModel(Mockito.<Stream<Forwarding>>any()); - } - - private ResultActions doRequest() throws Exception { - return mockMvc.perform(get(ForwardingController.LIST_PATH).param(ForwardingController.PARAM_VORGANG_ID, VorgangHeaderTestFactory.ID)); - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoServiceTest.java deleted file mode 100644 index 7f237a504d9845ac8b0f1c36cbdd9b566ac673a2..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoServiceTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.assertj.core.api.Assertions.*; - -import java.util.Arrays; -import java.util.HashSet; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Spy; -import org.springframework.test.util.ReflectionTestUtils; - -class ForwardingLandesnetzInfoServiceTest { - - @Spy - @InjectMocks - private ForwardingLandesnetzInfoService service; - - @DisplayName("Is email in landesnetz") - @Nested - class TestIstInLandesnetz { - - private final String EMAIL_NAME = "testEmailName@"; - - private final String IN_LANDESNETZ = "itvsh.de"; - private final String IN_LANDESNETZ_WITH_DOTS = ".itvsh.old.de"; - - @BeforeEach - void initMap() throws Exception { - ReflectionTestUtils.setField(service, "landesnetzInfo", new HashSet<>(Arrays.asList(IN_LANDESNETZ, IN_LANDESNETZ_WITH_DOTS))); - } - - @DisplayName("validate with email in Landesnetz") - @Nested - class TestWithMatchingEmail { - - @Test - void shouldReturnTrueWithSingleDot() { - var result = service.isEmailInLandesnetz(EMAIL_NAME + IN_LANDESNETZ); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnTrueWithMultipleDots() { - var result = service.isEmailInLandesnetz(EMAIL_NAME + IN_LANDESNETZ_WITH_DOTS); - - assertThat(result).isTrue(); - } - - @Test - void shouldReturnTrueByConsideringJustTheEnd() { - var result = service.isEmailInLandesnetz(EMAIL_NAME + "me" + IN_LANDESNETZ_WITH_DOTS); - - assertThat(result).isTrue(); - } - } - - @DisplayName("validate with email NOT in Landesnetz") - @Nested - class TestEndsWithMatching { - - @Test - void shouldReturnFalseOnWrongDomain() { - var result = service.isEmailInLandesnetz(EMAIL_NAME + "me.gmx.de"); - - assertThat(result).isFalse(); - } - - @Test - void shouldReturnFalseOnConsideringJustTheEnd() { - var result = service.isEmailInLandesnetz(EMAIL_NAME + "me" + IN_LANDESNETZ_WITH_DOTS + ".nicht.gueltig.de"); - - assertThat(result).isFalse(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssemblerTest.java deleted file mode 100644 index bc9484c6d37e412a8bc0f602366b79a0edf5ec64..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssemblerTest.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.EnumSource.Mode; -import org.mockito.InjectMocks; -import org.mockito.Spy; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.Link; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.Forwarding.Status; - -@Component -class ForwardingModelAssemblerTest { - - @Spy // NOSONAR - @InjectMocks - private ForwardingModelAssembler modelAssembler; - - @Nested - class TestToModel { - - @Test - void shouldReturnEntityModel() { - var model = modelAssembler.toModel(ForwardingTestFactory.create()); - - assertThat(model).isNotNull(); - } - - @Test - void shouldHaveSelfLink() { - var model = modelAssembler.toModel(ForwardingTestFactory.create()); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get() - .extracting(Link::getHref).isEqualTo("/api/forwardings/" + ForwardingTestFactory.ID); - } - } - - @Nested - class TestToCollectionModel { - @Test - void shouldCallToModel() { - modelAssembler.toCollectionModel(Stream.of(ForwardingTestFactory.create())); - - verify(modelAssembler).toModel(any()); - } - - @Test - void shouldHaveSelfLink() { - var model = modelAssembler.toCollectionModel(Stream.of(ForwardingTestFactory.create())); - - assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get() - .extracting(Link::getHref).isEqualTo("/api/forwardings"); - } - } - - @Nested - class TestLinkOnModel { - - private final String expectedLinkHref = "/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/relations/" + ForwardingTestFactory.ID - + "/-1/commands"; - - @Nested - class TestMarkAsSuccessLink { - - @Test - void shouldBePresentInStatusSENT() { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(Status.SENT).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_MARK_AS_SUCCESS)).isPresent().get() - .extracting(Link::getHref).isEqualTo(expectedLinkHref); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "SENT" }) - void shouldNOTBePresentInAnyOtherStatus(Status status) { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_MARK_AS_SUCCESS)).isEmpty(); - } - } - - @Nested - class TestMarkAsFailLink { - - @ParameterizedTest - @EnumSource(names = { "SENT", "SUCCESSFULL" }) - void shouldBePresentInStatusSENT(Status status) { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_MARK_AS_FAIL)).isPresent().get() - .extracting(Link::getHref).isEqualTo(expectedLinkHref); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "SENT", "SUCCESSFULL" }) - void shouldNOTBePresentInAnyOtherStatus(Status status) { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_MARK_AS_FAIL)).isEmpty(); - } - } - - @Nested - class TestFailedLink { - - @Test - void shouldBePresentInStatusFAILED() { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(Status.FAILED).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_FAILED)).isPresent().get() - .extracting(Link::getHref).isEqualTo("/api/forwardings/" + ForwardingTestFactory.ID); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "FAILED" }) - void shouldNOTBePresentInAnyOtherStatus(Status status) { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_FAILED)).isEmpty(); - } - } - - @Nested - class TestSuccessfullLink { - - @Test - void shouldBePresentInStatusSUCCESSFULL() { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(Status.SUCCESSFULL).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_SUCCESSFULL)).isPresent().get() - .extracting(Link::getHref).isEqualTo("/api/forwardings/" + ForwardingTestFactory.ID); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "SUCCESSFULL" }) - void shouldNOTBePresentInAnyOtherStatus(Status status) { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_SUCCESSFULL)).isEmpty(); - } - } - - @Nested - class TestSendErrorLink { - - @Test - void shouldBePresentInStatusSEND_ERROR() { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(Status.SEND_ERROR).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_ERROR)).isPresent().get() - .extracting(Link::getHref).isEqualTo("/api/forwardings/" + ForwardingTestFactory.ID); - } - - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "SEND_ERROR" }) - void shouldNOTBePresentInAnyOtherStatus(Status status) { - var model = modelAssembler.toModel(ForwardingTestFactory.createBuilder().status(status).build()); - - assertThat(model.getLink(ForwardingModelAssembler.REL_ERROR)).isEmpty(); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidatorTest.java deleted file mode 100644 index 406376542a0ba7962304aefd24cbf64b87131971..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidatorTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import jakarta.validation.ConstraintValidatorContext; -import jakarta.validation.ConstraintValidatorContext.ConstraintViolationBuilder; - -import org.apache.commons.lang3.RandomStringUtils; -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.vorgang.RedirectRequestTestFactory; - -class ForwardingPasswordValidatorTest { - - @Spy - @InjectMocks - private ForwardingPasswordValidator validator = new ForwardingPasswordValidator(); - @Mock - private ConstraintValidatorContext context; - @Mock - private ForwardingLandesnetzInfoService landesnetzInfoService; - - @DisplayName("Is valid") - @Nested - class TestIsValid { - - @DisplayName("with null/empty") - @Nested - class TestOnNullOrEmptyEmail { - - @Test - void shouldReturnTrue() { - var isValid = validator.isValid(RedirectRequestTestFactory.createBuilder().email(StringUtils.EMPTY).build(), context); - - assertThat(isValid).isTrue(); - } - } - - @DisplayName("for a doman in landesnetz") - @Nested - class TestOnIsInLandesnetz { - - @BeforeEach - void mock() { - when(landesnetzInfoService.isEmailInLandesnetz(anyString())).thenReturn(true); - } - - @Test - void shouldNotDoPasswordValidation() { - validator.isValid(RedirectRequestTestFactory.create(), context); - - verify(validator, never()).isValidPassword(any()); - } - } - - @DisplayName("for domain NOT in landesnetz") - @Nested - class TestOnIfNOTInLandesnetz { - - @Mock - private ConstraintViolationBuilder contraintBuilder; - - @BeforeEach - void mock() { - when(landesnetzInfoService.isEmailInLandesnetz(anyString())).thenReturn(false); - doNothing().when(validator).prepareConstraint(any()); - } - - @Test - void shouldDoPasswordValidation() { - validator.isValid(RedirectRequestTestFactory.create(), context); - - verify(validator).isValidPassword(any()); - } - } - - @DisplayName("password") - @Nested - class TestPasswordValidation { - @Test - void shouldReturnFalseOnLowerSize() { - var isValid = isValid("notEnou".toCharArray()); - - assertThat(isValid).isFalse(); - } - - @Test - void shouldReturnFalseOnLargerSize() { - var isValid = isValid(RandomStringUtils.randomAlphabetic(41).toCharArray()); - - assertThat(isValid).isFalse(); - } - - @Test - void shouldReturnFalseOnNull() { - var isValid = isValid(null); - - assertThat(isValid).isFalse(); - } - - @Test - void shouldReturnTrueOnValidSize() { - var isValid = isValid(RedirectRequestTestFactory.PASSWORD); - - assertThat(isValid).isTrue(); - } - - private boolean isValid(char[] password) { - return validator.isValidPassword(RedirectRequest.builder().password(password).build()); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteServiceTest.java deleted file mode 100644 index 82aa2a6652bc58b4e09c8ed805a1b3c5fa0ce392..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteServiceTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.forwarding.ForwardingServiceGrpc.ForwardingServiceBlockingStub; -import de.ozgcloud.vorgang.forwarding.GrpcFindForwardingsRequest; -import de.ozgcloud.vorgang.forwarding.GrpcForwarding; -import de.ozgcloud.vorgang.forwarding.GrpcForwardingsResponse; -import de.ozgcloud.vorgang.grpc.command.GrpcCallContext; - -class ForwardingRemoteServiceTest { - - @InjectMocks // NOSONAR - private ForwardingRemoteService service; - - @Mock - private ForwardingServiceBlockingStub serviceStub; - @Mock - private ForwardingMapper mapper; - - @Mock - private ContextService contextService; - - @Captor - private ArgumentCaptor<GrpcFindForwardingsRequest> requestCaptor; - - private GrpcCallContext callContext = GrpcCallContext.newBuilder().build(); - - @BeforeEach - void initContextService() { - when(contextService.createCallContext()).thenReturn(callContext); - } - - @Nested - class TestFindForwardings { - private GrpcForwarding grpcForwarding = GrpcForwarding.newBuilder().build(); - private GrpcForwardingsResponse response = GrpcForwardingsResponse.newBuilder().addForwardings(grpcForwarding).build(); - - @BeforeEach - void initStub() { - when(serviceStub.findForwardings(any())).thenReturn(response); - } - - @Test - void shouldCallStub() { - service.findForwardings(VorgangHeaderTestFactory.ID); - - verify(serviceStub).findForwardings(any()); - } - - @Test - void shouldFillCallContext() { - service.findForwardings(VorgangHeaderTestFactory.ID); - - verify(serviceStub).findForwardings(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getContext()).isSameAs(callContext); - } - - @Test - void shouldHaveVorgangId() { - service.findForwardings(VorgangHeaderTestFactory.ID); - - verify(serviceStub).findForwardings(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallMapper() { - service.findForwardings(VorgangHeaderTestFactory.ID).forEach(v -> { - }); - - verify(mapper).fromGrpc(grpcForwarding); - } - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingTestFactory.java deleted file mode 100644 index 5b834aa838b32ccc81f29c9c0cc9189992e44d88..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingTestFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import java.util.UUID; - -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -public class ForwardingTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final String VORGANG_ID = VorgangHeaderTestFactory.ID; - - public static Forwarding create() { - return createBuilder().build(); - } - - public static Forwarding.ForwardingBuilder createBuilder() { - return Forwarding.builder() - .id(ID) - .vorgangId(VORGANG_ID); - - } - -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadServiceTest.java deleted file mode 100644 index a2291ca870f98ece338f36e19a7842a395f41022..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadServiceTest.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.vorgang.forwarding; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.io.InputStream; -import java.util.Optional; -import java.util.Scanner; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.Spy; - -import de.ozgcloud.common.test.TestUtils; - -class LandesnetzInfoReadServiceTest { - - @Spy - private LandesnetzInfoReadService service = new LandesnetzInfoReadService(); - - @Nested - class TestStartOfSection { - - @Test - void shouldAcceptStartSectionLine() { - boolean isStartOfSection = service.isStartOfSection("############################## Beginn Schleswig-Holstein ##########################"); - - assertThat(isStartOfSection).isTrue(); - } - - @DisplayName("should return FALSE when") - @ParameterizedTest(name = "\"{0}\"") - @ValueSource(strings = {"", "0", "###", "abs.de esm", "################## Schleswig-Holstein ########"}) - void shouldDeclineAnotherLines(String line) { - boolean isStartOfSection = service.isStartOfSection(line); - - assertThat(isStartOfSection).isFalse(); - } - } - - @Nested - class TestEndOfSection { - - @Test - void shouldAcceptStartSectionLine() { - boolean isEndOfSection = service.isEndOfSection("############################## Ende Schleswig-Holstein ##########################"); - - assertThat(isEndOfSection).isTrue(); - } - - @DisplayName("should return FALSE when") - @ParameterizedTest(name = "\"{0}\"") - @ValueSource(strings = {"", "0", "###", "abs.de esm","################## Schleswig-Holstein ########"}) - void shouldDeclineAnotherLines(String line) { - boolean isEndOfSection = service.isEndOfSection(line); - - assertThat(isEndOfSection).isFalse(); - } - } - - @Nested - class TestIsComment { - - @Test - void shouldAcceptCommentLine() { - boolean isCommentedLine = service.isCommentedLine("# Kommentar"); - - assertThat(isCommentedLine).isTrue(); - } - - @DisplayName("should return FALSE when") - @ParameterizedTest(name = "\"{0}\"") - @ValueSource(strings = {"", "0", "abs.de esm"}) - void shouldDeclineAnotherLines(String line) { - boolean isCommentedLine = service.isCommentedLine(line); - - assertThat(isCommentedLine).isFalse(); - } - } - - @Nested - class TestGetFirsColumn { - - @Test - void shouldReturnFirstColumn() { - var firstColumn = service.getFirstColumn("abs.de esm"); - - assertThat(firstColumn).get().isEqualTo("abs.de"); - } - - @Test - void shouldReturnEmptyOptionalIfLineIsEmpty() { - var firstColumn = service.getFirstColumn(""); - - assertThat(firstColumn).isEmpty(); - } - - } - - @Nested - class TestReadSection { - - @Test - void shouldReturnEmptyResult() { - var section = service.readSection(new Scanner("")); - - assertThat(section).isEmpty(); - } - - @Test - void shouldCallIsCommentedLine() { - var row = "# comment"; - - service.readSection(new Scanner(row)); - - verify(service).isCommentedLine(row); - } - - @Test - void shouldCallIsEndOfSection() { - var line = "row"; - - service.readSection(new Scanner(line)); - - verify(service).isEndOfSection(line); - } - - @Test - void shouldCallGetFirstColumn() { - var line = "row"; - - service.readSection(new Scanner(line)); - - verify(service).getFirstColumn(line); - } - - @Test - void shouldCollectFirstColumn() { - var line = "row"; - doReturn(Optional.of(line)).when(service).getFirstColumn(anyString()); - - var section = service.readSection(new Scanner(line+ "\n# Ende Schleswig-Holstein")); - - assertThat(section).containsExactly(line); - } - } - - @Nested - class TestParseFile { - - private InputStream TEXT_INPUT_STREAM; - - @BeforeEach - void initResource() { - TEXT_INPUT_STREAM = TestUtils.loadFile("files/mailertable.txt"); - } - - @Test - void shouldReadFileIfExist() { - var parsedDomainList = service.readFile(TEXT_INPUT_STREAM); - - assertThat(parsedDomainList).hasSize(3); - } - - @Test - void shouldReturnEmptyListIfFileNotExist() { - var parsedDomainList = service.readFile(InputStream.nullInputStream()); - - assertThat(parsedDomainList).isEmpty(); - } - - } -} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/AttachmentsByWiedervorlageControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/AttachmentsByWiedervorlageControllerTest.java deleted file mode 100644 index 78ce8df48b98bc2ae5dd8014940b20a62acd89e4..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/AttachmentsByWiedervorlageControllerTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController.AttachmentsByWiedervorlageController; - -class AttachmentsByWiedervorlageControllerTest { - - private final static String PATH = AttachmentsByWiedervorlageController.PATH.replace("{wiedervorlageId}", WiedervorlageTestFactory.ID) - + "/attachments"; - - @Spy - @InjectMocks - private AttachmentsByWiedervorlageController controller; - @Mock - private WiedervorlageService service; - @Mock - private BinaryFileController binaryFileController; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetAttachments { - - @BeforeEach - void mockService() { - when(service.getById(any())).thenReturn(WiedervorlageTestFactory.create()); - } - - @Test - void shouldReturnStatusOk() throws Exception { - callEndpoint().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).getById(WiedervorlageTestFactory.ID); - } - - @Test - void shouldCallBinaryFileController() throws Exception { - callEndpoint(); - - verify(binaryFileController).getFiles(List.of(BinaryFileTestFactory.FILE_ID)); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(PATH)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java deleted file mode 100644 index e8ba19c5a464fa5f8060bbe97d23b61c8ce2b3d0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandByVorgangControllerTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageCommandController.WiedervorlageCommandByVorgangController; -import lombok.SneakyThrows; - -class WiedervorlageCommandByVorgangControllerTest { - - @Spy - @InjectMocks - private WiedervorlageCommandByVorgangController controller; - - @Mock - private WiedervorlageService service; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("Create command") - @Nested - class TestCreateCommand { - - @Captor - private ArgumentCaptor<Wiedervorlage> wiedervorlageCaptor; - - @BeforeEach - void mockUserService() { - when(service.createWiedervorlage(any(), any())).thenReturn(CommandTestFactory.create()); - } - - @Nested - class ServiceMethod { - - @Test - void shouldCallService() { - doRequest(); - - verify(service).createWiedervorlage(wiedervorlageCaptor.capture(), eq(VorgangHeaderTestFactory.ID)); - assertThat(wiedervorlageCaptor.getValue().getAttachments().getFirst()).isEqualTo(BinaryFileTestFactory.FILE_ID); - } - - @Test - void shouldCallServiceToUpdateNextFrist() { - doRequest(); - - verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageCaptor.capture()); - assertThat(wiedervorlageCaptor.getValue()) - .usingRecursiveComparison() - .comparingOnlyFields("betreff", "beschreibung", "frist", "attachments") - .isEqualTo(WiedervorlageTestFactory.create()); - } - - @SneakyThrows - @Test - void returnReturnCreated() { - doRequest().andExpect(status().isCreated()); - } - } - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform( - post(WiedervorlageCommandByVorgangController.WIEDERVORLAGE_COMMANDS_BY_VORGANG, - VorgangHeaderTestFactory.ID) - .content(createRequestContent()) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().is2xxSuccessful()); - } - - private String createRequestContent() { - var createCommand = CommandTestFactory.createCreateCommandBuilder().body(WiedervorlageTestFactory.create()) - .order(LegacyOrder.EDIT_WIEDERVORLAGE) - .build(); - return WiedervorlageTestFactory.createRequestContent(createCommand); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java deleted file mode 100644 index 9d038017cd75ff56766a8ff35926459007d3ca96..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandControllerTest.java +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.time.LocalDate; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.FileId; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandOrder; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.SneakyThrows; - -class WiedervorlageCommandControllerTest { - - @Spy - @InjectMocks - private WiedervorlageCommandController controller; - @Mock - private WiedervorlageService service; - - private MockMvc mockMvc; - - @BeforeEach - void init() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @DisplayName("Update wiedervorlage") - @Nested - class TestUpdateWiedervorlage { - - private static final String RESPONSE_HEADER = "http://localhost/api/commands/" + CommandTestFactory.ID; - - @Nested - class ControllerMethods { - - @Captor - private ArgumentCaptor<Wiedervorlage> wiedervorlageCaptor; - - @BeforeEach - void init() { - when(service.getById(any())).thenReturn(WiedervorlageTestFactory.create()); - when(service.editWiedervorlage(any(), any(), anyLong())).thenReturn(CommandTestFactory.createBuilder() - .order(CommandOrder.UPDATE_ATTACHED_ITEM.name()) - .body(WiedervorlageTestFactory.createAsMap()).build()); - } - - @SneakyThrows - @Test - void shouldCallServiceGetById() { - doRequest(); - - verify(service).getById(WiedervorlageTestFactory.ID); - } - - @Test - void shouldCallServiceUpdateNextFrist() { - doRequest(); - - verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageCaptor.capture()); - assertThat(wiedervorlageCaptor.getValue()) - .usingRecursiveComparison() - .comparingOnlyFields("betreff", "beschreibung", "frist", "attachments") - .isEqualTo(WiedervorlageTestFactory.create()); - } - - @SneakyThrows - @Test - void shouldReturnCreatedStatus() { - var response = doRequest(); - - response.andExpect(status().isCreated()); - } - - @SneakyThrows - @Test - void shouldResponseWithLocationHeader() { - var response = doRequest(); - - response.andExpect(header().string("Location", RESPONSE_HEADER)); - } - - @Test - void shouldCreateCommand() { - doRequest(); - - verify(controller).createCommand(any(Wiedervorlage.class), any(CreateCommand.class)); - } - - @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform( - post(WiedervorlageCommandController.WIEDERVORLAGE_COMMANDS, WiedervorlageTestFactory.ID, WiedervorlageTestFactory.VERSION) - .content(createRequestContent()).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().is2xxSuccessful()); - } - - private String createRequestContent() { - return WiedervorlageTestFactory - .createRequestContent( - CommandTestFactory.createCreateCommandBuilder() - .order("EDIT_WIEDERVORLAGE") - .body(WiedervorlageTestFactory.create()) - .build()); - } - } - - @DisplayName("create command") - @Nested - class TestCreateCommand { - - @Captor - private ArgumentCaptor<Wiedervorlage> wiedervorlageArgumentCaptor; - - @DisplayName("for order 'erledigen'") - @Nested - class TestOnErledigenOrder { - - @Test - void shouldCallService() { - callCreateCommand(LegacyOrder.WIEDERVORLAGE_ERLEDIGEN); - - verify(service).erledigen(any(Wiedervorlage.class)); - } - - @Test - void shouldUpdateNextFrist() { - callCreateCommand(LegacyOrder.WIEDERVORLAGE_ERLEDIGEN); - - verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), any(Wiedervorlage.class)); - } - - @Test - void shouldSetWiedervorlageAsDone() { - callCreateCommand(LegacyOrder.WIEDERVORLAGE_ERLEDIGEN); - - verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageArgumentCaptor.capture()); - assertThat(wiedervorlageArgumentCaptor.getValue()) - .usingRecursiveComparison() - .isEqualTo(WiedervorlageTestFactory.createBuilder().done(true).build()); - } - } - - @DisplayName("for order 'wiedereroeffnen'") - @Nested - class TestOnWiedereroeffnenOrder { - - @Test - void shouldCallService() { - callCreateCommand(LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN); - - verify(service).wiedereroeffnen(any(Wiedervorlage.class)); - } - - @Test - void shouldUpdateNextFrist() { - callCreateCommand(LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN); - - verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), any(Wiedervorlage.class)); - } - - @Test - void shouldSetWiedervorlageAsOpen() { - callCreateCommand(LegacyOrder.WIEDERVORLAGE_WIEDEREROEFFNEN); - - verify(service).updateNextFrist(eq(VorgangHeaderTestFactory.ID), wiedervorlageArgumentCaptor.capture()); - assertThat(wiedervorlageArgumentCaptor.getValue()) - .usingRecursiveComparison() - .isEqualTo(WiedervorlageTestFactory.createBuilder().done(false).build()); - } - } - - @DisplayName("for order 'edit'") - @Nested - class TestOnEditOrder { - - @Test - void shouldCallService() { - callCreateCommand(LegacyOrder.EDIT_WIEDERVORLAGE); - - verify(service).editWiedervorlage(any(Wiedervorlage.class), eq(WiedervorlageTestFactory.ID), - eq(WiedervorlageTestFactory.VERSION)); - } - - @Test - void shouldUpdateNextFrist() { - var wiedervorlage = WiedervorlageTestFactory.create(); - doReturn(wiedervorlage).when(controller).updateWiedervorlageByCommand(any(), any()); - - callCreateCommand(LegacyOrder.EDIT_WIEDERVORLAGE); - - verify(service).updateNextFrist(VorgangHeaderTestFactory.ID, wiedervorlage); - } - - @DisplayName("update wiedervorlage by given command") - @Nested - class TestUpdateWiedervorlageByCommand { - - private final static FileId ATTACHMENT_ID = FileId.from("73"); - private final static String BETREFF = "Neuer Betreff"; - private final static String BESCHREIBUNG = "Neuer Beschreibung"; - private final static LocalDate FRIST = LocalDate.now(); - - @Test - void shouldHaveSetAttachments() { - var updatedWiedervorlage = update(); - - assertThat(updatedWiedervorlage.getAttachments()).hasSize(1); - assertThat(updatedWiedervorlage.getAttachments().get(0)).isEqualTo(ATTACHMENT_ID); - } - - @Test - void shouldHaveSetBetreff() { - var updatedWiedervorlage = update(); - - assertThat(updatedWiedervorlage.getBetreff()).isEqualTo(BETREFF); - } - - @Test - void shouldHaveSetBeschreibung() { - var updatedWiedervorlage = update(); - - assertThat(updatedWiedervorlage.getBeschreibung()).isEqualTo(BESCHREIBUNG); - } - - @Test - void shouldHaveSetFrist() { - var updatedWiedervorlage = update(); - - assertThat(updatedWiedervorlage.getFrist()).isEqualTo(FRIST); - } - - private Wiedervorlage update() { - return controller.updateWiedervorlageByCommand(WiedervorlageTestFactory.create(), buildWiedervorlage()); - } - - private Wiedervorlage buildWiedervorlage() { - return WiedervorlageTestFactory.createBuilder() - .clearAttachments().attachment(ATTACHMENT_ID) - .betreff(BETREFF) - .beschreibung(BESCHREIBUNG) - .frist(FRIST) - .build(); - } - } - } - - @Nested - class OnUnsupportedOrder { - - @Test - void shouldThrowException() { - var wiedervorlage = WiedervorlageTestFactory.create(); - var command = CommandTestFactory.createCreateCommandBuilder() - .order(CommandOrder.CREATE_ATTACHED_ITEM.name()) - .body(wiedervorlage).build(); - - assertThatExceptionOfType(TechnicalException.class) - .isThrownBy(() -> controller.createCommand(wiedervorlage, command)); - } - } - - private Command callCreateCommand(String order) { - return controller.createCommand(WiedervorlageTestFactory.create(), - CommandTestFactory.createCreateCommandBuilder().body(WiedervorlageTestFactory.create()) - .order(order) - .build()); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandITCase.java deleted file mode 100644 index b04692f73b411433c560a782a9c6c4fc8c7f2b6d..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageCommandITCase.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.time.LocalDate; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.http.MediaType; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.ValidationMessageCodes; -import de.ozgcloud.alfa.common.command.CommandRemoteService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.wiedervorlage.WiedervorlageCommandController.WiedervorlageCommandByVorgangController; -import lombok.SneakyThrows; - -@AutoConfigureMockMvc -@SpringBootTest -@WithMockUser -class WiedervorlageCommandITCase { - - @Autowired - private MockMvc mockMvc; - @MockBean - private CommandRemoteService commandRemoteService; - @MockBean - private WiedervorlageRemoteService wiedervorlageRemoteService; - - @SpyBean - private CurrentUserService userService; - - @DisplayName("Create edit command") - @WithMockUser - @Nested - class TestCreateEditCommand { - - @BeforeEach - void initTest() { - when(wiedervorlageRemoteService.getById(anyString())).thenReturn(WiedervorlageTestFactory.create()); - when(commandRemoteService.createCommand(any())).thenReturn(CommandTestFactory.create()); - } - - @SneakyThrows - @Test - void shouldCreateCommand() { - doRequest(createEditWiedervorlageRequestContent()).andExpect(status().isCreated()); - - verify(commandRemoteService).createCommand(any()); - } - - @WithMockUser - @DisplayName("should return validation error") - @Nested - class TestValidation { - - @SneakyThrows - @DisplayName("for null Betreff") - @Test - void createCommandWithInvalidBetreff() { - String content = buildContentWithBetreff(null); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("editWiedervorlage.wiedervorlage.betreff")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @SneakyThrows - @DisplayName("for only 1 character in Betreff") - @Test - void createcommandWithShortBetreff() { - String content = buildContentWithBetreff("a"); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].name").value("editWiedervorlage.wiedervorlage.betreff")); - - } - - @SneakyThrows - @DisplayName("for invalid betreff should have paramter") - @Test - void minMaxParameter() { - String content = buildContentWithBetreff("a"); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters.length()").value(2)); - } - - @SneakyThrows - @DisplayName("for 41 character in Betreff") - @Test - void createCommandWithLongBetreff() { - var content = buildContentWithBetreff(RandomStringUtils.random(41)); - - doRequest(content).andExpect(status().isUnprocessableEntity()); - } - - private String buildContentWithBetreff(String betreff) { - return createEditContent(WiedervorlageTestFactory.createBuilder().betreff(betreff).build()); - } - - @SneakyThrows - @DisplayName("for frist in past") - @Test - void createCommandWithInvalidDate() { - String content = createEditContent(WiedervorlageTestFactory.createBuilder().frist(LocalDate.parse("2020-01-01")).build()); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("editWiedervorlage.wiedervorlage.frist")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_DATE_PAST)); - } - - @SneakyThrows - @DisplayName("for empty frist") - @Test - void createCommandWithoutDate() { - String content = createEditContent(WiedervorlageTestFactory.createBuilder().frist(null).build()); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("editWiedervorlage.wiedervorlage.frist")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - private String createEditContent(Wiedervorlage wiedervorlage) { - return WiedervorlageTestFactory - .createRequestContent(createWithWiedervorlage(wiedervorlage).toBuilder().order(LegacyOrder.EDIT_WIEDERVORLAGE).build()); - } - - } - - @SneakyThrows - private ResultActions doRequest(String content) { - return mockMvc.perform( - post(WiedervorlageCommandController.WIEDERVORLAGE_COMMANDS, WiedervorlageTestFactory.ID, WiedervorlageTestFactory.VERSION) - .with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } - - @DisplayName("Create create command") - @WithMockUser - @Nested - class TestCreateCreateCommand { - - private static final long RELATION_ID_ON_CREATE = -1; - - @BeforeEach - void initTest() { - when(commandRemoteService.createCommand(any())).thenReturn(CommandTestFactory.create()); - when(wiedervorlageRemoteService.getById(anyString())).thenReturn(WiedervorlageTestFactory.create()); - - doReturn(UserProfileTestFactory.ID).when(userService).getUserId(); - } - - @SneakyThrows - @Test - void shouldCallCreateCommand() { - doRequest(createEditWiedervorlageRequestContent()); - - verify(commandRemoteService).createCommand(any()); - } - - @SneakyThrows - @Test - void shouldReturnCreatedStatus() { - var response = doRequest(createEditWiedervorlageRequestContent()); - - response.andExpect(status().isCreated()); - } - - @WithMockUser - @DisplayName("should return validation error") - @Nested - class TestValidation { - - @SneakyThrows - @DisplayName("for null Betreff") - @Test - void createCommandWithInvalidBetreff() { - String content = buildContentWithBetreff(null); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createWiedervorlage.wiedervorlage.betreff")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - @SneakyThrows - @DisplayName("for only 1 character in Betreff") - @Test - void createcommandWithShortBetreff() { - String content = buildContentWithBetreff("a"); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].name").value("createWiedervorlage.wiedervorlage.betreff")); - - } - - @SneakyThrows - @DisplayName("for invalid betreff should have paramter") - @Test - void minMaxParameter() { - String content = buildContentWithBetreff("a"); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams[0].constraintParameters.length()").value(2)); - } - - @SneakyThrows - @DisplayName("for 41 character in Betreff") - @Test - void createCommandWithLongBetreff() { - var content = buildContentWithBetreff(RandomStringUtils.randomAlphanumeric(41)); - - doRequest(content).andExpect(status().isUnprocessableEntity()); - } - - private String buildContentWithBetreff(String betreff) { - return WiedervorlageTestFactory - .createRequestContent(createWithWiedervorlage(WiedervorlageTestFactory.createBuilder().betreff(betreff).build())); - } - - @SneakyThrows - @DisplayName("for frist in past") - @Test - void createCommandWithInvalidDate() { - String content = WiedervorlageTestFactory.createRequestContent( - createWithWiedervorlage(WiedervorlageTestFactory.createBuilder().frist(LocalDate.parse("2020-01-01")).build())); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createWiedervorlage.wiedervorlage.frist")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_DATE_PAST)); - } - - @SneakyThrows - @DisplayName("for empty frist") - @Test - void createCommandWithoutDate() { - String content = WiedervorlageTestFactory.createRequestContent( - createWithWiedervorlage(WiedervorlageTestFactory.createBuilder().frist(null).build())); - - doRequest(content).andExpect(status().isUnprocessableEntity()) - .andExpect(jsonPath("$.invalidParams.length()").value(1)) - .andExpect(jsonPath("$.invalidParams[0].name").value("createWiedervorlage.wiedervorlage.frist")) - .andExpect(jsonPath("$.invalidParams[0].reason").value(ValidationMessageCodes.FIELD_IS_EMPTY)); - } - - } - - @SneakyThrows - private ResultActions doRequest(String content) { - return mockMvc.perform(post(WiedervorlageCommandByVorgangController.WIEDERVORLAGE_COMMANDS_BY_VORGANG, VorgangHeaderTestFactory.ID, - RELATION_ID_ON_CREATE) - .with(csrf()) - .contentType(MediaType.APPLICATION_JSON) - .content(content)); - } - } - - private String createEditWiedervorlageRequestContent() { - var createCommand = CommandTestFactory.createCreateCommandBuilder().body(WiedervorlageTestFactory.create()) - .order(LegacyOrder.EDIT_WIEDERVORLAGE).build(); - return WiedervorlageTestFactory.createRequestContent(createCommand); - } - - private CreateCommand createWithWiedervorlage(Wiedervorlage wiedervorlage) { - return CommandTestFactory.createCreateCommandBuilder() - .body(wiedervorlage) - .order("EDIT_WIEDERVORLAGE") - .build(); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageControllerITCase.java deleted file mode 100644 index 47dc52737fd501dcabafbe44a7d96a220612257b..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageControllerITCase.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; - -import de.ozgcloud.alfa.common.user.UserRole; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -@WithMockUser -@AutoConfigureMockMvc -@SpringBootTest -public class WiedervorlageControllerITCase { - - @MockBean - private WiedervorlageService service; - @MockBean - private VorgangController vorgangController; - @Autowired - private MockMvc mockMvc; - - @WithMockUser - @Nested - class TestGetById { - - @BeforeEach - void beforeEach() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create()); - } - - @WithMockUser(roles = { UserRole.EINHEITLICHER_ANSPRECHPARTNER }) - @Nested - class OnRoleEinheitlicherAnsprechpartner { - - @Test - void shouldReturnForbidden() throws Exception { - callEndpoint().andExpect(status().isForbidden()); - } - } - - @WithMockUser(roles = UserRole.VERWALTUNG_POSTSTELLE) - @Nested - class OnRoleVerwaltungPoststelle { - - @Test - void shouldReturnForbidden() throws Exception { - callEndpoint().andExpect(status().isForbidden()); - } - } - - @WithMockUser(roles = UserRole.VERWALTUNG_USER) - @Nested - class OnRoleVerwaltungUser { - - @BeforeEach - void mockController() { - when(service.getById(any())).thenReturn(WiedervorlageTestFactory.create()); - } - - @Test - void shouldReturnStatusOk() throws Exception { - callEndpoint().andExpect(status().isOk()); - } - - @Test - void shouldReturnResult() throws Exception { - callEndpoint().andExpect(jsonPath("$._links.self").exists()) - .andExpect(jsonPath("$._links.createdBy").exists()) - .andExpect(jsonPath("$.createdAt").value(WiedervorlageTestFactory.CREATED_AT_STR)) - .andExpect(jsonPath("$.frist").value(WiedervorlageTestFactory.FRIST_STR)); - } - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(WiedervorlageController.WIEDERVORLAGE_PATH + "/" + WiedervorlageTestFactory.ID)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageControllerTest.java deleted file mode 100644 index 9223e8e87e0db4f66bb0bfb7bef14aebd99bb894..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageControllerTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class WiedervorlageControllerTest { - - private final String PATH = WiedervorlageController.WIEDERVORLAGE_PATH + "/"; - - @Spy - @InjectMocks - private WiedervorlageController controller; - @Mock - private WiedervorlageService service; - @Mock - private WiedervorlageModelAssembler modelAssembler; - @Mock - private BinaryFileController binaryFileController; - @Mock - private WiedervorlageMapper mapper; - - private MockMvc mockMvc; - - @BeforeEach - void initTest() { - mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Nested - class TestGetById { - - private Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create(); - - @BeforeEach - void mockService() { - when(service.getById(any())).thenReturn(wiedervorlage); - } - - @Test - void shouldReturnStatusOk() throws Exception { - callEndpoint().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).getById(WiedervorlageTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - callEndpoint(); - - verify(modelAssembler).toModel(wiedervorlage); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(PATH + WiedervorlageTestFactory.ID)); - } - } - - @Nested - class TestFindByVorgang { - - private Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create(); - - @BeforeEach - void mockService() { - when(service.findByVorgangId(any())).thenReturn(Stream.of(wiedervorlage)); - } - - @Test - void shouldReturnStatusOk() throws Exception { - callEndpoint().andExpect(status().isOk()); - } - - @Test - void shouldCallService() throws Exception { - callEndpoint(); - - verify(service).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallModelAssembler() throws Exception { - callEndpoint(); - - verify(modelAssembler).toCollectionModel(ArgumentMatchers.<Stream<Wiedervorlage>>any(), eq(VorgangHeaderTestFactory.ID)); - } - - private ResultActions callEndpoint() throws Exception { - return mockMvc.perform(get(PATH).param(WiedervorlageController.PARAM_VORGANG_ID, VorgangHeaderTestFactory.ID)); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageMapperTest.java deleted file mode 100644 index 6ac848248819ccf9fac2a26eea57a054812ad199..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageMapperTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.HashMap; -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; - -class WiedervorlageMapperTest { - - @Spy - @InjectMocks - private WiedervorlageMapper mapper = Mappers.getMapper(WiedervorlageMapper.class); - @Spy - private FileIdMapper fileIdMapper = Mappers.getMapper(FileIdMapper.class); - @Mock - private GrpcObjectMapper grpcObjectMapper; - - @DisplayName("Map from item") - @Nested - class TestFromItem { - - @BeforeEach - void mockMapper() { - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(WiedervorlageTestFactory.createAsMap()); - } - - @Test - void shouldCallGrpcObjectMapper() { - mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); - - verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM); - } - - @Test - void shouldCallMapperFromItemMap() { - mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); - - verify(mapper).fromItemMap(WiedervorlageTestFactory.createAsMap(), VorgangAttachedItemTestFactory.VERSION); - } - } - - @DisplayName("Map from item map") - @Nested - class TestFromItemMap { - - @Test - void shouldMapId() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getId()).isEqualTo(WiedervorlageTestFactory.ID); - } - - @Test - void shouldMapVersion() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getVersion()).isEqualTo(WiedervorlageTestFactory.VERSION); - } - - @Test - void shouldMapDone() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.isDone()).isEqualTo(WiedervorlageTestFactory.DONE); - } - - @Test - void shouldMapCreatedBy() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getCreatedBy()).isEqualTo(WiedervorlageTestFactory.CREATED_BY); - } - - @Test - void shouldMapCreatedAt() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getCreatedAt()).isEqualTo(WiedervorlageTestFactory.CREATED_AT); - } - - @Test - void shouldMapBetreff() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getBetreff()).isEqualTo(WiedervorlageTestFactory.BETREFF); - } - - @Test - void shouldMapBeschreibung() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getBeschreibung()).isEqualTo(WiedervorlageTestFactory.BESCHREIBUNG); - } - - @Test - void shouldMapFrist() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getFrist()).isEqualTo(WiedervorlageTestFactory.FRIST); - } - - @Nested - class Attachments { - - @Test - void shouldReturnEmptyListOnNull() { - var wiedervorlageWithoutAttachments = new HashMap<String, Object>(); - wiedervorlageWithoutAttachments.putAll(WiedervorlageTestFactory.createAsMap()); - wiedervorlageWithoutAttachments.remove(WiedervorlageMapper.ATTACHMENTS); - - var wiedervorlage = mapper.fromItemMap(wiedervorlageWithoutAttachments, WiedervorlageTestFactory.VERSION); - - assertThat(wiedervorlage.getAttachments()).isEmpty(); - } - - @Test - void shouldMapSingleAttachment() { - var wiedervorlage = map(); - - assertThat(wiedervorlage.getAttachments()).contains(BinaryFileTestFactory.FILE_ID); - } - - @Test - void shouldMapAttachmentList() { - var wiedervorlage = mapper.fromItemMap(createWiedervorlageAsMapWithMultipleAttachments(), WiedervorlageTestFactory.VERSION); - - assertThat(wiedervorlage.getAttachments()).hasSize(2); - assertThat(wiedervorlage.getAttachments().get(0)).isEqualTo(BinaryFileTestFactory.FILE_ID); - assertThat(wiedervorlage.getAttachments().get(0)).isEqualTo(BinaryFileTestFactory.FILE_ID); - } - - private HashMap<String, Object> createWiedervorlageAsMapWithMultipleAttachments() { - var wiedervorlageItem = new HashMap<String, Object>(); - wiedervorlageItem.putAll(WiedervorlageTestFactory.createAsMap()); - wiedervorlageItem.put(WiedervorlageMapper.ATTACHMENTS, List.of(BinaryFileTestFactory.ID, BinaryFileTestFactory.ID)); - return wiedervorlageItem; - } - } - - private Wiedervorlage map() { - return mapper.fromItemMap(WiedervorlageTestFactory.createAsMap(), WiedervorlageTestFactory.VERSION); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java deleted file mode 100644 index 01cbb98f06ab930c917ae0bff08a2afd6d90e7aa..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Collections; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.context.ApplicationContext; -import org.springframework.core.env.Environment; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.IanaLinkRelations; -import org.springframework.hateoas.server.EntityLinks; - -import de.ozgcloud.alfa.common.UserProfileUrlProvider; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; - -class WiedervorlageModelAssemblerTest { - - private final String PATH = WiedervorlageController.WIEDERVORLAGE_PATH + "/"; - - @Spy - @InjectMocks - private WiedervorlageModelAssembler modelAssembler; - - @Mock - private EntityLinks entityLinks; - @Mock - private VorgangController vorgangController; - - private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); - - @BeforeEach - void initTest() { - var context = mock(ApplicationContext.class); - var environment = mock(Environment.class); - when(environment.getProperty(anyString())).thenReturn("test/"); - when(context.getEnvironment()).thenReturn(environment); - urlProvider.setApplicationContext(context); - } - - @Nested - class TestToModel { - - @Test - void shouldLoadVorgang() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create()); - - modelAssembler.toModel(WiedervorlageTestFactory.create()); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldBuildModel() { - var wiedervorlage = WiedervorlageTestFactory.create(); - var vorgang = VorgangWithEingangTestFactory.create(); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - - modelAssembler.toModel(wiedervorlage); - - verify(modelAssembler).buildModel(wiedervorlage, vorgang); - } - } - - @Nested - class TestLinksOnModel { - private static final String COMMAND_BY_WIEDERVORLAGE_PATH = WiedervorlageCommandController.WIEDERVORLAGE_COMMANDS - .replace("{wiedervorlageId}", WiedervorlageTestFactory.ID) - .replace("{wiedervorlageVersion}", String.valueOf(WiedervorlageTestFactory.VERSION)); - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldHaveSelfLink() { - var link = buildModel().getLink(IanaLinkRelations.SELF); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(PATH + WiedervorlageTestFactory.ID); - } - - @Test - void shouldHaveEditLink() { - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - var link = buildModel().getLink(WiedervorlageModelAssembler.REL_EDIT); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(COMMAND_BY_WIEDERVORLAGE_PATH); - } - - @Test - void shouldNotHaveEditLink() { - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var link = buildModel().getLink(WiedervorlageModelAssembler.REL_EDIT); - - assertThat(link).isEmpty(); - } - - @Nested - class TestErledigenLink { - - @Test - void shouldHaveLink() { - var link = buildModel().getLink(WiedervorlageModelAssembler.REL_ERLEDIGEN); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(COMMAND_BY_WIEDERVORLAGE_PATH); - } - - @Test - void shouldNotHaveLink() { - EntityModel<Wiedervorlage> entityModel = modelAssembler.buildModel(WiedervorlageTestFactory.createBuilder().done(true).build(), - VorgangWithEingangTestFactory.create()); - - var link = entityModel.getLink(WiedervorlageModelAssembler.REL_ERLEDIGEN); - - assertThat(link).isNotPresent(); - } - } - - @Nested - class TestWiedereroeffnenLink { - @Test - void shouldHaveLink() { - EntityModel<Wiedervorlage> entityModel = modelAssembler.buildModel(WiedervorlageTestFactory.createBuilder().done(true).build(), - VorgangWithEingangTestFactory.create()); - - var link = entityModel.getLink(WiedervorlageModelAssembler.REL_WIEDEREROEFFNEN); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo(COMMAND_BY_WIEDERVORLAGE_PATH); - } - - @Test - void shouldNotHaveLink() { - EntityModel<Wiedervorlage> entityModel = modelAssembler.buildModel(WiedervorlageTestFactory.create(), - VorgangWithEingangTestFactory.create()); - - var link = entityModel.getLink(WiedervorlageModelAssembler.REL_WIEDEREROEFFNEN); - - assertThat(link).isNotPresent(); - } - } - - @Nested - class TestAttachmentsLink { - - @Test - void shouldHaveLink() { - EntityModel<Wiedervorlage> entityModel = modelAssembler - .buildModel(WiedervorlageTestFactory.createBuilder().attachment(OzgFileTestFactory.ID).build(), - VorgangWithEingangTestFactory.create()); - - var link = entityModel.getLink(WiedervorlageModelAssembler.REL_ATTACHMENTS); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo("/api/wiedervorlages/" + WiedervorlageTestFactory.ID + "/attachments"); - } - - @Test - void shouldNotHaveLink() { - EntityModel<Wiedervorlage> entityModel = modelAssembler - .buildModel(WiedervorlageTestFactory.createBuilder().clearAttachments().build(), VorgangWithEingangTestFactory.create()); - - var link = entityModel.getLink(WiedervorlageModelAssembler.REL_ATTACHMENTS); - - assertThat(link).isNotPresent(); - } - } - - private EntityModel<Wiedervorlage> buildModel() { - return modelAssembler.buildModel(WiedervorlageTestFactory.create(), vorgang); - } - } - - @Nested - class TestLinksOnCollectionModel { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void beforeEach() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - } - - @Test - void shouldBuildModel() { - var wiedervorlage = WiedervorlageTestFactory.create(); - - modelAssembler.toCollectionModel(Stream.of(wiedervorlage), VorgangHeaderTestFactory.ID); - - verify(modelAssembler).buildModel(wiedervorlage, vorgang); - } - - @Test - void shouldHaveCreateWiedervorlageLink() { - when(vorgangController.isEditable(vorgang)).thenReturn(true); - - var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(WiedervorlageTestFactory.create()).stream(), - VorgangHeaderTestFactory.ID); - var link = collectionModel.getLink(WiedervorlageModelAssembler.REL_CREATE); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo("/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/wiedervorlageCommands"); - } - - @Test - void shouldNotHaveCreateWiedervorlageLink() { - when(vorgangController.isEditable(vorgang)).thenReturn(false); - - var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(WiedervorlageTestFactory.create()).stream(), - VorgangHeaderTestFactory.ID); - var link = collectionModel.getLink(WiedervorlageModelAssembler.REL_CREATE); - - assertThat(link).isEmpty(); - } - - @Test - void shouldHaveUploadFileLink() { - var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(WiedervorlageTestFactory.create()).stream(), - VorgangHeaderTestFactory.ID); - - var link = collectionModel.getLink(WiedervorlageModelAssembler.REL_UPLOAD_FILE); - - assertThat(link).isPresent(); - assertThat(link.get().getHref()).isEqualTo("/api/binaryFiles/" + VorgangHeaderTestFactory.ID + "/wiedervorlageAttachment/file"); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageRemoteServiceTest.java deleted file mode 100644 index 3cb41192e665d213e4743b4e6450771d2d5de997..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageRemoteServiceTest.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.context.ApplicationContext; - -import de.ozgcloud.alfa.ApplicationTestFactory; -import de.ozgcloud.alfa.vorgang.GrpcVorgangAttachedItemTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcDeleteClientAttributeRequest; -import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; -import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse; -import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; - -class WiedervorlageRemoteServiceTest { - - @Spy // NOSONAR - @InjectMocks - private WiedervorlageRemoteService service; - - @Mock - private ClientAttributeServiceBlockingStub clientAttributeServiceStub; - @Mock - private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; - @Mock - private WiedervorlageMapper mapper; - @Mock - private ApplicationContext applicationContext; - - @Nested - class TestFindByVorgangId { - - private final GrpcFindVorgangAttachedItemResponse response = GrpcFindVorgangAttachedItemResponse.newBuilder() - .addVorgangAttachedItems(GrpcVorgangAttachedItemTestFactory.create()) - .build(); - - @Nested - class ServiceMethod { - - @BeforeEach - void initMocks() { - when(vorgangAttachedItemServiceStub.find(any())).thenReturn(response); - } - - @Test - void shouldCallVorgangAttachedItemStub() { - service.findByVorgangId(VorgangHeaderTestFactory.ID); - - verify(vorgangAttachedItemServiceStub).find(any(GrpcFindVorgangAttachedItemRequest.class)); - } - - @Nested - class Mapper { - - @BeforeEach - void mockGrpcMapper() { - when(mapper.fromItem(any())).thenReturn(WiedervorlageTestFactory.create()); - } - - @Test - void shouldCallForWiedervorlage() { - callFindById(); - - verify(mapper).fromItem(GrpcVorgangAttachedItemTestFactory.create()); - } - - private void callFindById() { - var result = service.findByVorgangId(VorgangHeaderTestFactory.ID); - collectStreamElementsToTriggerLazyStream(result); - } - - private void collectStreamElementsToTriggerLazyStream(Stream<Wiedervorlage> stream) { - stream.collect(Collectors.toList()); - } - } - } - - @Nested - class BuildRequest { - - @Test - void shouldSetVorgangId() { - var request = buildRequest(); - - assertThat(request.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldSetItemName() { - var request = buildRequest(); - - assertThat(request.getItemName()).isEqualTo(WiedervorlageRemoteService.ITEM_NAME); - } - - private GrpcFindVorgangAttachedItemRequest buildRequest() { - return service.buildFindRequest(VorgangHeaderTestFactory.ID); - } - } - } - - @Nested - class TestGetById { - - private final GrpcVorgangAttachedItemRequest request = GrpcVorgangAttachedItemRequest.newBuilder() - .setId(WiedervorlageTestFactory.ID).build(); - private final GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponse.newBuilder() - .setVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()) - .build(); - - @BeforeEach - void initMocks() { - when(vorgangAttachedItemServiceStub.getById(any())).thenReturn(response); - when(mapper.fromItem(any())).thenReturn(WiedervorlageTestFactory.create()); - } - - @Test - void shouldCallStub() { - service.getById(WiedervorlageTestFactory.ID); - - verify(vorgangAttachedItemServiceStub).getById(request); - } - - @Test - void shouldCallWiedervorlageMapper() { - service.getById(WiedervorlageTestFactory.ID); - - verify(mapper).fromItem(GrpcVorgangAttachedItemTestFactory.create()); - } - - @Test - void shouldSetVorgangId() { - var wiedervorlage = service.getById(WiedervorlageTestFactory.ID); - - assertThat(wiedervorlage.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestUpdateNextFrist { - - private static final LocalDate NEXT_FRIST = LocalDate.now(); - - @Test - void shouldSetOnExistingFrist() { - service.updateNextFrist(VorgangHeaderTestFactory.ID, Optional.of(NEXT_FRIST)); - - verify(service).setNextFrist(VorgangHeaderTestFactory.ID, NEXT_FRIST); - } - - @Test - void shouldDeleteOnNull() { - doNothing().when(service).deleteNextFrist(any()); - - service.updateNextFrist(VorgangHeaderTestFactory.ID, Optional.empty()); - - verify(service).deleteNextFrist(VorgangHeaderTestFactory.ID); - } - - @Nested - class OnExisting { - - @Captor - private ArgumentCaptor<GrpcSetClientAttributeRequest> requestCaptor; - - @Test - void shouldCallSetServiceStub() { - setNextFrist(); - - verify(clientAttributeServiceStub).set(any(GrpcSetClientAttributeRequest.class)); - } - - @Test - void shouldSetAccessPermissionToReadOnly() { - setNextFrist(); - - verify(clientAttributeServiceStub).set(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getAttribute().getAccess()).isEqualTo(GrpcAccessPermission.READ_ONLY); - } - - @Test - void shouldSetAttributeName() { - setNextFrist(); - - verify(clientAttributeServiceStub).set(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getAttribute().getAttributeName()) - .isEqualTo(WiedervorlageRemoteService.CLIENT_ATTRIBUTE_NEXT_WIEDERVORLAGE_FRIST); - } - - @Test - void shouldSetAttributeValue() { - setNextFrist(); - - verify(clientAttributeServiceStub).set(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getAttribute().getValue().getStringValue()) - .isEqualTo(NEXT_FRIST.format(DateTimeFormatter.ISO_DATE)); - } - - private void setNextFrist() { - service.setNextFrist(VorgangHeaderTestFactory.ID, NEXT_FRIST); - } - } - - @Nested - class OnNonExisting { - - @Captor - private ArgumentCaptor<GrpcDeleteClientAttributeRequest> requestCaptor; - - @BeforeEach - void init() { - when(applicationContext.getId()).thenReturn(ApplicationTestFactory.CONTEXT_ID); - } - - @Test - void shouldCallDeleteOnServiceStub() { - deleteNextFrist(); - - verify(clientAttributeServiceStub).delete(any(GrpcDeleteClientAttributeRequest.class)); - } - - @Test - void shouldCallWithAttributeName() { - deleteNextFrist(); - - verify(clientAttributeServiceStub).delete(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getAttributeName()) - .isEqualTo(WiedervorlageRemoteService.CLIENT_ATTRIBUTE_NEXT_WIEDERVORLAGE_FRIST); - } - - @Test - void shouldCallWithVorgangId() { - deleteNextFrist(); - - verify(clientAttributeServiceStub).delete(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallWithClient() { - deleteNextFrist(); - - verify(clientAttributeServiceStub).delete(requestCaptor.capture()); - assertThat(requestCaptor.getValue().getClientName()).isEqualTo(ApplicationTestFactory.CONTEXT_ID); - } - - private void deleteNextFrist() { - service.deleteNextFrist(VorgangHeaderTestFactory.ID); - } - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java deleted file mode 100644 index cfbec5ee80580d9ec3ab9e9c0a80b59be6280d4f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageServiceTest.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Optional; -import java.util.stream.Stream; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItemService; -import de.ozgcloud.alfa.common.command.Command; -import de.ozgcloud.alfa.common.command.CommandService; -import de.ozgcloud.alfa.common.command.CommandTestFactory; -import de.ozgcloud.alfa.common.user.CurrentUserService; -import de.ozgcloud.alfa.common.user.UserProfileTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; - -class WiedervorlageServiceTest { - - @Spy - @InjectMocks - private WiedervorlageService service; - @Mock - private WiedervorlageRemoteService remoteService; - @Mock - private VorgangAttachedItemService vorgangAttachedItemService; - @Mock - private CommandService commandService; - @Mock - private CurrentUserService currentUserService; - - @DisplayName("Create wiedervorlage") - @Nested - class TestCreateWiedervorlage { - - @DisplayName("should") - @Nested - class TestCalls { - - @BeforeEach - void mockServices() { - doReturn(WiedervorlageTestFactory.create()).when(service).addCreated(any()); - when(vorgangAttachedItemService.createNewWiedervorlage(any(), any())).thenReturn(CommandTestFactory.create()); - } - - @DisplayName("add created") - @Test - void shouldAddCreated() { - callCreateWiedervorlage(); - - verify(service).addCreated(any(Wiedervorlage.class)); - } - - @DisplayName("call vorgangattacheditem service") - @Test - void shouldCallVorgangAttachedItemService() { - callCreateWiedervorlage(); - - verify(vorgangAttachedItemService).createNewWiedervorlage(any(Wiedervorlage.class), eq(VorgangHeaderTestFactory.ID)); - } - } - - @DisplayName("Add created") - @Nested - class TestAddCreated { - - @BeforeEach - void mockServices() { - when(currentUserService.getUserId()).thenReturn(UserProfileTestFactory.ID); - } - - @Test - void shouldSetCreatedAt() throws Exception { - var wiedervorlage = callAddCreated(); - - assertThat(wiedervorlage.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldSetCreatedBy() throws Exception { - var wiedervorlage = callAddCreated(); - - assertThat(wiedervorlage.getCreatedBy()).isEqualTo(UserProfileTestFactory.ID.toString()); - } - - private Wiedervorlage callAddCreated() { - return service.addCreated(WiedervorlageTestFactory.createBuilder().createdAt(null).createdBy(null).build()); - } - } - - private Command callCreateWiedervorlage() { - return service.createWiedervorlage(WiedervorlageTestFactory.create(), VorgangHeaderTestFactory.ID); - } - } - - @DisplayName("Edit wiedervorlage") - @Nested - class TestEditWiedervorlage { - - @Captor - private ArgumentCaptor<Wiedervorlage> wiedervorlageCaptor; - - @Test - void shouldCallVorgangAttachedItemService() { - callEditWiedervorlage(); - - verify(vorgangAttachedItemService).editWiedervorlage(any(Wiedervorlage.class), any(), anyLong()); - } - - private Command callEditWiedervorlage() { - return service.editWiedervorlage(WiedervorlageTestFactory.create(), WiedervorlageTestFactory.ID, WiedervorlageTestFactory.VERSION); - } - } - - @Nested - class TestGetById { - - @Test - void shouldCallRemoteService() { - service.getById(WiedervorlageTestFactory.ID); - - verify(remoteService).getById(WiedervorlageTestFactory.ID); - } - } - - @Nested - class TestFindByVorgangId { - - @Test - void shouldCallRemoteService() { - service.findByVorgangId(VorgangHeaderTestFactory.ID); - - verify(remoteService).findByVorgangId(VorgangHeaderTestFactory.ID); - } - } - - @Nested - class TestUpdateNextFrist { - - private final Wiedervorlage wiedervorlage = WiedervorlageTestFactory.create(); - private final Wiedervorlage foundWiedervorlage = WiedervorlageTestFactory.create(); - - @Captor - private ArgumentCaptor<Stream<Wiedervorlage>> allWiedervorlagen; - - @BeforeEach - void mockService() { - when(remoteService.findByVorgangId(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(foundWiedervorlage)); - doReturn(Optional.of(WiedervorlageTestFactory.FRIST)).when(service).calculateNextFrist(any()); - } - - @Test - void shouldDoCalculation() { - callUpdateNextFrist(); - - verify(service).calculateNextFrist(any()); - } - - @Test - void shouldAddWiedervorlageToFoundWiedervorlagen() { - callUpdateNextFrist(); - - verify(service).calculateNextFrist(allWiedervorlagen.capture()); - assertThat(allWiedervorlagen.getValue()).containsExactly(wiedervorlage); - } - - @Test - void shouldCallFindByVorgangId() { - callUpdateNextFrist(); - - verify(service).findByVorgangId(VorgangHeaderTestFactory.ID); - } - - @Test - void shouldCallRemoteService() { - callUpdateNextFrist(); - - verify(remoteService).updateNextFrist(VorgangHeaderTestFactory.ID, Optional.of(WiedervorlageTestFactory.FRIST)); - } - - private void callUpdateNextFrist() { - service.updateNextFrist(VorgangHeaderTestFactory.ID, wiedervorlage); - } - } - - @Nested - class TestCalculateNextFrist { - - @Test - void shouldReturnNullOnAllDone() { - var wiedervorlage = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(true).build(); - - var nextFrist = calculateNextFrist(Stream.of(wiedervorlage)); - - assertThat(nextFrist).isEmpty(); - } - - @Test - void shouldReturnEarliestFrist() { - var fristPast2Days = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(2, ChronoUnit.DAYS)).done(false) - .build(); - var fristPast1Day = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(1, ChronoUnit.DAYS)).done(false).build(); - var fristFuture1Day = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(false) - .build(); - var fristFuture2Days = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(2, ChronoUnit.DAYS)).done(false) - .build(); - - var nextFrist = calculateNextFrist(Stream.of(fristPast2Days, fristPast1Day, fristFuture1Day, fristFuture2Days)); - - assertThat(nextFrist).contains(LocalDate.now().minus(2, ChronoUnit.DAYS)); - } - - @Test - void shouldReturnFristIgnoringDone() { - var fristPast1DayNotDone = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().plus(1, ChronoUnit.DAYS)).done(false) - .build(); - var fristPast1DayDone = WiedervorlageTestFactory.createBuilder().frist(LocalDate.now().minus(1, ChronoUnit.DAYS)).done(true) - .build(); - - var nextFrist = calculateNextFrist(Stream.of(fristPast1DayNotDone, fristPast1DayDone)); - - assertThat(nextFrist).contains(LocalDate.now().plus(1, ChronoUnit.DAYS)); - } - - private Optional<LocalDate> calculateNextFrist(Stream<Wiedervorlage> wiedervorlagen) { - return service.calculateNextFrist(wiedervorlagen); - } - } -} \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageTestFactory.java deleted file mode 100644 index 31a2aade46b08ee5db350607d0378b2dbc3c014f..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageTestFactory.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2023 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. - */ -package de.ozgcloud.alfa.wiedervorlage; - -import java.time.LocalDate; -import java.time.ZonedDateTime; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; - -import org.apache.commons.lang3.StringUtils; - -import com.thedeanda.lorem.LoremIpsum; - -import de.ozgcloud.alfa.common.binaryfile.BinaryFileTestFactory; -import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.test.TestUtils; - -public class WiedervorlageTestFactory { - - public static final String ID = UUID.randomUUID().toString(); - public static final long VERSION = 73; - public static final boolean DONE = false; - public static final String CREATED_BY = UUID.randomUUID().toString(); - public static final String CREATED_BY_NAME = LoremIpsum.getInstance().getName(); - - public static final String BETREFF = "Lorem Ipsum"; - public static final String BESCHREIBUNG = "Lorem Ipsum dolores est"; - public static final String FRIST_STR = "2121-01-04"; - public static final LocalDate FRIST = LocalDate.parse(FRIST_STR); - public static final String CREATED_AT_STR = "2021-01-10T10:30:00Z"; - public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); - - public static Wiedervorlage create() { - return createBuilder().build(); - } - - public static Wiedervorlage.WiedervorlageBuilder createBuilder() { - return Wiedervorlage.builder() - .id(ID) - .version(VERSION) - .done(DONE) - .betreff(BETREFF) - .beschreibung(BESCHREIBUNG) - .createdBy(CREATED_BY) - .createdAt(CREATED_AT) - .frist(FRIST) - .vorgangId(VorgangHeaderTestFactory.ID) - .attachment(BinaryFileTestFactory.FILE_ID); - } - - public static Map<String, Object> createAsMap() { - return Map.of( - WiedervorlageMapper.ID, ID, - WiedervorlageMapper.DONE, String.valueOf(DONE), - WiedervorlageMapper.CREATED_BY, CREATED_BY, - WiedervorlageMapper.CREATED_BY_NAME, CREATED_BY_NAME, - WiedervorlageMapper.BETREFF, BETREFF, - WiedervorlageMapper.BESCHREIBUNG, BESCHREIBUNG, - WiedervorlageMapper.FRIST, FRIST_STR, - WiedervorlageMapper.CREATED_AT, CREATED_AT_STR, - WiedervorlageMapper.ATTACHMENTS, BinaryFileTestFactory.ID); - } - - public static String createRequestContent(CreateCommand command) { - var wiedervorlage = (Wiedervorlage) command.getBody(); - return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithWiedervorlage.json.tmpl", - command.getOrder(), - TestUtils.addQuote(wiedervorlage.getBetreff()), - wiedervorlage.getBeschreibung(), - Optional.ofNullable(wiedervorlage.getFrist()).map(String::valueOf).orElse(StringUtils.EMPTY), - "/api/binaryFiles/" + BinaryFileTestFactory.FILE_ID); - } -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/alfa-service/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension deleted file mode 100644 index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension +++ /dev/null @@ -1 +0,0 @@ -org.mockito.junit.jupiter.MockitoExtension \ No newline at end of file diff --git a/alfa-service/src/test/resources/application-itcase.yml b/alfa-service/src/test/resources/application-itcase.yml deleted file mode 100644 index fac9b02ef0adae1671ca00ef19d29e60cab7e6c7..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/application-itcase.yml +++ /dev/null @@ -1,17 +0,0 @@ -logging: - level: - ROOT: ERROR - -ozgcloud: - upload: - maxFileSize: - postfachNachrichtAttachment: 3MB - content-types: - attachment: - - application/pdf - - image/png - user-manager: - url: https://localhost - internalurl: http://localhost:8080 - search-template: /api/userProfiles/?searchBy={searchBy} - profile-template: /api/userProfiles/%s diff --git a/alfa-service/src/test/resources/application.yml b/alfa-service/src/test/resources/application.yml deleted file mode 100644 index ea81cad0839dc0d94a6ee477c178dd42c66b44fe..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/application.yml +++ /dev/null @@ -1,90 +0,0 @@ -logging: - level: - ROOT: WARN - '[de.ozgcloud]': INFO, - '[org.springframework.security]': WARN - -ozgcloud: - auth: - token: - secret: XPPWagXn3rDwKG6YwoirXPPWagXn3rDwKG6YwoirXPPWagXn3rDwKG6YwoirXPPWagXn3rDwKG6Ywoir - validity: 60000 - keycloak: - auth-server-url: https://sso.dev.by.ozg-cloud.de - realm: by-kiel-dev - resource: ${jwt.auth.converter.resource-id} - production: true - upload: - maxFileSize: - postfachNachrichtAttachment: 3MB - wiedervorlageAttachment: 40MB - user-manager: - url: https://localhost - profile-template: /api/userProfiles/%s - search-template: /api/userProfiles/?searchBy={searchBy} - -jwt: - auth: - converter: - resource-id: alfa - principle-attribute: preferred_username - -spring: - mvc: - pathmatch: - matching-strategy: ant-path-matcher - application: - name: Alfa - jackson: - deserialization: - 'ADJUST_DATES_TO_CONTEXT_TIME_ZONE': false - servlet: - multipart: - max-file-size: 2GB - max-request-size: 2GB - config: - import: optional:configserver:http://localhost:8888/ - security: - oauth2: - resourceserver: - jwt: - issuer-uri: ${ozgcloud.keycloak.auth-server-url}/realms/${ozgcloud.keycloak.realm} - jwk-set-uri: ${spring.security.oauth2.resourceserver.jwt.issuer-uri}/protocol/openid-connect/certs - -server: - http2: - enabled: true - error: - include-stacktrace: never - -management: - server: - port: 8081 - health: - livenessState: - enabled: true - readinessState: - enabled: true - endpoint: - health: - group: - exploratory: - include: livenessState,readinessState,ping - show-details: always - probes: - enabled: true - prometheus: - enabled: true - endpoints: - web: - exposure: - include: health,prometheus,refresh - -grpc: - client: - vorgang-manager: - address: static://127.0.0.1:9090 - negotiationType: PLAINTEXT - user-manager: - address: static://127.0.0.1:9000 - negotiationType: TLS \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/commandAssignedToBody b/alfa-service/src/test/resources/jsonTemplates/command/commandAssignedToBody deleted file mode 100644 index 4858e4f247bfbbc6de0a37a048982fb0551893c0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/commandAssignedToBody +++ /dev/null @@ -1,3 +0,0 @@ - { - "assignedTo": %s - } \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithBescheid.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithBescheid.json.tmpl deleted file mode 100644 index 440597de52230f9a1db024d2ad5854db23a39dcc..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithBescheid.json.tmpl +++ /dev/null @@ -1,7 +0,0 @@ -{ - "order": "%s", - "body": { - "beschiedenAm": "%s", - "bewilligt": "%s" - } -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithBody.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithBody.json.tmpl deleted file mode 100644 index 41b89955e8ec974e571d5ff8a6586ed49ca4c8c3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithBody.json.tmpl +++ /dev/null @@ -1,4 +0,0 @@ -{ - "order": "%s", - "body": %s -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithInvalidBescheid.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithInvalidBescheid.json.tmpl deleted file mode 100644 index 98cbb1c3360deae091b8e4b28d3efc3ff4345348..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithInvalidBescheid.json.tmpl +++ /dev/null @@ -1,7 +0,0 @@ -{ - "order": "%s", - "body": { - "beschiedenAm": null, - "bewilligt": "%s" - } -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl deleted file mode 100644 index 072af9c1c4afb4c6546c741b4fe0f0479be53e11..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl +++ /dev/null @@ -1,7 +0,0 @@ -{ - "order": "%s", - "body": { - "text": %s, - "attachments": [] - } -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithPostfachMail.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithPostfachMail.json.tmpl deleted file mode 100644 index 084dba61ed9df1bf10dcac68da7d19ca79dec891..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithPostfachMail.json.tmpl +++ /dev/null @@ -1,9 +0,0 @@ -{ - "order": "%s", - "body": { - "replyOption": "%s", - "subject": %s, - "mailBody": %s, - "attachments": %s - } -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl deleted file mode 100644 index 0e1be8961d1f1bdc4010e188d7e4ebce2331d637..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithRedirectRequest.json.tmpl +++ /dev/null @@ -1,8 +0,0 @@ -{ - "order": "%s", - "redirectRequest": { - "email": %s, - "password": %s - }, - "body": null -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithWiedervorlage.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithWiedervorlage.json.tmpl deleted file mode 100644 index 4ef1fb4b5dbf2c90689c192c210ed32157bece63..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createCommandWithWiedervorlage.json.tmpl +++ /dev/null @@ -1,9 +0,0 @@ -{ - "order": "%s", - "body": { - "betreff": %s, - "beschreibung": "%s", - "frist": "%s", - "attachments": ["%s"] - } -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl deleted file mode 100644 index fc927a2bb2ff911d26199aac44aa39dd658f9d47..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/createVorgangCommand.json.tmpl +++ /dev/null @@ -1,4 +0,0 @@ -{ - "order": "%s", - "body": null -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/hasNewPostfachNachricht.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/hasNewPostfachNachricht.json.tmpl deleted file mode 100644 index 419bb5bcbb5a8951482425d305d39aa40a9dd9e0..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/hasNewPostfachNachricht.json.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -{ - "hasNewPostfachNachricht": %s -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/patchStatus.json b/alfa-service/src/test/resources/jsonTemplates/command/patchStatus.json deleted file mode 100644 index 20a5c9066e1becb0e595789f03b82da35a833aea..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/patchStatus.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "status": "%s" -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/command/statusPatch.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/command/statusPatch.json.tmpl deleted file mode 100644 index 3710fc4af4d0c0c1071cf32e0d83e678177809f3..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/command/statusPatch.json.tmpl +++ /dev/null @@ -1,3 +0,0 @@ - { - "status": "%s" - } \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/downloadTokenRequest.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/downloadTokenRequest.json.tmpl deleted file mode 100644 index b7889317e3109cb467a78aa6c8a43f56b2bf10cd..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/downloadTokenRequest.json.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -{ - "fileId":"%s" -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/jsonTemplates/vorgangWithEingang.json.tmpl b/alfa-service/src/test/resources/jsonTemplates/vorgangWithEingang.json.tmpl deleted file mode 100644 index f549216198f886c64ef591c958b19fa7031946ba..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/jsonTemplates/vorgangWithEingang.json.tmpl +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "testName", - "status": "NEU", - "createdAt": "2012-04-23T18:25:43.511Z", - "aktenzeichen": "sadfjkhw7r3", - "nummer": "1234567788", - "hasNewPostfachNachricht": false, - "eingang": {} -} \ No newline at end of file diff --git a/alfa-service/src/test/resources/junit-platform.properties b/alfa-service/src/test/resources/junit-platform.properties deleted file mode 100644 index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/junit-platform.properties +++ /dev/null @@ -1 +0,0 @@ -junit.jupiter.extensions.autodetection.enabled = true \ No newline at end of file diff --git a/alfa-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/alfa-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000 --- a/alfa-service/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline \ No newline at end of file diff --git a/release-erstellen.sh b/release-erstellen.sh index 22249e9bd5e5847f25e367a1ac11db3f129a1d0e..182ce07649b687a7ac150227283ae58547da58ec 100755 --- a/release-erstellen.sh +++ b/release-erstellen.sh @@ -42,6 +42,8 @@ find . -name pom.xml -exec sed $SED_PARAMS 's/-SNAPSHOT//g' {} + ## release version auslesen NEWVERSION=$(xmlstarlet sel -N w="http://maven.apache.org/POM/4.0.0" -t -v '//w:project/w:version' -n pom.xml) +(cd alfa-client && nx release version --projects alfa -d $NEWVERSION) + echo echo "NEXT STEPS:" echo "***********" diff --git a/src/main/helm/.helmignore b/src/main/helm/.helmignore deleted file mode 100644 index f48713aefc38112aeca6d64b5a57bea78aff5375..0000000000000000000000000000000000000000 --- a/src/main/helm/.helmignore +++ /dev/null @@ -1,2 +0,0 @@ -unit-tests/ -tests/ \ No newline at end of file diff --git a/src/main/helm/Chart.yaml b/src/main/helm/Chart.yaml deleted file mode 100644 index 57827741a713d3dca92265712d74efbeccf17dcb..0000000000000000000000000000000000000000 --- a/src/main/helm/Chart.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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. -# - -apiVersion: v1 -appVersion: "1.1" -description: A Helm chart for Alfa -name: alfa -version: 0.0.0-MANAGED-BY-JENKINS -icon: https://simpleicons.org/icons/helm.svg diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl deleted file mode 100644 index 8aef70cf6b97a391e3cc7befe478936dcbb62600..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/_helpers.tpl +++ /dev/null @@ -1,203 +0,0 @@ -# -# 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. -# - -{{/* vim: set filetype=mustache: */}} - -{{/* error check 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} -{{/* Namespace */}} -{{- define "app.namespace" -}} -{{- if gt (len (.Release.Namespace)) 63 -}} -{{- fail (printf ".Release.Namespace %s ist zu lang (max. 63 Zeichen)" .Release.Namespace) -}} -{{- end -}} -{{ printf "%s" .Release.Namespace }} -{{- end -}} - -{{/* Chart: Name + Version */}} -{{- define "app.chart" -}} -{{- if gt (len (printf "%s-%s" .Chart.Name .Chart.Version)) 63 -}} -{{- fail (printf ".Chart.Name-.Chart.Version %s-%s ist zu lang (max. 63 Zeichen)" .Chart.Name .Chart.Version) -}} -{{- end -}} -{{ printf "%s-%s" .Chart.Name .Chart.Version }} -{{- end -}} - -{{/* Managed-by -> On Helm, this value is always Helm */}} -{{- define "app.managedBy" -}} -{{- if gt (len (.Release.Service)) 63 -}} -{{- fail (printf ".Release.Service %s ist zu lang (max. 63 Zeichen)" .Release.Service) -}} -{{- end -}} -{{ printf "%s" .Release.Service }} -{{- end -}} - -{{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} -{{- define "app.defaultLabels" }} -app.kubernetes.io/instance: alfa -app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} -app.kubernetes.io/name: {{ .Release.Name }} -app.kubernetes.io/part-of: ozgcloud -app.kubernetes.io/version: {{ .Chart.Version }} -app.kubernetes.io/namespace: {{ include "app.namespace" . }} -helm.sh/chart: {{ include "app.chart" . }} -{{- end -}} - -{{- define "app.matchLabels" }} -app.kubernetes.io/name: {{ .Release.Name }} -app.kubernetes.io/namespace: {{ include "app.namespace" . }} -{{- end -}} - -{{- define "app.envSpringProfiles" }} -{{- if (.Values.env).overrideSpringProfiles -}} -{{ printf "%s" (.Values.env).overrideSpringProfiles }} -{{- else -}} -{{ printf "oc, %s" (include "app.ozgcloudEnvironment" . ) }} -{{- end -}} -{{- end -}} - -{{- define "app.grpcClientVorgangManagerAddress" -}} -{{ printf "dns:///%s.%s:9090" ( coalesce .Values.vorgangManagerName "vorgang-manager" ) .Release.Namespace | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end -}} - -{{- define "app.grpc_client_archive_manager_address" -}} -{{ printf "dns:///%s.%s:9090" ( coalesce .Values.archiveManagerName "vorgang-manager" ) .Release.Namespace | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end -}} - -{{- define "app.grpc_client_user-manager_address" -}} -{{ printf "dns:///%s.%s:9000" ( coalesce .Values.usermanagerName "user-manager" ) .Release.Namespace }} -{{- end -}} - -{{- define "app.zufiNamespace" -}} -{{ printf "%s" ( required "zufiManager.namespace must be set if zufiManager server is enabled" (.Values.zufiManager).namespace ) }} -{{- end -}} - -{{- define "app.grpcClientZufiServerAddress" -}} -{{ printf "dns:///%s.%s:9090" .Values.zufiManager.serverName (include "app.zufiNamespace" . ) }} -{{- end -}} - -{{- define "app.grpc_client_collaboration-manager_address" -}} -{{ printf "dns:///%s.%s:9090" ( coalesce .Values.collaborationManagerName "vorgang-manager" ) .Release.Namespace | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end -}} - -{{- define "app.spring_cloud_config_administration_address" -}} -{{ printf "http://%s.%s:8080" ( coalesce .Values.administrationName "administration" ) .Release.Namespace }} -{{- end -}} - -{{- define "app.baseUrl" -}} -{{- required "baseUrl muss angegeben sein" .Values.baseUrl }} -{{- end -}} - -{{- define "app.ozgcloud_user-manager_url" -}} -{{- if (.Values).usermanagerUrl -}} -{{ printf "%s" (.Values).usermanagerUrl }} -{{- else -}} -{{ printf "https://%s-%s.%s" (include "app.ozgcloudBezeichner" .) .Values.usermanagerName (include "app.baseUrl" .) }} -{{- end -}} -{{- end -}} - -{{- define "app.ozgcloudBundesland" -}} -{{- required "Bundesland muss angegeben sein" (.Values.ozgcloud).bundesland }} -{{- end -}} - -{{- define "app.ozgcloudBezeichner" -}} -{{- required "ozgcloud.bezeichner muss angegeben sein" (.Values.ozgcloud).bezeichner -}} -{{- if lt 46 (len (.Values.ozgcloud).bezeichner) -}} -{{ fail (printf "ozgcloud.bezeichner %s ist zu lang (max. 46 Zeichen)" (.Values.ozgcloud).bezeichner) }} -{{- end -}} -{{- end -}} - -{{- define "app.ozgcloudEnvironment" -}} -{{- required "Environment muss angegeben sein" (.Values.ozgcloud).environment -}} -{{- end -}} - -{{- define "app.ssoRealm" -}} -{{ printf "%s-%s-%s" (include "app.ozgcloudBundesland" .) ( include "app.ozgcloudBezeichner" . ) ( include "app.ozgcloudEnvironment" . ) | trunc 63 | trimSuffix "-" }} -{{- end -}} - -{{- define "app.ssoClientName" -}} -{{- if (.Values.sso).client_name -}} -{{ printf "%s" (.Values.sso).client_name }} -{{- else -}} -{{ printf "alfa" }} -{{- end -}} -{{- end -}} - -{{- define "app.ssoRealmDisplayName" -}} -{{- if (.Values.sso).displayName -}} -{{ printf "%s" (.Values.sso).displayName }} -{{- else if eq (include "app.ozgcloudEnvironment" . ) "prod" -}} -{{ printf "Realm für %s" (include "app.ozgcloudBezeichner" . | title ) }} -{{- else -}} -{{ printf "Realm für %s (%s)" (include "app.ozgcloudBezeichner" . | title ) (include "app.ozgcloudEnvironment" .) }} -{{- end -}} -{{- end -}} - -{{- define "app.ssoServerUrl" -}} -{{- required "sso.serverUrl muss angegeben sein" (.Values.sso).serverUrl -}} -{{- end -}} - -{{- define "app.baseDomain" -}} -{{- printf "%s.%s" (include "app.ozgcloudBezeichner" .) (include "app.baseUrl" .) }} -{{- end -}} - -{{- define "app.generateKeycloakGroupRessourceName" -}} -{{- $kebabcaseGroupName := . | title | nospace | kebabcase }} -{{- $alphanumericGroupName := (include "app.replaceAllNonAlphanumeric" $kebabcaseGroupName ) }} -{{- printf "%s-keycloak-group" ( $alphanumericGroupName | trunc 20) }} -{{- end -}} - -{{- define "app.replaceAllNonAlphanumeric" -}} -{{- trimAll "-" ( regexReplaceAll "[^a-zA-Z0-9-]" . "" ) }} -{{- end -}} - -{{- define "app.generateKeycloakUserRessourceName" -}} -{{- $lowerUserName := . | lower }} -{{- $alphanumericUserName := (include "app.replaceAllNonAlphanumeric" $lowerUserName ) }} -{{- printf "%s-keycloak-user" ( $alphanumericUserName | trunc 20) }} -{{- end -}} - -{{- define "app.generateKeycloakClientRessourceName" -}} -{{- $lowerClientName := . | lower }} -{{- $alphanumericClientName := (include "app.replaceAllNonAlphanumeric" $lowerClientName ) }} -{{- printf "%s-keycloak-client" ( $alphanumericClientName | trunc 20) }} -{{- end -}} - -{{- define "app.serviceAccountName" -}} -{{ printf "%s" ( (.Values.serviceAccount).name | default "alfa-service-account" ) }} -{{- end -}} - -{{- define "app.getCustomList" -}} -{{- with (.Values.env).customList -}} -{{- if kindIs "map" . -}} -{{ include "app.dictToList" . }} -{{- else if kindIs "slice" . -}} -{{ . | toYaml }} -{{- end -}} -{{- end -}} -{{- end -}} - -{{- define "app.dictToList" -}} -{{- $customList := list -}} -{{- range $key, $value := . -}} -{{- $customList = append $customList (dict "name" $key "value" $value) }} -{{- end -}} -{{- $customList | toYaml -}} -{{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/bindings_type_configmap.yaml b/src/main/helm/templates/bindings_type_configmap.yaml deleted file mode 100644 index 0d020726c2bb91fa1edad433e0b00a2416b87d37..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/bindings_type_configmap.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -apiVersion: v1 -kind: ConfigMap -metadata: - name: alfa-bindings-type - namespace: {{ include "app.namespace" . }} -data: - type: | - ca-certificates \ No newline at end of file diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml deleted file mode 100644 index 6048e63b56257bb1b427aa53470d7733b203bff4..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/deployment.yaml +++ /dev/null @@ -1,243 +0,0 @@ -# -# 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. -# - -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ .Release.Name }} - namespace: {{ include "app.namespace" . }} - labels: - {{- include "app.defaultLabels" . | indent 4 }} -spec: - progressDeadlineSeconds: 600 - replicas: {{ .Values.replicaCount }} - revisionHistoryLimit: 10 - selector: - matchLabels: - {{- include "app.matchLabels" . | indent 6 }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - template: - metadata: - labels: - {{- include "app.defaultLabels" . | indent 8 }} - component: alfa - spec: - {{- if (.Values.serviceAccount).create }} - serviceAccountName: {{ include "app.serviceAccountName" . }} - {{- end }} - topologySpreadConstraints: - - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - labelSelector: - matchLabels: - app.kubernetes.io/name: {{ .Release.Name }} - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: alfaable - operator: NotIn - values: - - "false" - containers: - - env: - - name: SERVICE_BINDING_ROOT - value: "/bindings" - - name: grpc_client_vorgang-manager_address - value: {{ include "app.grpcClientVorgangManagerAddress" . }} - - name: grpc_client_vorgang-manager_negotiationType - value: {{ (.Values.vorgangManager).grpcClientNegotiationType | default "TLS" }} - - name: grpc_client_user-manager_address - value: {{ include "app.grpc_client_user-manager_address" . }} - - name: grpc_client_user-manager_negotiationType - value: {{ (.Values.userManager).grpcClientNegotiationType | default "TLS" }} - - name: grpc_client_collaboration-manager_address - value: {{ include "app.grpc_client_collaboration-manager_address" . }} - - name: grpc_client_collaboration-manager_negotiationType - value: {{ (.Values.collaborationManager).grpcClientNegotiationType | default "TLS" }} - - name: grpc_client_archive-manager_address - value: {{ include "app.grpc_client_archive_manager_address" . }} - - name: grpc_client_archive-manager_negotiationType - value: {{ (.Values.archiveManager).grpcClientNegotiationType | default "TLS" }} - - name: spring_profiles_active - value: {{ include "app.envSpringProfiles" . }} - - name: keycloak_realm - value: {{ include "app.ssoRealm" . }} - - name: keycloak_resource - value: {{ include "app.ssoClientName" . }} - - name: keycloak_auth-server-url - value: {{ include "app.ssoServerUrl" . }} - - name: ozgcloud_user-manager_url - value: {{ include "app.ozgcloud_user-manager_url" . }} - {{- if (((.Values.ozgcloud).user_assistance).documentation).url }} - - name: ozgcloud_user-assistance_documentation_url - value: {{ .Values.ozgcloud.user_assistance.documentation.url }} - {{- end }} - {{- with include "app.getCustomList" . }} -{{ . | indent 8 }} - {{- end }} - {{- if ((.Values.ozgcloud).vorgang).bescheid}} - {{- range $index, $bescheid := ((.Values.ozgcloud).vorgang).bescheid }} - - name: ozgcloud_vorgang_bescheid_{{ $index }}_formId - value: {{ $bescheid.formId | quote }} - - name: ozgcloud_vorgang_bescheid_{{ $index }}_formEngineName - value: {{ $bescheid.formEngineName }} - {{- end }} - {{- end}} - - name: ozgcloud_administration_address - value: {{ include "app.spring_cloud_config_administration_address" . }} -{{- if ((.Values.ozgcloud).feature).collaborationEnabled }} - - name: grpc_client_zufi-manager_address - value: {{ include "app.grpcClientZufiServerAddress" . }} - - name: grpc_client_zufi-manager_negotiationType - value: {{ (.Values.zufiManager).grpcClientNegotiationType | default "TLS" }} -{{- end }} - {{- if ((.Values.ozgcloud).feature).collaborationEnabled }} - - name: ozgcloud_feature_collaborationEnabled - value: {{ ((.Values.ozgcloud).feature).collaborationEnabled | quote }} - {{- end }} - - name: ozgcloud_barrierefreiheitUrl - value: {{ required "ozgcloud.barrierefreiheitUrl muss angegeben sein" (.Values.ozgcloud).barrierefreiheitUrl }} - image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" - imagePullPolicy: Always - name: alfa - ports: - - containerPort: 8080 - name: 8080tcp1 - protocol: TCP - - containerPort: 8081 - name: metrics - protocol: TCP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /actuator/health/readiness - port: 8081 - scheme: HTTP - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 3 - startupProbe: - failureThreshold: 10 - httpGet: - path: /actuator/health/readiness - port: 8081 - scheme: HTTP - initialDelaySeconds: 30 - periodSeconds: 5 - successThreshold: 1 - timeoutSeconds: 5 - {{- if .Values.enableLivenessProbe }} - livenessProbe: - failureThreshold: 3 - httpGet: - path: /actuator/health/liveness - port: 8081 - scheme: HTTP - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 3 - {{- end }} - resources: - {{- with .Values.resources }} -{{ toYaml . | indent 10 }} - {{- end }} - securityContext: - allowPrivilegeEscalation: false - privileged: false - readOnlyRootFilesystem: false - runAsNonRoot: true - {{- with (.Values.securityContext).runAsUser }} - runAsUser: {{ . }} - {{- end }} - {{- with (.Values.securityContext).runAsGroup }} - runAsGroup: {{ . }} - {{- end }} - {{- with (.Values.securityContext).capabilities }} - capabilities: -{{ toYaml . | indent 12 }} - {{- end }} - stdin: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - tty: true - volumeMounts: - - name: bindings - mountPath: "/bindings/ca-certificates/type" - subPath: type - readOnly: true - - name: temp-dir - mountPath: "/tmp" - {{- if (.Values.sso).tlsCertName }} - - name: sso-tls-certificate - mountPath: "/bindings/ca-certificates/sso-tls-crt.pem" - subPath: tls.crt - readOnly: true - {{- end }} - - name: namespace-ca-cert - mountPath: "/bindings/namespace-certificate" - readOnly: true - volumes: - - name: bindings - configMap: - name: alfa-bindings-type - - name: temp-dir - emptyDir: {} - {{- if (.Values.sso).tlsCertName }} - - name: sso-tls-certificate - secret: - secretName: {{ .Values.sso.tlsCertName }} - {{- end }} - - name: namespace-ca-cert - projected: - sources: - - secret: - name: {{ include "app.namespace" . }}-ca-cert - optional: true - items: - - key: ca.crt - path: ca.crt - - configMap: - name: alfa-bindings-type - dnsConfig: {} - dnsPolicy: ClusterFirst - imagePullSecrets: - - name: {{ required "imagePullSecret must be set" .Values.imagePullSecret }} - restartPolicy: Always - {{- with .Values.hostAliases }} - hostAliases: -{{ toYaml . | indent 8 }} - {{- end }} - schedulerName: default-scheduler - {{- with .Values.podSecurityContext }} - securityContext: -{{ toYaml . | indent 8 }} - {{- end }} - terminationGracePeriodSeconds: 30 diff --git a/src/main/helm/templates/ingress.yaml b/src/main/helm/templates/ingress.yaml deleted file mode 100644 index b82457c910dd8cc9a20d8f0b71ff39a441b1e0c9..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/ingress.yaml +++ /dev/null @@ -1,65 +0,0 @@ -# -# 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. -# - -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - annotations: - {{- with (.Values.ingress).annotations }} -{{ toYaml . | indent 4 }} - {{- end }} - {{- if not (.Values.ingress).disableDefaultCertManager }} - {{- if (.Values.ingress).use_staging_cert }} - cert-manager.io/cluster-issuer: letsencrypt-staging - {{- else }} - cert-manager.io/cluster-issuer: letsencrypt-prod - {{- end }} - {{- end }} - name: {{ .Release.Name }} - namespace: {{ include "app.namespace" . }} -spec: - {{- if (.Values.ingress).className }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - rules: - - http: - paths: - - backend: - service: - port: - number: 8080 - name: {{ .Release.Name }} - path: '' - pathType: ImplementationSpecific - host: {{ include "app.baseDomain" . }} - tls: - - hosts: - - {{ include "app.baseDomain" . }} - {{- if not (.Values.ingress).skipTlsSecret -}} - {{- if (.Values.ingress).tlsSecretName }} - secretName: {{ (.Values.ingress).tlsSecretName }} - {{- else }} - secretName: {{ .Values.ozgcloud.bezeichner }}-{{ .Release.Name }}-tls - {{- end }} - {{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/keycloak_client_crd.yaml b/src/main/helm/templates/keycloak_client_crd.yaml deleted file mode 100644 index 329ae2cc862a106e4c752dd61cf7aa6569b932fd..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/keycloak_client_crd.yaml +++ /dev/null @@ -1,78 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -{{- if not (.Values.sso).disableOzgOperator -}} -{{ range $client := (.Values.sso).keycloak_clients }} ---- -apiVersion: operator.ozgcloud.de/v1 -kind: OzgCloudKeycloakClient -metadata: - name: {{ include "app.generateKeycloakClientRessourceName" $client.client_name }} - namespace: {{ include "app.namespace" $ }} -spec: - keep_after_delete: {{ $.Values.sso.keep_after_delete | default false }} - client_name: {{ $client.client_name }} -{{- if $client.client_base_url }} - client_base_url: {{ $client.client_base_url }} -{{- else }} - client_base_url: https://{{ include "app.baseDomain" $ }} -{{- end }} -{{- if $client.client_web_origins }} - client_web_origins: - {{- with $client.client_web_origins }} -{{ toYaml . | indent 4 }} - {{- end }} -{{- else }} - client_web_origins: - - https://{{ include "app.baseDomain" $ }} -{{- end }} - {{- if $client.override_redirect_uris }} - client_redirect_uris: - {{- with $client.override_redirect_uris }} -{{ toYaml . | indent 4 }} - {{- end }} - {{- else }} - client_redirect_uris: - - https://{{ include "app.baseDomain" $ }} - - https://{{ include "app.baseDomain" $ }}/* - {{- if $client.additional_redirect_uris }} - {{- with $client.additional_redirect_uris }} -{{ toYaml . | indent 4 }} - {{- end }} - {{- end }} - {{- end }} - {{- if $client.client_roles }} - client_roles: - {{- with $client.client_roles }} -{{ toYaml . | indent 4 }} - {{- end }} - {{- end }} - {{- if $client.protocol_mappers }} - protocol_mappers: - {{- with $client.protocol_mappers }} -{{ toYaml . | indent 4 }} - {{- end }} - {{- end }} -{{ end }} -{{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/keycloak_crd.yaml b/src/main/helm/templates/keycloak_crd.yaml deleted file mode 100644 index 7351fbf91f88c64c6da19fc88b2a526c4a2c191e..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/keycloak_crd.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -{{ if not (.Values.sso).disableOzgOperator -}} -apiVersion: operator.ozgcloud.de/v1 -kind: OzgCloudKeycloakRealm -metadata: - name: {{ include "app.namespace" . }}-keycloak - namespace: {{ include "app.namespace" . }} -spec: - keep_after_delete: {{ (.Values.sso).keep_after_delete | default false }} - displayName: {{ include "app.ssoRealmDisplayName" . }} - bundesland: {{ include "app.ozgcloudBundesland" . }} - {{- with ((.Values.sso).keycloak_realm).roles }} - realmRoles: -{{ toYaml . | indent 4}} - {{- end }} - {{- with ((.Values.sso).keycloak_realm).smtpServer }} - smtpServer: -{{ toYaml . | indent 4}} - {{- end }} -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/keycloak_group_crd.yaml b/src/main/helm/templates/keycloak_group_crd.yaml deleted file mode 100644 index 005aa9070fe9ef3e0c09629822052e8cf14538b2..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/keycloak_group_crd.yaml +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -{{- if not (.Values.sso).disableOzgOperator -}} -{{ range $group := (.Values.sso).keycloak_groups }} ---- -apiVersion: operator.ozgcloud.de/v1 -kind: OzgCloudKeycloakGroup -metadata: - name: {{ include "app.generateKeycloakGroupRessourceName" (deepCopy $group.name) }} - namespace: {{ include "app.namespace" $ }} -spec: - keep_after_delete: {{ $.Values.sso.keep_after_delete | default false }} - group_name: {{ $group.name | quote }} - {{- if $group.attributes }} - group_attributes: - {{- range $attribute := $group.attributes }} - - name: {{ $attribute.name }} - value: {{ $attribute.value }} - {{- end }} - {{- end }} -{{ end }} -{{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/keycloak_user_crd.yaml b/src/main/helm/templates/keycloak_user_crd.yaml deleted file mode 100644 index 870068694a1c39dc1f33cc399e87dd7a915f4181..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/keycloak_user_crd.yaml +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -{{- if not (.Values.sso).disableOzgOperator -}} -{{ range $user := concat ((.Values.sso).api_users | default list) ((.Values.sso).keycloak_users | default list) }} ---- -apiVersion: operator.ozgcloud.de/v1 -kind: OzgCloudKeycloakUser -metadata: - name: {{ include "app.generateKeycloakUserRessourceName" (deepCopy $user.name) }} - namespace: {{ include "app.namespace" $ }} -spec: - keep_after_delete: {{ $.Values.sso.keep_after_delete | default false }} - update_user: {{ $user.update_user | default false }} - keycloak_user: - username: {{ $user.name | lower }} - first_name: {{ $user.first_name | default "" }} - last_name: {{ $user.last_name | default "" }} - email: {{ $user.email | default "" }} - {{- if $user.groups }} - groups: {{ $user.groups | toJson }} - {{- else }} - groups: [] - {{- end }} - {{- if $user.password }} - password: {{ $user.password }} - {{- end }} - {{- if $user.realm_roles }} - realm_roles: - {{- with $user.realm_roles }} -{{ toYaml . | indent 6 }} - {{- end }} - {{- end }} - {{- if $user.client_roles }} - client_roles: - {{- with $user.client_roles }} -{{ toYaml . | indent 6 }} - {{- end }} - {{- end }} -{{ end }} -{{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/network_policy.yaml b/src/main/helm/templates/network_policy.yaml deleted file mode 100644 index f1e383bf84bb7247521187b08ec2d3e58a02d265..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/network_policy.yaml +++ /dev/null @@ -1,112 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -{{- if not (.Values.networkPolicy).disabled }} -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: network-policy-alfa - namespace: {{ .Release.Namespace }} -spec: - podSelector: - matchLabels: - component: alfa - policyTypes: - - Ingress - - Egress - ingress: - - ports: - - port: 8080 - - from: - - namespaceSelector: - matchLabels: - name: {{ (.Values.networkPolicy).monitoringNamespace | default "openshift-user-workload-monitoring" }} - ports: - - protocol: TCP - port: 8081 -{{- with (.Values.networkPolicy).additionalIngressConfigLocal }} -{{ toYaml . | indent 2 }} -{{- end }} -{{- with (.Values.networkPolicy).additionalIngressConfigGlobal }} -{{ toYaml . | indent 2 }} -{{- end }} - egress: -{{- if ((.Values.ozgcloud).feature).collaborationEnabled }} - - to: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: {{ include "app.zufiNamespace" . }} - podSelector: - matchLabels: - component: zufi-server - ports: - - port: 9090 - protocol: TCP -{{- end }} - - to: - - podSelector: - matchLabels: - component: vorgang-manager - ports: - - port: 9090 - protocol: TCP - - to: - - podSelector: - matchLabels: - component: administration - ports: - - port: 8080 - protocol: TCP - # public keycloak ip - - to: - - ipBlock: - cidr: {{ required "networkPolicy.ssoPublicIp must be set" (.Values.networkPolicy).ssoPublicIp }} - - to: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: {{ required "networkPolicy.dnsServerNamespace must be set" (.Values.networkPolicy).dnsServerNamespace }} - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - - port: 5353 - protocol: UDP - - port: 5353 - protocol: TCP - - to: - - podSelector: - matchLabels: - component: user-manager - ports: - - port: 9000 - protocol: TCP -{{- with (.Values.networkPolicy).additionalEgressConfigLocal }} -{{ toYaml . | indent 2 }} -{{- end }} -{{- with (.Values.networkPolicy).additionalEgressConfigGlobal }} -{{ toYaml . | indent 2 }} -{{- end }} - -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml deleted file mode 100644 index 230b10a66bb2486cea4e420fdf93855e99c32d28..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -{{- if not (.Values.sso).disableOzgOperator }} -{{- if or ((.Values.sso).keycloak_users) ((.Values.sso).api_users) }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: ozgcloud-keycloak-operator-secrets-read-role-alfa - namespace: {{ include "app.namespace" $ }} -rules: - - apiGroups: - - "*" - resourceNames: - {{ range $user := concat (.Values.sso.keycloak_users | default list) (.Values.sso.api_users | default list) }} - - {{ regexReplaceAll "[^a-zA-Z0-9]" $user.name "" }}-credentials - {{ end }} - resources: - - secrets - verbs: - - get - - list -{{- end }} -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml deleted file mode 100644 index 06e02c9b623bd928c4e7e7b5015c2e4246e01d7e..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -{{- if not (.Values.sso).disableOzgOperator }} -{{- if or ((.Values.sso).keycloak_users) ((.Values.sso).api_users) }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: ozgcloud-keycloak-operator-secrets-read-role-binding-alfa - namespace: {{ include "app.namespace" . }} -subjects: - - kind: ServiceAccount - name: ozgcloud-keycloak-operator-serviceaccount - namespace: {{ required "sso.operatorNamespace muss angegeben sein" .Values.sso.operatorNamespace }} -roleRef: - kind: Role - name: ozgcloud-keycloak-operator-secrets-read-role-alfa - apiGroup: rbac.authorization.k8s.io -{{- end }} -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml deleted file mode 100644 index 86c883a6612cc086dc2057a292eb1e1b66da8751..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -{{- if not (.Values.sso).disableOzgOperator }} -{{- if or ((.Values.sso).keycloak_users) ((.Values.sso).api_users) }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: ozgcloud-keycloak-operator-secrets-write-role-alfa - namespace: {{ include "app.namespace" $ }} -rules: - - apiGroups: - - "*" - resources: - - secrets - verbs: - - create -{{- end }} -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml deleted file mode 100644 index 8cb0612dc2f2005e3ce3404cf124f700e9a20764..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -{{- if not (.Values.sso).disableOzgOperator }} -{{- if or ((.Values.sso).keycloak_users) ((.Values.sso).api_users) }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: ozgcloud-keycloak-operator-secrets-write-role-binding-alfa - namespace: {{ include "app.namespace" . }} -subjects: - - kind: ServiceAccount - name: ozgcloud-keycloak-operator-serviceaccount - namespace: {{ required "sso.operatorNamespace muss angegeben sein" .Values.sso.operatorNamespace }} -roleRef: - kind: Role - name: ozgcloud-keycloak-operator-secrets-write-role-alfa - apiGroup: rbac.authorization.k8s.io -{{- end }} -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/service.yaml b/src/main/helm/templates/service.yaml deleted file mode 100644 index b1dbeff62cad6a001b808144834bf5ace1185d58..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/service.yaml +++ /dev/null @@ -1,45 +0,0 @@ -# -# 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. -# - -apiVersion: v1 -kind: Service -metadata: - name: {{ .Release.Name }} - namespace: {{ include "app.namespace" . }} - labels: - {{- include "app.defaultLabels" . | indent 4 }} - component: alfa-service -spec: - type: ClusterIP - ports: - - name: http - port: 8080 - protocol: TCP - targetPort: 8080 - - name: metrics - port: 8081 - protocol: TCP - selector: - {{- include "app.matchLabels" . | indent 4 }} - component: alfa \ No newline at end of file diff --git a/src/main/helm/templates/service_account.yaml b/src/main/helm/templates/service_account.yaml deleted file mode 100644 index 33de9e322a48d971bb26c21b7c87859c2e01fdfc..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/service_account.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -{{- if (.Values.serviceAccount).create }} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "app.serviceAccountName" . }} - namespace: {{ include "app.namespace" . }} -{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/service_monitor.yaml b/src/main/helm/templates/service_monitor.yaml deleted file mode 100644 index 6fb8df4dd7836be20a774ba58ba343aa9cfe632d..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/service_monitor.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# -# 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. -# - -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - name: {{ .Release.Name }} - namespace: {{ include "app.namespace" . }} - labels: - {{- include "app.defaultLabels" . | indent 4 }} - component: alfa-service-monitor -spec: - endpoints: - - port: metrics - path: /actuator/prometheus - namespaceSelector: - matchNames: - - {{ include "app.namespace" . }} - selector: - matchLabels: - {{- include "app.matchLabels" . | indent 6 }} - component: alfa-service \ No newline at end of file diff --git a/src/main/helm/templates/tests/test-ingress-connection.yaml b/src/main/helm/templates/tests/test-ingress-connection.yaml deleted file mode 100644 index ded8beac5ea5c447458ab73dac698a2ef002fc6a..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/tests/test-ingress-connection.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# -# 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. -# - -apiVersion: v1 -kind: Pod -metadata: - name: "{{ .Release.Name }}-test-ingress" - labels: - {{- include "app.matchLabels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: - - {{ include "app.baseDomain" . }} - restartPolicy: Never diff --git a/src/main/helm/templates/tests/test-service-connection.yaml b/src/main/helm/templates/tests/test-service-connection.yaml deleted file mode 100644 index e6bcae1e9d8e11288106f39c47aa978d0cf2f225..0000000000000000000000000000000000000000 --- a/src/main/helm/templates/tests/test-service-connection.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# -# 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. -# - -apiVersion: v1 -kind: Pod -metadata: - name: "{{ .Release.Name }}-test-connection" - labels: - {{- include "app.matchLabels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ .Release.Name }}:8080'] - restartPolicy: Never diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml deleted file mode 100644 index f096912a363c18e1a932ffcc91401255a5366b6a..0000000000000000000000000000000000000000 --- a/src/main/helm/values.yaml +++ /dev/null @@ -1,66 +0,0 @@ -# -# 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. -# - -image: - repo: docker.ozg-sh.de - name: alfa - tag: latest # [default: latest] - -replicaCount: 2 # [default: 2] - -usermanagerName: user-manager - -zufiManager: - serverName: zufi-server - -# env: -# overrideSpringProfiles: "oc,prod" -# customList: # add name value pair for additional environments -# - name: Dinge -# value: true - -# host: # [default: https://<name>.<level>.by.ozg-cloud, if level == "prod" https://<name>.by.ozg-cloud] optional, host override value. Be aware that XXX.dev.by.ozg-cloud can be used in the dev cluster only. - -# resources: -# limits: -# cpu: 1 -# memory: 1000Mi -# requests: -# cpu: 50m -# memory: 500Mi - -# vorgangManagerName: vorgang-manager # [default: vorgang-manager] -# sso: # Most values are set according to namespace name (<bundesland>-<name>-<level>) and are optional - # serverUrl: https://sso.<level>.by.ozg-cloud.de # [default: https://sso.dev.by.ozg-cloud.de, if level == "stage|prod" https://sso.by.ozg-cloud.de] - # apiPassword: # Required value - # role_einheitlicher_ansprechpartner: false # [default: false] - # displayName: "Hüttener Berge" [default: "Realm für <sso.name> (<sso.level>"] The custom display name to write on top of the login page. - - -# ozgcloud: -# bundesland: sh -# bezeichner: kiel -# environment: dev - - diff --git a/src/test/helm-linter-values.yaml b/src/test/helm-linter-values.yaml deleted file mode 100644 index 19666c081eeaac51667ffaf96c141145af63e042..0000000000000000000000000000000000000000 --- a/src/test/helm-linter-values.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -baseUrl: test.company.local - -ozgcloud: - bundesland: sh - bezeichner: helm - environment: test - barrierefreiheitUrl: http://barrierefreiheit.lint.url - -networkPolicy: - ssoPublicIp: 51.89.117.53/32 - dnsServerNamespace: dummy-dns - -sso: - serverUrl: https://sso.company.local - -imagePullSecret: image-pull-secret - -zufiManager: - namespace: namespace diff --git a/src/test/helm/bindings_type_configmap_test.yaml b/src/test/helm/bindings_type_configmap_test.yaml deleted file mode 100644 index 6e20b2a04da46a925f0fc1e1a6c0285671df586b..0000000000000000000000000000000000000000 --- a/src/test/helm/bindings_type_configmap_test.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: Certificate ConfigMap Binding -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/bindings_type_configmap.yaml -tests: - - it: validate configMap values - asserts: - - isKind: - of: ConfigMap - - isAPIVersion: - of: v1 - - equal: - path: metadata.name - value: alfa-bindings-type - - equal: - path: metadata.namespace - value: sh-helm-test - - equal: - path: data - value: - type: | - ca-certificates \ No newline at end of file diff --git a/src/test/helm/deployment_63_char_test.yaml b/src/test/helm/deployment_63_char_test.yaml deleted file mode 100644 index 28fa4858c874ef7f6a783a6d5ecadb9666ab797a..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_63_char_test.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deyploment less than 63 chars -release: - name: alfa - namespace: sh-helm-test - -chart: - name: alfa - -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - baseUrl: test.company.local - imagePullSecret: image-pull-secret - -tests: - - it: should fail on .Release.Namespace length longer than 63 characters - release: - namespace: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 - asserts: - - failedTemplate: - errorMessage: .Release.Namespace test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) - - it: should not fail on .Release.Namespace length less than 63 characters - asserts: - - notFailedTemplate: {} - - it: should fail on .Chart.Name-.Chart.Version length longer than 63 characters - chart: - version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 - asserts: - - failedTemplate: - errorMessage: .Chart.Name-.Chart.Version alfa-1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) - - it: should not fail on .Chart.Name-.Chart.Version length less than 63 characters - asserts: - - notFailedTemplate: {} diff --git a/src/test/helm/deployment_archive_manager_address_env_test.yaml b/src/test/helm/deployment_archive_manager_address_env_test.yaml deleted file mode 100644 index 62c21c0178121e18e317b25c107785fe6bc86a74..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_archive_manager_address_env_test.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment archive-manager address -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should set the archive-manager name - set: - archiveManagerName: my-test-archive-manager-name - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_archive-manager_address - value: dns:///my-test-archive-manager-name.sh-helm-test:9090 diff --git a/src/test/helm/deployment_bindings_test.yaml b/src/test/helm/deployment_bindings_test.yaml deleted file mode 100644 index 1a97acbf75dfc76a29657b0e031ff3c72a3e819c..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_bindings_test.yaml +++ /dev/null @@ -1,141 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: deployment bindings -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - baseUrl: test.company.local - imagePullSecret: image-pull-secret -tests: - - it: should have volume mounts - set: - usermanagerName: user-manager - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: bindings - mountPath: "/bindings/ca-certificates/type" - subPath: type - readOnly: true - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: temp-dir - mountPath: "/tmp" - - notContains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: sso-tls-certificate - mountPath: "/bindings/ca-certificates/ssl-tls-ca.pem" - subPath: ca.crt - readOnly: true - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: namespace-ca-cert - mountPath: "/bindings/namespace-certificate" - readOnly: true - - it: should have volumes - set: - usermanagerName: user-manager - asserts: - - contains: - path: spec.template.spec.volumes - content: - name: bindings - configMap: - name: alfa-bindings-type - - contains: - path: spec.template.spec.volumes - content: - name: temp-dir - emptyDir: {} - - notContains: - path: spec.template.spec.volumes - content: - name: sso-tls-certificate - - contains: - path: spec.template.spec.volumes - content: - name: namespace-ca-cert - projected: - sources: - - secret: - items: - - key: ca.crt - path: ca.crt - name: sh-helm-test-ca-cert - optional: true - - configMap: - name: alfa-bindings-type - - it: should have sso tls cert mount - set: - usermanagerName: user-manager - sso: - tlsCertName: sso-tls-cert - serverUrl: https://sso.company.local - asserts: - - contains: - path: spec.template.spec.volumes - content: - name: sso-tls-certificate - secret: - secretName: sso-tls-cert - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: sso-tls-certificate - mountPath: "/bindings/ca-certificates/sso-tls-crt.pem" - subPath: tls.crt - readOnly: true - - it: should not mount user-manager tls cert - set: - disableUserManagerGrpcTls: true - asserts: - - notContains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: user-manager-tls-certificate - any: true - - it: should not have user-manager tls volume - set: - disableUserManagerGrpcTls: true - asserts: - - notContains: - path: spec.template.spec.volumes - content: - name: user-manager-tls-certificate - any: true diff --git a/src/test/helm/deployment_collaboration_env_test.yaml b/src/test/helm/deployment_collaboration_env_test.yaml deleted file mode 100644 index 5c3f8cffca25edc716ec5b20a9e78bf1d36654c5..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_collaboration_env_test.yaml +++ /dev/null @@ -1,115 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: deployment collaboration env -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should set zufi server address - set: - zufiManager: - namespace: namespace - ozgcloud: - feature: - collaborationEnabled: true - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_zufi-manager_address - value: dns:///zufi-server.namespace:9090 - - it: should not set zufi server address - asserts: - - notContains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_zufi-manager_address - any: true - - it: should enable collaboration - set: - zufiManager: - namespace: namespace - ozgcloud: - feature: - collaborationEnabled: true - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_feature_collaborationEnabled - value: "true" - - it: should not enable collaboration - asserts: - - notContains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_feature_collaborationEnabled - any: true - - it: should set negotiation type - set: - zufiManager: - namespace: namespace - grpcClientNegotiationType: PLAINTEXT - ozgcloud: - feature: - collaborationEnabled: true - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_zufi-manager_negotiationType - value: PLAINTEXT - - it: negotiation type is TLS in standard - set: - zufiManager: - namespace: namespace - ozgcloud: - feature: - collaborationEnabled: true - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_zufi-manager_negotiationType - value: TLS - - it: should not set negotiation type - asserts: - - notContains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_zufi-manager_negotiationType - any: true diff --git a/src/test/helm/deployment_collaboration_manager_address_env_test.yaml b/src/test/helm/deployment_collaboration_manager_address_env_test.yaml deleted file mode 100644 index 2d1d4f2ce1668ebca72e9ea166c0e379584d31fd..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_collaboration_manager_address_env_test.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment collaboration-manager address -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should set the collaboration-manager name - set: - collaborationManagerName: my-test-collaboration-manager-name - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_collaboration-manager_address - value: dns:///my-test-collaboration-manager-name.sh-helm-test:9090 diff --git a/src/test/helm/deployment_config_client_env_test.yaml b/src/test/helm/deployment_config_client_env_test.yaml deleted file mode 100644 index 22160f51c47ae09585a6a9ec76895d536d53cd6c..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_config_client_env_test.yaml +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: deployment collaboration env -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should set default administration server address - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_administration_address - value: http://administration.sh-helm-test:8080 - - it: should have set administration server address - set: - administrationName: custom_admin_name - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_administration_address - value: http://custom_admin_name.sh-helm-test:8080 diff --git a/src/test/helm/deployment_customList_env_test.yaml b/src/test/helm/deployment_customList_env_test.yaml deleted file mode 100644 index 747718c3086265f3f7fa0279f1be4f3cbd16445e..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_customList_env_test.yaml +++ /dev/null @@ -1,79 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test environments customList -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check customList as list - set: - env.customList: - - name: my_test_environment_name - value: "A test value" - - name: test_environment - value: "B test value" - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: my_test_environment_name - value: "A test value" - - contains: - path: spec.template.spec.containers[0].env - content: - name: test_environment - value: "B test value" - - it: check customList as dict - set: - env.customList: - my_test_environment_name: "A test value" - test_environment: "B test value" - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: my_test_environment_name - value: "A test value" - - contains: - path: spec.template.spec.containers[0].env - content: - name: test_environment - value: "B test value" - - it: check customList test value is not set by default - asserts: - - notContains: - path: spec.template.spec.containers[0].env - content: - name: my_test_environment_name - value: "A test value" diff --git a/src/test/helm/deployment_defaults_affinity_test.yaml b/src/test/helm/deployment_defaults_affinity_test.yaml deleted file mode 100644 index f6f74091d43288639d332c800f4076fc857ca4ee..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_affinity_test.yaml +++ /dev/null @@ -1,52 +0,0 @@ -# -# 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. -# - -suite: test deployment affinity -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - baseUrl: test.company.local - imagePullSecret: image-pull-secret -tests: - - it: should work - asserts: - - equal: - path: spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key - value: alfaable - - equal: - path: spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator - value: NotIn - - equal: - path: spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0] - value: "false" diff --git a/src/test/helm/deployment_defaults_env_test.yaml b/src/test/helm/deployment_defaults_env_test.yaml deleted file mode 100644 index 8c1ec32ef046e2ca9b86757199a9957e77eb3bba..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_env_test.yaml +++ /dev/null @@ -1,239 +0,0 @@ -# -# 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. -# - -suite: deployment env -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check default values - set: - usermanagerName: user-manager - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - isKind: - of: Deployment - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_vorgang-manager_address - value: dns:///vorgang-manager.sh-helm-test:9090 - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_user-manager_address - value: dns:///user-manager.sh-helm-test:9000 - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_collaboration-manager_address - value: dns:///vorgang-manager.sh-helm-test:9090 - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_archive-manager_address - value: dns:///vorgang-manager.sh-helm-test:9090 - - - it: should have service binding root - set: - usermanagerName: user-manager - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: SERVICE_BINDING_ROOT - value: "/bindings" - - - it: should have user assistance documentation url - set: - ozgcloud: - user_assistance: - documentation: - url: http:// - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_user-assistance_documentation_url - value: http:// - - - it: should have create Bescheid Konfiguration - set: - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - vorgang: - bescheid: - - formEngineName: AFM - formId: form_id_1 - - formEngineName: FormSolutions - formId: 2290 - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_vorgang_bescheid_0_formId - value: form_id_1 - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_vorgang_bescheid_0_formEngineName - value: AFM - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_vorgang_bescheid_1_formId - value: "2290" - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_vorgang_bescheid_1_formEngineName - value: FormSolutions - - - it: should set user-manager negotiationType plaintext - set: - userManager.grpcClientNegotiationType: PLAINTEXT - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_user-manager_negotiationType - value: PLAINTEXT - - - it: should contain default user-manager negotiationType tls - set: - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_user-manager_negotiationType - value: TLS - - - it: should set vorgang-manager negotiationType plaintext - set: - vorgangManager.grpcClientNegotiationType: PLAINTEXT - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_vorgang-manager_negotiationType - value: PLAINTEXT - - - it: should contain default vorgang-manager negotiationType tls - set: - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_vorgang-manager_negotiationType - value: TLS - - it: should set collaboration-manager negotiationType plaintext - set: - collaborationManager.grpcClientNegotiationType: PLAINTEXT - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_collaboration-manager_negotiationType - value: PLAINTEXT - - - it: should contain default collaboration-manager negotiationType tls - set: - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_collaboration-manager_negotiationType - value: TLS - - - it: should set archive-manager negotiationType plaintext - set: - archiveManager.grpcClientNegotiationType: PLAINTEXT - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_archive-manager_negotiationType - value: PLAINTEXT - - - it: should contain default archive-manager negotiationType tls - set: - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_archive-manager_negotiationType - value: TLS - - - it: should set barrierefreiheitUrl - set: - ozgcloud: - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_barrierefreiheitUrl - value: http://barrierefreiheit.test.url - - - it: should fail without barrierefreiheitUrl - asserts: - - failedTemplate: - errorMessage: ozgcloud.barrierefreiheitUrl muss angegeben sein \ No newline at end of file diff --git a/src/test/helm/deployment_defaults_labels_test.yaml b/src/test/helm/deployment_defaults_labels_test.yaml deleted file mode 100644 index 4a173586663da27ef10943810af89033747cc021..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_labels_test.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# -# 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. -# - -suite: test deployment default labels -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml - -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check default labels - asserts: - - equal: - path: metadata.labels - value: - app.kubernetes.io/instance: alfa - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: alfa - app.kubernetes.io/namespace: sh-helm-test - app.kubernetes.io/part-of: ozgcloud - app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS - helm.sh/chart: alfa-0.0.0-MANAGED-BY-JENKINS diff --git a/src/test/helm/deployment_defaults_spec_containers_health_test.yaml b/src/test/helm/deployment_defaults_spec_containers_health_test.yaml deleted file mode 100644 index b794b72cdcbdca2426a579b5369c4716639d2967..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_spec_containers_health_test.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# -# 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. -# - -suite: test deployment health check -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should have correct valaues for health check - asserts: - - equal: - path: spec.template.spec.containers[0].readinessProbe.failureThreshold - value: 3 - - equal: - path: spec.template.spec.containers[0].readinessProbe.httpGet.path - value: /actuator/health/readiness - - equal: - path: spec.template.spec.containers[0].readinessProbe.httpGet.port - value: 8081 - - equal: - path: spec.template.spec.containers[0].readinessProbe.httpGet.scheme - value: HTTP - - equal: - path: spec.template.spec.containers[0].readinessProbe.periodSeconds - value: 10 - - equal: - path: spec.template.spec.containers[0].readinessProbe.successThreshold - value: 1 - - equal: - path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds - value: 3 - - equal: - path: spec.template.spec.containers[0].startupProbe.failureThreshold - value: 10 - - equal: - path: spec.template.spec.containers[0].startupProbe.httpGet.path - value: /actuator/health/readiness - - equal: - path: spec.template.spec.containers[0].startupProbe.httpGet.port - value: 8081 - - equal: - path: spec.template.spec.containers[0].startupProbe.httpGet.scheme - value: HTTP - - equal: - path: spec.template.spec.containers[0].startupProbe.initialDelaySeconds - value: 30 - - equal: - path: spec.template.spec.containers[0].startupProbe.periodSeconds - value: 5 - - equal: - path: spec.template.spec.containers[0].startupProbe.successThreshold - value: 1 - - equal: - path: spec.template.spec.containers[0].startupProbe.timeoutSeconds - value: 5 diff --git a/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml b/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml deleted file mode 100644 index 76c0fb55c3a19cb36a101657f7d75dd5e8851788..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_spec_containers_securityContext_test.yaml +++ /dev/null @@ -1,96 +0,0 @@ -# -# 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. -# - -suite: test deployment security context -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check default values - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation - value: false - - equal: - path: spec.template.spec.containers[0].securityContext.privileged - value: false - - equal: - path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem - value: false - - equal: - path: spec.template.spec.containers[0].securityContext.runAsNonRoot - value: true - - isNull: - path: spec.template.spec.containers[0].securityContext.runAsUser - - isNull: - path: spec.template.spec.containers[0].securityContext.runAsGroup - - isNull: - path: spec.template.spec.securityContext.fsGroup - - isNull: - path: spec.template.spec.containers[0].securityContext.capabilities - - it: check runAsUser - set: - securityContext.runAsUser: 1000 - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.runAsUser - value: 1000 - - it: check runAsGroup - set: - securityContext.runAsGroup: 1000 - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.runAsGroup - value: 1000 - - it: check fsGroup - set: - podSecurityContext.fsGroup: 1000 - asserts: - - equal: - path: spec.template.spec.securityContext.fsGroup - value: 1000 - - it: check capabilities - set: - securityContext: - capabilities: - drop: - - ALL - asserts: - - equal: - path: spec.template.spec.containers[0].securityContext.capabilities - value: - drop: - - ALL diff --git a/src/test/helm/deployment_defaults_spec_containers_test.yaml b/src/test/helm/deployment_defaults_spec_containers_test.yaml deleted file mode 100644 index 4a09b1cdef7539b6d4fb44a53d0d02bf2df30a9c..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_spec_containers_test.yaml +++ /dev/null @@ -1,82 +0,0 @@ -# -# 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. -# - -suite: test deployment container spec -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check for some standard values - asserts: - - equal: - path: spec.template.spec.containers[0].image - value: "docker.ozg-sh.de/alfa:latest" - - equal: - path: spec.template.spec.containers[0].imagePullPolicy - value: Always - - equal: - path: spec.template.spec.containers[0].name - value: alfa - - equal: - path: spec.template.spec.containers[0].ports[0].containerPort - value: 8080 - - equal: - path: spec.template.spec.containers[0].ports[0].name - value: 8080tcp1 - - equal: - path: spec.template.spec.containers[0].ports[0].protocol - value: TCP - - equal: - path: spec.template.spec.containers[0].stdin - value: true - - equal: - path: spec.template.spec.containers[0].terminationMessagePath - value: /dev/termination-log - - equal: - path: spec.template.spec.containers[0].terminationMessagePolicy - value: File - - equal: - path: spec.template.spec.containers[0].tty - value: true - - equal: - path: spec.template.spec.containers[0].ports[1].containerPort - value: 8081 - - equal: - path: spec.template.spec.containers[0].ports[1].name - value: metrics - - equal: - path: spec.template.spec.containers[0].ports[1].protocol - value: TCP diff --git a/src/test/helm/deployment_defaults_sso_env_test.yaml b/src/test/helm/deployment_defaults_sso_env_test.yaml deleted file mode 100644 index e64213f66ec1af7f2bb97626431513ba23c622ca..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_sso_env_test.yaml +++ /dev/null @@ -1,87 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment sso -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check default values - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: keycloak_realm - value: sh-helm-test - - contains: - path: spec.template.spec.containers[0].env - content: - name: keycloak_resource - value: alfa - - contains: - path: spec.template.spec.containers[0].env - content: - name: keycloak_auth-server-url - value: https://sso.company.local - - - it: check realm with long namespace - set: - ozgcloud: - bezeichner: eins-zwei-drei - environment: dev - bundesland: sh - asserts: - - isKind: - of: Deployment - - contains: - path: spec.template.spec.containers[0].env - content: - name: keycloak_realm - value: sh-eins-zwei-drei-dev - - - it: check different client name - set: - sso: - client_name: different-client - serverUrl: https://sso.company.local - asserts: - - isKind: - of: Deployment - - contains: - path: spec.template.spec.containers[0].env - content: - name: keycloak_resource - value: different-client diff --git a/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml b/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml deleted file mode 100644 index f89897b0503e14346d0b518166829067209ade5c..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# -# 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. -# - -suite: test deployment topology -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: check default values - asserts: - - equal: - path: spec.template.spec.topologySpreadConstraints[0].maxSkew - value: 1 - - equal: - path: spec.template.spec.topologySpreadConstraints[0].topologyKey - value: kubernetes.io/hostname - - equal: - path: spec.template.spec.topologySpreadConstraints[0].whenUnsatisfiable - value: ScheduleAnyway - - equal: - path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/name"] - value: alfa diff --git a/src/test/helm/deployment_host_aliases_test.yaml b/src/test/helm/deployment_host_aliases_test.yaml deleted file mode 100644 index 42caa76552fc17d74de41b6b9a344180d9005837..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_host_aliases_test.yaml +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: deployment host aliases -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should not set hostAliases - asserts: - - isNull: - path: spec.template.spec.hostAliases - - it: should set hostAliases - set: - hostAliases: - - ip: "127.0.0.1" - hostname: - - "eins" - - "zwei" - asserts: - - contains: - path: spec.template.spec.hostAliases - content: - ip: "127.0.0.1" - hostname: - - "eins" - - "zwei" diff --git a/src/test/helm/deployment_imageTag_test.yaml b/src/test/helm/deployment_imageTag_test.yaml deleted file mode 100644 index 883f93ea580f320165c1a655b70fbd5d64fca0a4..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_imageTag_test.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# -# 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. -# - -suite: test deployment imagetag -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should set the latest imageTag - set: - image.tag: latest - asserts: - - equal: - path: spec.template.spec.containers[0].image - value: docker.ozg-sh.de/alfa:latest diff --git a/src/test/helm/deployment_imagepull_secret_test.yaml b/src/test/helm/deployment_imagepull_secret_test.yaml deleted file mode 100644 index 3a7972b0fc3f59305aabef90e3f359b81f09a0d7..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_imagepull_secret_test.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: test deployment image pull secret -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local -tests: - - it: should set the imagePull secret - set: - imagePullSecret: image-pull-secret - asserts: - - equal: - path: spec.template.spec.imagePullSecrets[0].name - value: image-pull-secret - - it: should fail template if imagepullsecret not set - asserts: - - failedTemplate: - errormessage: imagePullSecret must be set diff --git a/src/test/helm/deployment_liveness_probe_test.yaml b/src/test/helm/deployment_liveness_probe_test.yaml deleted file mode 100644 index 78f9912ff33fa920866124af06f5bf35bb00d353..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_liveness_probe_test.yaml +++ /dev/null @@ -1,66 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment liveness probe -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: livenessProbe should be disabled by default - template: deployment.yaml - asserts: - - notExists: - path: spec.template.spec.containers[0].livenessProbe - - - it: enable livenessProbe - set: - enableLivenessProbe: true - asserts: - - isSubset: - path: spec.template.spec.containers[0].livenessProbe - content: - failureThreshold: 3 - httpGet: - path: /actuator/health/liveness - port: 8081 - scheme: HTTP - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 3 - - it: not enable livenessProbe by default - asserts: - - isNull: - path: spec.template.spec.containers[0].livenessProbe diff --git a/src/test/helm/deployment_pod_default_spec_values_test.yaml b/src/test/helm/deployment_pod_default_spec_values_test.yaml deleted file mode 100644 index 32ae31e9d60ae995e8b39526c54876fa063e17fc..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_pod_default_spec_values_test.yaml +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment container basics -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should have correct pod template values - asserts: - - isEmpty: - path: spec.template.spec.dnsConfig - - equal: - path: spec.template.spec.dnsPolicy - value: "ClusterFirst" - - equal: - path: spec.template.spec.restartPolicy - value: "Always" - - equal: - path: spec.template.spec.schedulerName - value: "default-scheduler" - - equal: - path: spec.template.spec.terminationGracePeriodSeconds - value: 30 diff --git a/src/test/helm/deployment_realm_name_length_test.yaml b/src/test/helm/deployment_realm_name_length_test.yaml deleted file mode 100644 index be7f37f6581fcd1a8f6585b4e5328aec2e28328c..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_realm_name_length_test.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test ozgcloud bezeichner length -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml - -tests: - - it: should fail on bezeichner length longer than 46 characters - set: - ozgcloud: - bezeichner: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 - environment: test - bundesland: by - barrierefreiheitUrl: http://barrierefreiheit.test.url - asserts: - - failedTemplate: - errorMessage: ozgcloud.bezeichner test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 46 Zeichen) \ No newline at end of file diff --git a/src/test/helm/deployment_resources_test.yaml b/src/test/helm/deployment_resources_test.yaml deleted file mode 100644 index ced5244c8602a69e86f9a68a511422c851422ab3..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_resources_test.yaml +++ /dev/null @@ -1,66 +0,0 @@ -# -# 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. -# - -suite: test deployment resources -release: - name: alfa -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: test resources - set: - resources: - limits: - cpu: "11m" - memory: "22Mi" - requests: - cpu: "33m" - memory: "44Mi" - asserts: - - equal: - path: spec.template.spec.containers[0].resources.limits.cpu - value: 11m - - equal: - path: spec.template.spec.containers[0].resources.limits.memory - value: 22Mi - - equal: - path: spec.template.spec.containers[0].resources.requests.cpu - value: 33m - - equal: - path: spec.template.spec.containers[0].resources.requests.memory - value: 44Mi - - it: test empty resources - asserts: - - isEmpty: - path: spec.template.spec.containers[0].resources diff --git a/src/test/helm/deployment_springProfile_env_test.yaml b/src/test/helm/deployment_springProfile_env_test.yaml deleted file mode 100644 index 075e2d7b3fb0837ee5041da019c973c093dc6732..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_springProfile_env_test.yaml +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment spring profile -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should override the spring profiles - set: - env.overrideSpringProfiles: oc,test,ea - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_profiles_active - value: oc,test,ea - - it: should generate the spring profiles - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: spring_profiles_active - value: oc, test diff --git a/src/test/helm/deployment_usermanager_address_env_test.yaml b/src/test/helm/deployment_usermanager_address_env_test.yaml deleted file mode 100644 index fdcd6d45a6de7deed49c9d1fe25bf909d157ab09..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_usermanager_address_env_test.yaml +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment usermanager address env -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should build the usermanager url for test environment - set: - usermanagerName: my-test-usermanager-name - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_user-manager_url - value: https://helm-my-test-usermanager-name.test.company.local - - it: should use usermanager url from values - set: - usermanagerUrl: http://test.domain.local - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: ozgcloud_user-manager_url - value: http://test.domain.local diff --git a/src/test/helm/deployment_vorgang_manager_address_env_test.yaml b/src/test/helm/deployment_vorgang_manager_address_env_test.yaml deleted file mode 100644 index 905ae5162abb166d730d410a4813afbf5b155c3f..0000000000000000000000000000000000000000 --- a/src/test/helm/deployment_vorgang_manager_address_env_test.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment vorgang-manager address -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret -tests: - - it: should set the vorgang-manager name - set: - vorgangManagerName: my-test-vorgang-manager-name - asserts: - - contains: - path: spec.template.spec.containers[0].env - content: - name: grpc_client_vorgang-manager_address - value: dns:///my-test-vorgang-manager-name.sh-helm-test:9090 diff --git a/src/test/helm/deyploment_general_value_and_default_spec_test.yaml b/src/test/helm/deyploment_general_value_and_default_spec_test.yaml deleted file mode 100644 index b22a8c5ec095bfb0c7985665f1baab40c492ce91..0000000000000000000000000000000000000000 --- a/src/test/helm/deyploment_general_value_and_default_spec_test.yaml +++ /dev/null @@ -1,78 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment general values -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/deployment.yaml -set: - baseUrl: test.company.local - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - barrierefreiheitUrl: http://barrierefreiheit.test.url - sso: - serverUrl: https://sso.company.local - imagePullSecret: image-pull-secret - -tests: - - it: should have correct apiVersion - asserts: - - isKind: - of: Deployment - - isAPIVersion: - of: "apps/v1" - - - it: should have correct deployment metadata - asserts: - - equal: - path: metadata.name - value: alfa - - equal: - path: metadata.namespace - value: sh-helm-test - - - it: should have correct deyployment general spec values - asserts: - - equal: - path: spec.progressDeadlineSeconds - value: 600 - - equal: - path: spec.replicas - value: 2 - - equal: - path: spec.revisionHistoryLimit - value: 10 - - it: should have correct deployment spec strategy values - asserts: - - equal: - path: spec.strategy - value: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate diff --git a/src/test/helm/ingress_defaults_annotation_test.yaml b/src/test/helm/ingress_defaults_annotation_test.yaml deleted file mode 100644 index 41543b42327dd1b15772cd84fd624222722b0148..0000000000000000000000000000000000000000 --- a/src/test/helm/ingress_defaults_annotation_test.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test deployment -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/ingress.yaml -set: - ozgcloud: - environment: test - bundesland: sh - bezeichner: helm - -tests: - - it: check ingress annotaions for nginx - set: - baseUrl: "test.by.ozg-cloud.de" - asserts: - - isKind: - of: Ingress - - isAPIVersion: - of: networking.k8s.io/v1 - - equal: - path: metadata.annotations["cert-manager.io/cluster-issuer"] - value: letsencrypt-prod - - isNull: - path: spec.ingressClassName - - equal: - path: spec.tls[0].secretName - value: helm-alfa-tls diff --git a/src/test/helm/ingress_nginx_test.yaml b/src/test/helm/ingress_nginx_test.yaml deleted file mode 100644 index 815ca9460ee325240c36784dc4fa76d5ec865875..0000000000000000000000000000000000000000 --- a/src/test/helm/ingress_nginx_test.yaml +++ /dev/null @@ -1,120 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: test ingress options -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/ingress.yaml -set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: test.by.ozg-cloud.de - -tests: - - it: should create ingress tls - asserts: - - equal: - path: spec.tls[0].secretName - value: helm-alfa-tls - - - it: should set tls secretName - set: - ingress.tlsSecretName: alfa-ingress-tls - asserts: - - equal: - path: spec.tls[0].secretName - value: alfa-ingress-tls - - - it: should not set secretName - set: - ingress.skipTlsSecret: true - asserts: - - isNull: - path: spec.tls[0].secretName - - - it: should use default letsencrypt-prod cluster-issuer - asserts: - - equal: - path: metadata.annotations["cert-manager.io/cluster-issuer"] - value: letsencrypt-prod - - - it: should use letsencrypt-staging cluster-issuer - set: - ingress.use_staging_cert: true - asserts: - - equal: - path: metadata.annotations["cert-manager.io/cluster-issuer"] - value: letsencrypt-staging - - - it: should use letsencrypt-prod cluster-issuer - set: - ingress.use_staging_cert: false - asserts: - - equal: - path: metadata.annotations["cert-manager.io/cluster-issuer"] - value: letsencrypt-prod - - - it: should disable default cert-manager - set: - ingress.disableDefaultCertManager: true - asserts: - - notExists: - path: metadata.annotations["cert-manager.io/cluster-issuer"] - - - it: should set ingress annotation proxy body size to 42m - set: - ingress: - annotations: - nginx.ingress.kubernetes.io/proxy-body-size: 42m - asserts: - - equal: - path: metadata.annotations["nginx.ingress.kubernetes.io/proxy-body-size"] - value: 42m - - it: should not set ingressClassName - asserts: - - isNull: - path: spec.ingressClassName - - it: should set ingressClassName - set: - ingress.className: nginx - asserts: - - equal: - path: spec.ingressClassName - value: nginx - - - it: should create hostname correctly - asserts: - - equal: - path: spec.rules[0].host - value: helm.test.by.ozg-cloud.de - - - it: should create tls hosts name correctly - asserts: - - equal: - path: spec.tls[0].hosts[0] - value: helm.test.by.ozg-cloud.de \ No newline at end of file diff --git a/src/test/helm/keycloak_client_crd_test.yaml b/src/test/helm/keycloak_client_crd_test.yaml deleted file mode 100644 index 8ded500ba59b0f23f1b511b2c691fc24f8bb8632..0000000000000000000000000000000000000000 --- a/src/test/helm/keycloak_client_crd_test.yaml +++ /dev/null @@ -1,218 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: Keycloak Client crd -release: - name: alfa - namespace: by-helm-test -templates: - - templates/keycloak_client_crd.yaml -set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test -tests: - - it: should contain header data - set: - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_clients: - - client_name: alfa - asserts: - - isAPIVersion: - of: operator.ozgcloud.de/v1 - - isKind: - of: OzgCloudKeycloakClient - - it: should have metadata - set: - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_clients: - - client_name: alfa - asserts: - - equal: - path: metadata.name - value: alfa-keycloak-client - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have default Values - set: - baseUrl: test.by.ozg-cloud.de - sso: - keycloak_clients: - - client_name: alfa - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.client_name - value: alfa - - isNull: - path: spec.client_roles - - equal: - path: spec.client_base_url - value: https://helm.test.by.ozg-cloud.de - - equal: - path: spec.client_web_origins - value: ["https://helm.test.by.ozg-cloud.de"] - - equal: - path: spec.client_redirect_uris - value: ["https://helm.test.by.ozg-cloud.de", "https://helm.test.by.ozg-cloud.de/*"] - - - - it: should override default redirect uris - set: - baseUrl: test.by.ozg-cloud.de - sso: - keycloak_clients: - - client_name: alfa - override_redirect_uris: - - https://override.test.by.ozg-cloud.de - - https://override.test.by.ozg-cloud.de/* - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.client_name - value: alfa - - isNull: - path: spec.client_roles - - equal: - path: spec.client_base_url - value: https://helm.test.by.ozg-cloud.de - - equal: - path: spec.client_web_origins - value: ["https://helm.test.by.ozg-cloud.de"] - - equal: - path: spec.client_redirect_uris - value: ["https://override.test.by.ozg-cloud.de", "https://override.test.by.ozg-cloud.de/*"] - - - it: should contain additional redirect uris - set: - baseUrl: test.by.ozg-cloud.de - sso: - keycloak_clients: - - client_name: alfa - additional_redirect_uris: - - https://additional.test.by.ozg-cloud.de - - https://additional.test.by.ozg-cloud.de/* - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.client_name - value: alfa - - isNull: - path: spec.client_roles - - equal: - path: spec.client_base_url - value: https://helm.test.by.ozg-cloud.de - - equal: - path: spec.client_web_origins - value: ["https://helm.test.by.ozg-cloud.de"] - - equal: - path: spec.client_redirect_uris - value: ["https://helm.test.by.ozg-cloud.de", "https://helm.test.by.ozg-cloud.de/*", "https://additional.test.by.ozg-cloud.de", "https://additional.test.by.ozg-cloud.de/*"] - - - it: should contain client roles - set: - baseUrl: test.by.ozg-cloud.de - sso: - keycloak_clients: - - client_name: alfa - client_roles: - - name: ERSTE_ROLLE - - name: ZWEITE_ROLLE - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.client_name - value: alfa - - equal: - path: spec.client_roles - value: ["name": "ERSTE_ROLLE", "name": "ZWEITE_ROLLE"] - - equal: - path: spec.client_base_url - value: https://helm.test.by.ozg-cloud.de - - equal: - path: spec.client_web_origins - value: ["https://helm.test.by.ozg-cloud.de"] - - equal: - path: spec.client_redirect_uris - value: ["https://helm.test.by.ozg-cloud.de", "https://helm.test.by.ozg-cloud.de/*"] - - - it: should map client protocol mapper - set: - baseUrl: test.by.ozg-cloud.de - sso: - keycloak_clients: - - client_name: alfa - protocol_mappers: - - name: organisationseinheitIdMapper - protocol: openid-connect - protocolMapper: oidc-usermodel-attribute-mapper - config: - user.attribute: organisationseinheitId - claim.name: organisationseinheitId - jsonType.label: int - id.token.claim: "true" - access.token.claim: "true" - userinfo.token.claim: "true" - multivalued: "true" - aggregate.attrs: "true" - asserts: - - equal: - path: spec.protocol_mappers - value: - - name: organisationseinheitIdMapper - protocol: openid-connect - protocolMapper: oidc-usermodel-attribute-mapper - config: - user.attribute: organisationseinheitId - claim.name: organisationseinheitId - jsonType.label: int - id.token.claim: "true" - access.token.claim: "true" - userinfo.token.claim: "true" - multivalued: "true" - aggregate.attrs: "true" - - - it: should not create client cr if ozg operator is disabled - set: - sso: - disableOzgOperator: true - keycloak_clients: - - client_name: alfa - client_roles: - - name: ERSTE_ROLLE - asserts: - - hasDocuments: - count: 0 \ No newline at end of file diff --git a/src/test/helm/keycloak_crd_test.yaml b/src/test/helm/keycloak_crd_test.yaml deleted file mode 100644 index f414d92814cc3af01a22d8c68ccb689457c811d2..0000000000000000000000000000000000000000 --- a/src/test/helm/keycloak_crd_test.yaml +++ /dev/null @@ -1,145 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: Keycloak crd -release: - name: alfa - namespace: by-helm-test -templates: - - templates/keycloak_crd.yaml -set: - ozgcloud: - environment: test - bezeichner: helm - bundesland: sh -tests: - - it: should contain header data - asserts: - - isAPIVersion: - of: operator.ozgcloud.de/v1 - - isKind: - of: OzgCloudKeycloakRealm - - it: should have metadata - asserts: - - equal: - path: metadata.name - value: by-helm-test-keycloak - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have default Values - asserts: - - equal: - path: spec.keep_after_delete - value: false - - it: should have Keycloak Values - set: - baseUrl: "test.by.ozg-cloud.de" - sso: - keep_after_delete: true - asserts: - - equal: - path: spec.keep_after_delete - value: true - - equal: - path: spec.displayName - value: Realm für Helm (test) - - - it: should not create keycloak cr if ozg operator is disabled - set: - sso.disableOzgOperator: true - asserts: - - hasDocuments: - count: 0 - - it: should not have smtp spec if smtpServer value not set - set: - smtpServer: - asserts: - - isNull: - path: spec.smtpServer - - - it: should have smtp server Values - set: - sso: - keycloak_realm: - smtpServer: - user: user0 - from: user0@test.de - password: psw - fromDisplayName: displayed name - starttls: true - auth: true - port: 587 - host: host0 - asserts: - - equal: - path: spec.smtpServer.host - value: host0 - - equal: - path: spec.smtpServer.port - value: 587 - - equal: - path: spec.smtpServer.user - value: user0 - - equal: - path: spec.smtpServer.from - value: user0@test.de - - equal: - path: spec.smtpServer.auth - value: true - - equal: - path: spec.smtpServer.starttls - value: true - - equal: - path: spec.smtpServer.password - value: psw - - equal: - path: spec.smtpServer.fromDisplayName - value: displayed name - - - it: should create realm roles if set - set: - sso: - keycloak_realm: - roles: - - name: role1 - - name: role0 - asserts: - - contains: - path: spec.realmRoles - content: - name: role0 - - contains: - path: spec.realmRoles - content: - name: role1 - - it: should not create realm roles by default - asserts: - - isNull: - path: spec.realmRoles - - it: should have a bundesland - asserts: - - equal: - path: spec.bundesland - value: sh \ No newline at end of file diff --git a/src/test/helm/keycloak_group_crd_test.yaml b/src/test/helm/keycloak_group_crd_test.yaml deleted file mode 100644 index e57deea335a21b81c0ffcd387878d44f6a3edcef..0000000000000000000000000000000000000000 --- a/src/test/helm/keycloak_group_crd_test.yaml +++ /dev/null @@ -1,211 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: Keycloak Group crd -release: - name: alfa - namespace: by-helm-test -templates: - - templates/keycloak_group_crd.yaml -tests: - - it: should contain header data - set: - sso: - keycloak_groups: - - name: 'Abtl. 10.0.1 Versammlungsbehörde, Identitätsfeststellung, Fundbüro' - attributes: - - name: organisationseinheitId - value: "9030229" - asserts: - - isAPIVersion: - of: operator.ozgcloud.de/v1 - - isKind: - of: OzgCloudKeycloakGroup - - it: should have metadata - set: - sso: - keycloak_groups: - - name: "test gruppe" - asserts: - - equal: - path: metadata.name - value: test-gruppe-keycloak-group - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have default Values - set: - sso: - keycloak_groups: - - name: "test gruppe" - asserts: - - equal: - path: spec.keep_after_delete - value: false - - it: should have Keycloak Group without attributes - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_groups: - - name: "test gruppe" - keep_after_delete: true - asserts: - - equal: - path: spec.keep_after_delete - value: true - - equal: - path: spec.group_name - value: "test gruppe" - - isNull: - path: spec.group_attributes - - it: should have Keycloak Group with attributes - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_groups: - - name: "test gruppe" - attributes: - - name: testAttribute - value: 1234 - keep_after_delete: true - asserts: - - equal: - path: spec.keep_after_delete - value: true - - equal: - path: spec.group_name - value: "test gruppe" - - contains: - path: spec.group_attributes - content: - name: testAttribute - value: 1234 - - it: should have Keycloak Group with two attributes - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_groups: - - name: "test gruppe" - attributes: - - name: firstAttribute - value: 1Eins - - name: secondAttribute - value: 2Zwei - keep_after_delete: true - asserts: - - contains: - path: spec.group_attributes - content: - name: firstAttribute - value: 1Eins - - contains: - path: spec.group_attributes - content: - name: secondAttribute - value: 2Zwei - - it: should contain two Keycloak Groups - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_groups: - - name: "erste gruppe" - attributes: - - name: firstAttribute - value: 1Eins - - name: "zweite gruppe" - keep_after_delete: true - asserts: - - hasDocuments: - count: 2 - - equal: - path: spec.group_name - value: "erste gruppe" - documentIndex: 0 - - contains: - path: spec.group_attributes - content: - name: firstAttribute - value: 1Eins - documentIndex: 0 - - equal: - path: spec.group_name - value: "zweite gruppe" - documentIndex: 1 - - it: should have valid ressource name - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_groups: - - name: ".erste gruppe" - - name: "Ältere gruppe" - - name: "Abtl. 1.0.0 test" - - name: "Besonders langer Gruppenname" - keep_after_delete: true - asserts: - - equal: - path: metadata.name - value: "erste-gruppe-keycloak-group" - documentIndex: 0 - - equal: - path: metadata.name - value: "ltere-gruppe-keycloak-group" - documentIndex: 1 - - equal: - path: metadata.name - value: "abtl100-test-keycloak-group" - documentIndex: 2 - - equal: - path: metadata.name - value: "besonders-langer-gru-keycloak-group" - documentIndex: 3 - - - it: should not create group cr if ozg operator is disabled - set: - sso: - disableOzgOperator: true - keycloak_groups: - - name: ".erste gruppe" - asserts: - - hasDocuments: - count: 0 \ No newline at end of file diff --git a/src/test/helm/keycloak_user_crd_test.yaml b/src/test/helm/keycloak_user_crd_test.yaml deleted file mode 100644 index 9fcd5edfecbbe6e3b51b2a011543e08d7143ca6b..0000000000000000000000000000000000000000 --- a/src/test/helm/keycloak_user_crd_test.yaml +++ /dev/null @@ -1,565 +0,0 @@ -# -# Copyright (C) 2024 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. -# - -suite: Keycloak User crd -release: - name: alfa - namespace: by-helm-test -templates: - - templates/keycloak_user_crd.yaml -tests: - - it: should contain header data - set: - sso: - api_users: - - name: testapiuser - asserts: - - isAPIVersion: - of: operator.ozgcloud.de/v1 - - isKind: - of: OzgCloudKeycloakUser - - it: should have metadata - set: - sso: - api_users: - - name: testapiuser - asserts: - - equal: - path: metadata.name - value: testapiuser-keycloak-user - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have default Values - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - sso: - api_users: - - name: testapiuser - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.first_name - values: "" - - equal: - path: spec.keycloak_user.last_name - values: "" - - equal: - path: spec.keycloak_user.email - values: "" - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.password - - isNull: - path: spec.keycloak_user.realm_roles - - isNull: - path: spec.keycloak_user.client_roles - - - it: should have Keycloak User without roles - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_users: - - name: dorothea - first_name: Dorothea - last_name: Doe - email: dorothea@ozg-sh.de - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: dorothea - - equal: - path: spec.keycloak_user.first_name - value: Dorothea - - equal: - path: spec.keycloak_user.last_name - value: Doe - - equal: - path: spec.keycloak_user.email - value: dorothea@ozg-sh.de - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.realm_roles - - isNull: - path: spec.keycloak_user.client_roles - - - it: should have Keycloak User with client role - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_users: - - name: dorothea - first_name: Dorothea - last_name: Doe - email: dorothea@ozg-sh.de - client_roles: - - name: alfa - role: VERWALTUNG_USER - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: dorothea - - equal: - path: spec.keycloak_user.first_name - value: Dorothea - - equal: - path: spec.keycloak_user.last_name - value: Doe - - equal: - path: spec.keycloak_user.email - value: dorothea@ozg-sh.de - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.realm_roles - - contains: - path: spec.keycloak_user.client_roles - content: - name: alfa - role: VERWALTUNG_USER - - - it: should have Keycloak User with realm role - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_users: - - name: dorothea - first_name: Dorothea - last_name: Doe - email: dorothea@ozg-sh.de - realm_roles: - - "offline_access" - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: dorothea - - equal: - path: spec.keycloak_user.first_name - value: Dorothea - - equal: - path: spec.keycloak_user.last_name - value: Doe - - equal: - path: spec.keycloak_user.email - value: dorothea@ozg-sh.de - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.client_roles - - contains: - path: spec.keycloak_user.realm_roles - content: - offline_access - - - it: should have Keycloak User with group - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - keycloak_users: - - name: dorothea - first_name: Dorothea - last_name: Doe - email: dorothea@ozg-sh.de - groups: - - Bauamt - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: dorothea - - equal: - path: spec.keycloak_user.first_name - value: Dorothea - - equal: - path: spec.keycloak_user.last_name - value: Doe - - equal: - path: spec.keycloak_user.email - value: dorothea@ozg-sh.de - - isNull: - path: spec.keycloak_user.realm_roles - - isNull: - path: spec.keycloak_user.client_roles - - contains: - path: spec.keycloak_user.groups - content: - Bauamt - - - it: should have Keycloak API User without roles - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - api_users: - - name: testapiuser - first_name: Api - last_name: User - email: testapiuser@ozg-sh.de - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: testapiuser - - equal: - path: spec.keycloak_user.first_name - value: Api - - equal: - path: spec.keycloak_user.last_name - value: User - - equal: - path: spec.keycloak_user.email - value: testapiuser@ozg-sh.de - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.realm_roles - - isNull: - path: spec.keycloak_user.client_roles - - - it: should have Keycloak API User with client role - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - api_users: - - name: testapiuser - first_name: Api - last_name: User - email: testapiuser@ozg-sh.de - client_roles: - - name: realm-management - role: view-users - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: testapiuser - - equal: - path: spec.keycloak_user.first_name - value: Api - - equal: - path: spec.keycloak_user.last_name - value: User - - equal: - path: spec.keycloak_user.email - value: testapiuser@ozg-sh.de - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.realm_roles - - contains: - path: spec.keycloak_user.client_roles - content: - name: realm-management - role: view-users - - - it: should have Keycloak API User with realm role - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - api_users: - - name: testapiuser - first_name: Api - last_name: User - email: testapiuser@ozg-sh.de - realm_roles: - - "offline_access" - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: testapiuser - - equal: - path: spec.keycloak_user.first_name - value: Api - - equal: - path: spec.keycloak_user.last_name - value: User - - equal: - path: spec.keycloak_user.email - value: testapiuser@ozg-sh.de - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.client_roles - - contains: - path: spec.keycloak_user.realm_roles - content: - offline_access - - - it: should have Keycloak API User with group - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - api_users: - - name: testapiuser - first_name: Api - last_name: User - email: testapiuser@ozg-sh.de - groups: - - Bauamt - asserts: - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.username - value: testapiuser - - equal: - path: spec.keycloak_user.first_name - value: Api - - equal: - path: spec.keycloak_user.last_name - value: User - - equal: - path: spec.keycloak_user.email - value: testapiuser@ozg-sh.de - - isNull: - path: spec.keycloak_user.realm_roles - - isNull: - path: spec.keycloak_user.client_roles - - contains: - path: spec.keycloak_user.groups - content: - Bauamt - - - it: should have Keycloak User and Keycloak API User - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - baseUrl: "test.by.ozg-cloud.de" - sso: - api_users: - - name: testapiuser - first_name: Api - last_name: User - email: testapiuser@ozg-sh.de - realm_roles: - - "offline_access" - client_roles: - - name: realm-management - role: view-users - keycloak_users: - - name: dorothea - first_name: Dorothea - last_name: Doe - email: dorothea@ozg-sh.de - realm_roles: - - "offline_access" - client_roles: - - name: alfa - role: VERWALTUNG_USER - groups: - - Bauamt - asserts: - - hasDocuments: - count: 2 - - equal: - path: spec.keep_after_delete - value: false - documentIndex: 0 - - equal: - path: spec.keycloak_user.username - value: testapiuser - documentIndex: 0 - - equal: - path: spec.keycloak_user.first_name - value: Api - documentIndex: 0 - - equal: - path: spec.keycloak_user.last_name - value: User - documentIndex: 0 - - equal: - path: spec.keycloak_user.email - value: testapiuser@ozg-sh.de - documentIndex: 0 - - contains: - path: spec.keycloak_user.client_roles - content: - name: realm-management - role: view-users - documentIndex: 0 - - contains: - path: spec.keycloak_user.realm_roles - content: - offline_access - documentIndex: 0 - - equal: - path: spec.keep_after_delete - value: false - documentIndex: 1 - - equal: - path: spec.keycloak_user.username - value: dorothea - documentIndex: 1 - - equal: - path: spec.keycloak_user.first_name - value: Dorothea - documentIndex: 1 - - equal: - path: spec.keycloak_user.last_name - value: Doe - documentIndex: 1 - - equal: - path: spec.keycloak_user.email - value: dorothea@ozg-sh.de - documentIndex: 1 - - contains: - path: spec.keycloak_user.groups - content: - Bauamt - documentIndex: 1 - - contains: - path: spec.keycloak_user.client_roles - content: - name: alfa - role: VERWALTUNG_USER - documentIndex: 1 - - contains: - path: spec.keycloak_user.realm_roles - content: - offline_access - documentIndex: 1 - - - it: should have lowercase username - set: - ozgcloud: - bundesland: by - bezeichner: helm - environment: test - sso: - api_users: - - name: testApiUser - asserts: - - equal: - path: spec.keycloak_user.username - value: testapiuser - - equal: - path: spec.keep_after_delete - value: false - - equal: - path: spec.keycloak_user.first_name - values: "" - - equal: - path: spec.keycloak_user.last_name - values: "" - - equal: - path: spec.keycloak_user.email - values: "" - - isEmpty: - path: spec.keycloak_user.groups - - isNull: - path: spec.keycloak_user.password - - isNull: - path: spec.keycloak_user.realm_roles - - isNull: - path: spec.keycloak_user.client_roles - - - it: should not create user cr if ozg operator is disabled - set: - sso: - disableOzgOperator: true - keycloak_users: - - name: kop - asserts: - - hasDocuments: - count: 0 - - - it: should set updateUser - set: - sso: - api_users: - - name: testapiuser - update_user: true - asserts: - - equal: - path: spec.update_user - value: true - - - it: should set default updateUser to false - set: - sso: - api_users: - - name: testapiuser - asserts: - - equal: - path: spec.update_user - value: false \ No newline at end of file diff --git a/src/test/helm/network_policy_test.yaml b/src/test/helm/network_policy_test.yaml deleted file mode 100644 index 8d61ef951565b2b768f23bbbe5060a7013eced42..0000000000000000000000000000000000000000 --- a/src/test/helm/network_policy_test.yaml +++ /dev/null @@ -1,293 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: network policy alfa test -release: - name: alfa - namespace: by-helm-test -templates: - - templates/network_policy.yaml - -tests: - - it: should match apiVersion - set: - networkPolicy: - dnsServerNamespace: kube-system - ssoPublicIp: 1.1.1.1/32 - asserts: - - isAPIVersion: - of: networking.k8s.io/v1 - - - it: should match kind - set: - networkPolicy: - dnsServerNamespace: kube-system - ssoPublicIp: 1.1.1.1/32 - asserts: - - isKind: - of: NetworkPolicy - - it: validate metadata - set: - networkPolicy: - dnsServerNamespace: kube-system - ssoPublicIp: 1.1.1.1/32 - asserts: - - equal: - path: metadata - value: - name: network-policy-alfa - namespace: by-helm-test - - it: validate spec - set: - networkPolicy: - dnsServerNamespace: kube-system - ssoPublicIp: 1.1.1.1/32 - asserts: - - equal: - path: spec - value: - podSelector: - matchLabels: - component: alfa - policyTypes: - - Ingress - - Egress - ingress: - - ports: - - port: 8080 - - from: - - namespaceSelector: - matchLabels: - name: openshift-user-workload-monitoring - ports: - - port: 8081 - protocol: TCP - egress: - - to: - - podSelector: - matchLabels: - component: vorgang-manager - ports: - - port: 9090 - protocol: TCP - - to: - - podSelector: - matchLabels: - component: administration - ports: - - port: 8080 - protocol: TCP - # public keycloak ip - - to: - - ipBlock: - cidr: 1.1.1.1/32 - - to: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: kube-system - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - - port: 5353 - protocol: UDP - - port: 5353 - protocol: TCP - - to: - - podSelector: - matchLabels: - component: user-manager - ports: - - port: 9000 - protocol: TCP - - - it: add ingress rule by values local - set: - networkPolicy: - ssoPublicIp: 51.89.117.53/32 - dnsServerNamespace: test-namespace-dns - additionalIngressConfigLocal: - - from: - - podSelector: - matchLabels: - component: client2 - asserts: - - contains: - path: spec.ingress - content: - from: - - podSelector: - matchLabels: - component: client2 - - it: add ingress rule by values global - set: - networkPolicy: - ssoPublicIp: 51.89.117.53/32 - dnsServerNamespace: test-namespace-dns - additionalIngressConfigGlobal: - - from: - - podSelector: - matchLabels: - component: client2 - asserts: - - contains: - path: spec.ingress - content: - from: - - podSelector: - matchLabels: - component: client2 - - - it: add egress rules by values local - set: - networkPolicy: - ssoPublicIp: 51.89.117.53/32 - dnsServerNamespace: test-dns-namespace - additionalEgressConfigLocal: - - to: - - ipBlock: - cidr: 1.2.3.4/32 - asserts: - - contains: - path: spec.egress - content: - to: - - ipBlock: - cidr: 1.2.3.4/32 - - it: add egress rules by values Global - set: - networkPolicy: - ssoPublicIp: 51.89.117.53/32 - dnsServerNamespace: test-dns-namespace - additionalEgressConfigGlobal: - - to: - - ipBlock: - cidr: 1.2.3.4/32 - asserts: - - contains: - path: spec.egress - content: - to: - - ipBlock: - cidr: 1.2.3.4/32 - - - it: test network policy disabled - set: - networkPolicy: - disabled: true - asserts: - - hasDocuments: - count: 0 - - - it: test network policy unset should be disabled - set: - networkPolicy: - ssoPublicIp: 1.1.1.1 - disabled: false - dnsServerNamespace: test-dns-server-namespace - asserts: - - hasDocuments: - count: 1 - - - it: test network policy dnsServerNamespace must be set message - set: - networkPolicy: - disabled: false - ssoPublicIp: 1.1.1.1/32 - asserts: - - failedTemplate: - errorMessage: networkPolicy.dnsServerNamespace must be set - - - - it: test network policy ssoPublicIp must be set message - set: - networkPolicy: - disabled: false - dnsServerNamespace: test-dns-server-namespace - asserts: - - failedTemplate: - errorMessage: networkPolicy.ssoPublicIp must be set - - - it: test network policy should be enabled by default - set: - networkPolicy: - ssoPublicIp: 1.1.1.1 - dnsServerNamespace: test-dns-server-namespace - asserts: - - hasDocuments: - count: 1 - - - it: should set egress for zufi if configured - set: - networkPolicy: - ssoPublicIp: 1.1.1.1 - dnsServerNamespace: test-dns-server-namespace - ozgcloud: - feature: - collaborationEnabled: true - zufiManager: - namespace: by-zufi-dev - asserts: - - contains: - path: spec.egress - content: - to: - - podSelector: - matchLabels: - component: zufi-server - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: by-zufi-dev - ports: - - port: 9090 - protocol: TCP - - it: should fail to set egress for zufi if namespace is missing - set: - networkPolicy: - ssoPublicIp: 1.1.1.1 - dnsServerNamespace: test-dns-server-namespace - ozgcloud: - feature: - collaborationEnabled: true - asserts: - - failedTemplate: - errorMessage: zufiManager.namespace must be set if zufiManager server is enabled - - it: should set monitoring namesapce - set: - networkPolicy: - ssoPublicIp: 1.1.1.1 - dnsServerNamespace: test-dns-server-namespace - monitoringNamespace: test-monitoring - asserts: - - contains: - path: spec.ingress - content: - from: - - namespaceSelector: - matchLabels: - name: test-monitoring - ports: - - protocol: TCP - port: 8081 \ No newline at end of file diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml deleted file mode 100644 index 00c650aaf35cd63462109f2329289278758af577..0000000000000000000000000000000000000000 --- a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml +++ /dev/null @@ -1,111 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: test ozg_operator_secrets_read_role_binding -release: - name: alfa - namespace: by-helm-test -templates: - - templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml -tests: - - it: should contain header data - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - isAPIVersion: - of: rbac.authorization.k8s.io/v1 - - isKind: - of: RoleBinding - - it: should have metadata - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - equal: - path: metadata.name - value: ozgcloud-keycloak-operator-secrets-read-role-binding-alfa - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have subjects values - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - contains: - path: subjects - content: - kind: ServiceAccount - name: ozgcloud-keycloak-operator-serviceaccount - namespace: test-operator-namespace - - it: should have roleRef values - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - equal: - path: roleRef.kind - value: Role - - equal: - path: roleRef.name - value: ozgcloud-keycloak-operator-secrets-read-role-alfa - - equal: - path: roleRef.apiGroup - value: rbac.authorization.k8s.io - - it: should not create RoleBinding if no keycloak users available - asserts: - - hasDocuments: - count: 0 - - it: should have subjects values on api_users - set: - sso: - api_users: - - name: apiUser - operatorNamespace: test-operator-namespace - asserts: - - contains: - path: subjects - content: - kind: ServiceAccount - name: ozgcloud-keycloak-operator-serviceaccount - namespace: test-operator-namespace - - - it: should not create RoleBinding if ozg operator is disabled - set: - sso: - disableOzgOperator: true - api_users: - - name: apiUser - asserts: - - hasDocuments: - count: 0 diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml deleted file mode 100644 index c7e4fd320a18fbae40f45669f680d62b63304228..0000000000000000000000000000000000000000 --- a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml +++ /dev/null @@ -1,109 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: test ozg_operator_secrets_read_role -release: - name: alfa - namespace: by-helm-test -templates: - - templates/ozgcloud_keycloak_operator_secrets_read_role.yaml -tests: - - it: should contain header data - set: - sso: - keycloak_users: - - name: sabine - asserts: - - isAPIVersion: - of: rbac.authorization.k8s.io/v1 - - isKind: - of: Role - - it: should have metadata - set: - sso: - keycloak_users: - - name: sabine - asserts: - - equal: - path: metadata.name - value: ozgcloud-keycloak-operator-secrets-read-role-alfa - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have subjects values - set: - sso: - keycloak_users: - - name: peter - - name: sabine - - name: _with_underscore_ - - name: .with.dot. - asserts: - - contains: - path: rules - content: - apiGroups: - - "*" - resourceNames: - - peter-credentials - - sabine-credentials - - withunderscore-credentials - - withdot-credentials - resources: - - secrets - verbs: - - get - - list - - it: should not create RoleBinding if no keycloak users available - asserts: - - hasDocuments: - count: 0 - - it: should have subjects values on api_users - set: - sso: - api_users: - - name: apiUser - asserts: - - contains: - path: rules - content: - apiGroups: - - "*" - resourceNames: - - apiUser-credentials - resources: - - secrets - verbs: - - get - - list - - - it: should not create Role if ozg operator is disabled - set: - sso: - disableOzgOperator: true - api_users: - - name: apiUser - asserts: - - hasDocuments: - count: 0 \ No newline at end of file diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml deleted file mode 100644 index 1c8fb343784f080a64c36ca9af2f7b816d3bd9ec..0000000000000000000000000000000000000000 --- a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml +++ /dev/null @@ -1,111 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: test ozg_operator_secrets_role_binding -release: - name: alfa - namespace: by-helm-test -templates: - - templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml -tests: - - it: should contain header data - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - isAPIVersion: - of: rbac.authorization.k8s.io/v1 - - isKind: - of: RoleBinding - - it: should have metadata - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - equal: - path: metadata.name - value: ozgcloud-keycloak-operator-secrets-write-role-binding-alfa - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have subjects values - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - contains: - path: subjects - content: - kind: ServiceAccount - name: ozgcloud-keycloak-operator-serviceaccount - namespace: test-operator-namespace - - it: should have roleRef values - set: - sso: - keycloak_users: - - name: sabine - operatorNamespace: test-operator-namespace - asserts: - - equal: - path: roleRef.kind - value: Role - - equal: - path: roleRef.name - value: ozgcloud-keycloak-operator-secrets-write-role-alfa - - equal: - path: roleRef.apiGroup - value: rbac.authorization.k8s.io - - it: should not create RoleBinding if no keycloak users available - asserts: - - hasDocuments: - count: 0 - - it: should have subjects values on api_users - set: - sso: - api_users: - - name: apiUsers - operatorNamespace: test-operator-namespace - asserts: - - contains: - path: subjects - content: - kind: ServiceAccount - name: ozgcloud-keycloak-operator-serviceaccount - namespace: test-operator-namespace - - - it: should not create RoleBinding if ozg operator is disabled - set: - sso: - disableOzgOperator: true - api_users: - - name: apiUser - asserts: - - hasDocuments: - count: 0 diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml deleted file mode 100644 index 00ffcf6feb5728e249ccc8293115b635e2b9fdee..0000000000000000000000000000000000000000 --- a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: test ozg_operator_secrets_write_role -release: - name: alfa - namespace: by-helm-test -templates: - - templates/ozgcloud_keycloak_operator_secrets_write_role.yaml -tests: - - it: should contain header data - set: - sso: - keycloak_users: - - name: sabine - asserts: - - isAPIVersion: - of: rbac.authorization.k8s.io/v1 - - isKind: - of: Role - - it: should have metadata - set: - sso: - keycloak_users: - - name: sabine - asserts: - - equal: - path: metadata.name - value: ozgcloud-keycloak-operator-secrets-write-role-alfa - - equal: - path: metadata.namespace - value: by-helm-test - - it: should have subjects values - set: - sso: - keycloak_users: - - name: peter - - name: sabine - asserts: - - contains: - path: rules - content: - apiGroups: - - "*" - resources: - - secrets - verbs: - - create - - it: should not create RoleBinding if no keycloak users available - asserts: - - hasDocuments: - count: 0 - - it: should have subjects values on api_users - set: - sso: - api_users: - - name: apiUser - asserts: - - contains: - path: rules - content: - apiGroups: - - "*" - resources: - - secrets - verbs: - - create - - - it: should not create Role if ozg operator is disabled - set: - sso: - disableOzgOperator: true - api_users: - - name: apiUser - asserts: - - hasDocuments: - count: 0 \ No newline at end of file diff --git a/src/test/helm/service_account_test.yaml b/src/test/helm/service_account_test.yaml deleted file mode 100644 index bb0fefabe733be6e94facbda8222799d5b190f74..0000000000000000000000000000000000000000 --- a/src/test/helm/service_account_test.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright (C) 2023 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. -# - -suite: test service account -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/service_account.yaml -tests: - - it: should create service account with default name - set: - serviceAccount: - create: true - asserts: - - isKind: - of: ServiceAccount - - isAPIVersion: - of: v1 - - equal: - path: metadata.name - value: alfa-service-account - - equal: - path: metadata.namespace - value: sh-helm-test - - it: should create service account with name - set: - serviceAccount: - create: true - name: helm-service-account - asserts: - - isKind: - of: ServiceAccount - - equal: - path: metadata.name - value: helm-service-account - - equal: - path: metadata.namespace - value: sh-helm-test - - it: should not create service account - asserts: - - hasDocuments: - count: 0 \ No newline at end of file diff --git a/src/test/helm/service_monitor_test.yaml b/src/test/helm/service_monitor_test.yaml deleted file mode 100644 index a22bfee713dff5c6be4674cd431c4bfe5505577c..0000000000000000000000000000000000000000 --- a/src/test/helm/service_monitor_test.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# -# 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. -# - -suite: test deployment -release: - name: alfa - namespace: sh-helm-test -templates: - - templates/service_monitor.yaml -tests: - - it: should have basic info and the label component with value alfa-service-monitor attached - asserts: - - isKind: - of: ServiceMonitor - - isAPIVersion: - of: monitoring.coreos.com/v1 - - equal: - path: metadata.name - value: alfa - - equal: - path: metadata.namespace - value: sh-helm-test - - equal: - path: metadata.labels["component"] - value: alfa-service-monitor - - - it: should contain default lables and component lables - asserts: - - equal: - path: metadata.labels - value: - app.kubernetes.io/instance: alfa - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: alfa - app.kubernetes.io/namespace: sh-helm-test - app.kubernetes.io/part-of: ozgcloud - app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS - component: alfa-service-monitor - helm.sh/chart: alfa-0.0.0-MANAGED-BY-JENKINS - - - it: should have the metrics endpoint configured by default - set: - env.springProfiles: oc,stage - asserts: - - contains: - path: spec.endpoints - content: - port: metrics - path: /actuator/prometheus - - it: should be able to enable the endpoint - asserts: - - contains: - path: spec.endpoints - content: - port: metrics - path: /actuator/prometheus - - it: namespace selector should contain the namespace - asserts: - - contains: - path: spec.namespaceSelector.matchNames - content: sh-helm-test - - it: selector should contain the component label with the value alfa-service - asserts: - - equal: - path: spec.selector.matchLabels["component"] - value: alfa-service - - it: selector should contain helm recommended labels name and namespace - asserts: - - equal: - path: spec.selector.matchLabels["app.kubernetes.io/name"] - value: alfa - - equal: - path: spec.selector.matchLabels["app.kubernetes.io/namespace"] - value: sh-helm-test diff --git a/src/test/helm/service_test.yaml b/src/test/helm/service_test.yaml deleted file mode 100644 index 9749ab1b953f4bce475e5f7902257a4e2af743cd..0000000000000000000000000000000000000000 --- a/src/test/helm/service_test.yaml +++ /dev/null @@ -1,106 +0,0 @@ -# -# 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. -# - -suite: test deployment -release: - name: alfa - namespace: helm-test -templates: - - templates/service.yaml -tests: - - it: should have basics and the label component with value alfa-service attached - asserts: - - isKind: - of: Service - - isAPIVersion: - of: v1 - - equal: - path: metadata.labels["component"] - value: alfa-service - - equal: - path: metadata.name - value: alfa - - equal: - path: metadata.namespace - value: helm-test - - it: should be of type ClusterIP - asserts: - - equal: - path: spec.type - value: ClusterIP - - it: ports should contain the 8080 default http port - asserts: - - contains: - path: spec.ports - content: - name: http - port: 8080 - protocol: TCP - targetPort: 8080 - count: 1 - any: true - - it: ports should contain the metrics port - asserts: - - contains: - path: spec.ports - content: - name: metrics - port: 8081 - protocol: TCP - count: 1 - any: true - - it: selector should contain the component label with the value alfa - asserts: - - equal: - path: spec.selector["component"] - value: alfa - - it: selector should contain helm recommended labels name and namespace - asserts: - - equal: - path: spec.selector["app.kubernetes.io/name"] - value: alfa - - equal: - path: spec.selector["app.kubernetes.io/namespace"] - value: helm-test - - - it: selector should contain the component label with the value alfa - asserts: - - equal: - path: spec.selector.component - value: alfa - - - it: should contain default lables and component lables - asserts: - - equal: - path: metadata.labels - value: - app.kubernetes.io/instance: alfa - app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: alfa - app.kubernetes.io/namespace: helm-test - app.kubernetes.io/part-of: ozgcloud - app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS - component: alfa-service - helm.sh/chart: alfa-0.0.0-MANAGED-BY-JENKINS - \ No newline at end of file