diff --git a/alfa-client/apps/admin/Jenkinsfile b/alfa-client/apps/admin/Jenkinsfile index 8ae0ccfcdb74541493558353c758eb9896742caa..2253bfcdd61fcf724892c3f0efef1b21970e4f80 100644 --- a/alfa-client/apps/admin/Jenkinsfile +++ b/alfa-client/apps/admin/Jenkinsfile @@ -50,7 +50,7 @@ pipeline { steps { script { FAILED_STAGE = env.STAGE_NAME - VERSION = getAdminPackageJsonVersion() + VERSION = getPackageJsonVersion() if(isReleaseBranch()){ if ( !isReleaseVersion([VERSION]) ) { @@ -65,7 +65,7 @@ pipeline { } } - stage('Build admin client and its docker image') { + stage('Build administration client and its docker image') { steps { script { FAILED_STAGE=env.STAGE_NAME @@ -75,9 +75,9 @@ pipeline { sh 'pnpm install --frozen-lockfile' if (isReleaseBranch()) { - sh 'pnpm run ci-prodBuild-admin' + sh 'pnpm run ci-prodBuild-administration' } else { - sh 'pnpm run ci-build-admin' + sh 'pnpm run ci-build-administration' } if (isMainBranch()) { withSonarQubeEnv('sonarqube-ozg-sh'){ @@ -148,7 +148,7 @@ pipeline { stage('Trigger Test rollout') { when { - branch 'release-admin' + branch 'release-administration' } steps { script { @@ -176,7 +176,7 @@ pipeline { Boolean isReleaseBranch() { - return env.BRANCH_NAME == 'release-admin' + return env.BRANCH_NAME == 'release-administration' } def validateBranchName(branchName) { @@ -224,24 +224,24 @@ Void setNewTestVersion() { Void setNewGitopsVersion(String environment) { dir("gitops") { - def envFile = "${environment}/application/values/admin-client-values.yaml" + def envFile = "${environment}/application/values/administration-client-values.yaml" def envVersions = readYaml file: envFile - envVersions.admin_client.image.tag = IMAGE_TAG - envVersions.admin_client.helm.version = HELM_CHART_VERSION + envVersions.administration_client.image.tag = IMAGE_TAG + envVersions.administration_client.helm.version = HELM_CHART_VERSION writeYaml file: envFile, data: envVersions, overwrite: true if (hasValuesFileChanged(environment)) { sh "git add ${envFile}" - sh "git commit -m 'jenkins rollout ${environment} admin_client version ${IMAGE_TAG}'" + sh "git commit -m 'jenkins rollout ${environment} administration_client version ${IMAGE_TAG}'" } } } Boolean hasValuesFileChanged(String environment) { - return sh (script: "git status | grep '${environment}/application/values/admin-client-values.yaml'", returnStatus: true) == env.SH_SUCCESS_STATUS_CODE as Integer + return sh (script: "git status | grep '${environment}/application/values/administration-client-values.yaml'", returnStatus: true) == env.SH_SUCCESS_STATUS_CODE as Integer } @@ -263,11 +263,11 @@ Void tagAndPushDockerImage(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/admin-client:build-latest docker.ozg-sh.de/admin-client:${newTag}" - sh "docker push docker.ozg-sh.de/admin-client:${newTag}" + sh "docker tag docker.ozg-sh.de/administration-client:build-latest docker.ozg-sh.de/administration-client:${newTag}" + sh "docker push docker.ozg-sh.de/administration-client:${newTag}" } } -String getAdminPackageJsonVersion() { +String getPackageJsonVersion() { def packageJSON = readJSON file: 'alfa-client/apps/admin/package.json' def packageJSONVersion = packageJSON.version echo packageJSONVersion @@ -277,10 +277,10 @@ String getAdminPackageJsonVersion() { Void deployHelmChart(String helmChartVersion) { withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){ if (isReleaseBranch()) { - result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@admin-client-'''+helmChartVersion+'''.tgz''', returnStdout: true + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps -F file=@administration-client-'''+helmChartVersion+'''.tgz''', returnStdout: true } else { - result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@admin-client-'''+helmChartVersion+'''.tgz''', returnStdout: true + result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=ozg-base-apps-snapshot -F file=@administration-client-'''+helmChartVersion+'''.tgz''', returnStdout: true } if (result != '') { @@ -296,9 +296,9 @@ Boolean isMainBranch() { Void sendFailureMessage() { def room = '' def data = """{"msgtype":"m.text", \ - "body":"Admin-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${JENKINS_URL}", \ + "body":"Administration-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${JENKINS_URL}", \ "format": "org.matrix.custom.html", \ - "formatted_body":"Admin-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${JENKINS_URL}'>${env.BUILD_NUMBER}</a>"}""" + "formatted_body":"Administration-Client: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${JENKINS_URL}'>${env.BUILD_NUMBER}</a>"}""" if (isMainBranch()) { room = "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de" diff --git a/alfa-client/apps/admin/project.json b/alfa-client/apps/admin/project.json index 9876b834e6f340fb8d71da344f75a75a9386f41b..8bffa965bb8057ebe41383397a5bf311660a5f24 100644 --- a/alfa-client/apps/admin/project.json +++ b/alfa-client/apps/admin/project.json @@ -15,10 +15,7 @@ "main": "apps/admin/src/main.ts", "polyfills": ["zone.js"], "tsConfig": "apps/admin/tsconfig.app.json", - "allowedCommonJsDependencies": [ - "sanitize-filename-ts", - "jsrsasign" - ], + "allowedCommonJsDependencies": ["sanitize-filename-ts", "jsrsasign"], "assets": [ "apps/admin/src/assets", { @@ -112,7 +109,7 @@ "engine": "docker", "push": false, "metadata": { - "images": ["docker.ozg-sh.de/admin-client"], + "images": ["docker.ozg-sh.de/administration-client"], "load": true, "tags": ["build-latest"] } diff --git a/alfa-client/apps/admin/src/main/helm/Chart.yaml b/alfa-client/apps/admin/src/main/helm/Chart.yaml index 7f1c7ec2c239956bf3b275ede276c5520603a2b1..98e2c2f72c110125d1ecf1e333e1b696841e9834 100644 --- a/alfa-client/apps/admin/src/main/helm/Chart.yaml +++ b/alfa-client/apps/admin/src/main/helm/Chart.yaml @@ -24,7 +24,7 @@ apiVersion: v1 appVersion: '1.0' -description: A Helm chart for Admin Client -name: admin-client +description: A Helm chart for Administration Client +name: administration-client version: 0.0.0-MANAGED-BY-JENKINS icon: https://simpleicons.org/icons/helm.svg diff --git a/alfa-client/apps/admin/src/main/helm/templates/_helpers.tpl b/alfa-client/apps/admin/src/main/helm/templates/_helpers.tpl index 3e25f32b0a413172ebebbcd61487f45237d1e420..fd312ca2b186f6b8f711f5af52270e35a6c8905a 100644 --- a/alfa-client/apps/admin/src/main/helm/templates/_helpers.tpl +++ b/alfa-client/apps/admin/src/main/helm/templates/_helpers.tpl @@ -51,7 +51,7 @@ {{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} {{- define "app.defaultLabels" }} -app.kubernetes.io/instance: admin-client +app.kubernetes.io/instance: administration-client app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} @@ -80,12 +80,12 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- define "app.serviceAccountName" -}} -{{ printf "%s" ( (.Values.serviceAccount).name | default "admin-client-service-account" ) }} +{{ printf "%s" ( (.Values.serviceAccount).name | default "administration-client-service-account" ) }} {{- end -}} {{- define "app.baseDomain" -}} -{{- printf "%s-%s.%s" (include "app.ozgcloudBezeichner" . ) (.Values.ozgcloud).adminDomainSuffix (include "app.baseUrl" . ) }} +{{- printf "%s-%s.%s" (include "app.ozgcloudBezeichner" . ) (.Values.ozgcloud).administrationDomainSuffix (include "app.baseUrl" . ) }} {{- end -}} {{- define "app.ozgcloudBezeichner" -}} diff --git a/alfa-client/apps/admin/src/main/helm/templates/deployment.yaml b/alfa-client/apps/admin/src/main/helm/templates/deployment.yaml index 313812a726ff3f48bdab917e1b7ecfe8812cc3c0..d42402bb33022a66ed4f19427f3f9072b0330e2f 100644 --- a/alfa-client/apps/admin/src/main/helm/templates/deployment.yaml +++ b/alfa-client/apps/admin/src/main/helm/templates/deployment.yaml @@ -45,7 +45,7 @@ spec: metadata: labels: {{- include "app.defaultLabels" . | indent 8 }} - component: admin-client + component: administration-client spec: {{- if (.Values.serviceAccount).create }} serviceAccountName: {{ include "app.serviceAccountName" . }} @@ -69,7 +69,7 @@ spec: image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" imagePullPolicy: Always - name: admin-client + name: administration-client startupProbe: httpGet: diff --git a/alfa-client/apps/admin/src/main/helm/templates/ingress.yaml b/alfa-client/apps/admin/src/main/helm/templates/ingress.yaml index eb9b7523e636cd573782b12cd4851ef087afa782..3a98e2e4a60e9dab74d960f6b51860dbc22d7fe3 100644 --- a/alfa-client/apps/admin/src/main/helm/templates/ingress.yaml +++ b/alfa-client/apps/admin/src/main/helm/templates/ingress.yaml @@ -49,14 +49,14 @@ spec: backend: service: name: administration - port: + port: number: 8080 - path: / pathType: Prefix backend: service: - name: admin-client - port: + name: administration-client + port: number: 8080 host: {{ include "app.baseDomain" . }} diff --git a/alfa-client/apps/admin/src/main/helm/templates/network_policy.yaml b/alfa-client/apps/admin/src/main/helm/templates/network_policy.yaml index 27b2d9d14a038a1dc5c96d66ca4c464ea4a93679..9a5db61e93b95cb856adc1a337e863d1cf28fc83 100644 --- a/alfa-client/apps/admin/src/main/helm/templates/network_policy.yaml +++ b/alfa-client/apps/admin/src/main/helm/templates/network_policy.yaml @@ -26,7 +26,7 @@ apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: - name: network-policy-admin-client + name: network-policy-administration-client namespace: {{ .Release.Namespace }} spec: podSelector: @@ -46,7 +46,7 @@ spec: {{- end }} egress: - to: - - namespaceSelector: + - namespaceSelector: matchLabels: kubernetes.io/metadata.name: administration - to: diff --git a/alfa-client/apps/admin/src/main/helm/templates/service.yaml b/alfa-client/apps/admin/src/main/helm/templates/service.yaml index 53c0aa703d4563cc7322a8f672fa78c6bda526eb..4c3ba099a334cb01d4bcd07516d8426124e6d5a6 100644 --- a/alfa-client/apps/admin/src/main/helm/templates/service.yaml +++ b/alfa-client/apps/admin/src/main/helm/templates/service.yaml @@ -29,7 +29,7 @@ metadata: namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} - component: admin-client-service + component: administration-client-service spec: type: ClusterIP ports: @@ -40,4 +40,4 @@ spec: selector: {{- include "app.matchLabels" . | indent 4 }} - component: admin-client \ No newline at end of file + component: administration-client \ No newline at end of file diff --git a/alfa-client/apps/admin/src/main/helm/values.yaml b/alfa-client/apps/admin/src/main/helm/values.yaml index c1b1df2cdae5978d1c6dbe828a4a36f973f70ede..3bd9e23beaf72777caffab31fcfa85bfc25bf327 100644 --- a/alfa-client/apps/admin/src/main/helm/values.yaml +++ b/alfa-client/apps/admin/src/main/helm/values.yaml @@ -24,9 +24,9 @@ image: repo: docker.ozg-sh.de - name: admin-client + name: administration-client tag: 0.1.0 # [default: latest] replicaCount: 1 ozgcloud: - adminDomainSuffix: admin + administrationDomainSuffix: administration diff --git a/alfa-client/apps/admin/src/test/helm/deployment_63_char_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_63_char_test.yaml index aefd7f81b2c70e7b750b09f5545507345b5bf4ab..db1cc9f92904d10299725421e4c7206b7d2e5798 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_63_char_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_63_char_test.yaml @@ -24,7 +24,7 @@ suite: test deyploment less than 63 chars release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: @@ -49,7 +49,7 @@ tests: version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 asserts: - failedTemplate: - errorMessage: .Chart.Name-.Chart.Version admin-client-1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + errorMessage: .Chart.Name-.Chart.Version administration-client-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: {} \ No newline at end of file + - notFailedTemplate: {} diff --git a/alfa-client/apps/admin/src/test/helm/deployment_container_basic_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_container_basic_test.yaml index fd783faf0597f003256bfc3b6cdb3a4b48fda537..301b06eb9bd252846c9cc2e908902380ecf6739d 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_container_basic_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_container_basic_test.yaml @@ -24,7 +24,7 @@ suite: test deployment container basics release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -38,20 +38,10 @@ tests: asserts: - equal: path: spec.template.spec.containers[0].image - value: docker.ozg-sh.de/admin-client:0.1.0 + value: docker.ozg-sh.de/administration-client:0.1.0 - equal: path: spec.template.spec.containers[0].name - value: admin-client - - equal: + value: administration-client + - equal: path: spec.template.spec.containers[0].imagePullPolicy value: Always - #- it: should have correct values for container ports - # asserts: - # - contains: - # path: spec.template.spec.containers[0].ports - # content: - # containerPort: 8081 - # name: metrics - # protocol: TCP - - diff --git a/alfa-client/apps/admin/src/test/helm/deployment_container_other_values_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_container_other_values_test.yaml index e73cabb2634d16f2c3c8cd104ecc0ade2af46d78..32d7a2be8b0340082991856a15d75408a3e86360 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_container_other_values_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_container_other_values_test.yaml @@ -22,8 +22,7 @@ # unter der Lizenz sind dem Lizenztext zu entnehmen. # - - # +# # Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den # Ministerpräsidenten des Landes Schleswig-Holstein # Staatskanzlei @@ -49,7 +48,7 @@ suite: test deployment container other values release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -57,7 +56,7 @@ set: ozgcloud: environment: dev imagePullSecret: test-image-secret - + tests: - it: should have correct values for container terminationMessagePolicy, terminationMessagePath, stdin, tty asserts: @@ -67,9 +66,9 @@ tests: - equal: path: spec.template.spec.containers[0].terminationMessagePath value: /dev/termination-log - - equal: + - equal: path: spec.template.spec.containers[0].stdin value: true - - equal: + - equal: path: spec.template.spec.containers[0].tty - value: true \ No newline at end of file + value: true diff --git a/alfa-client/apps/admin/src/test/helm/deployment_container_security_context_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_container_security_context_test.yaml index 6acb97512889899878f48eb3f510d1011ca7e0f4..6e42a6a93048f8577650fe57186df2a2db592b0f 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_container_security_context_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_container_security_context_test.yaml @@ -24,7 +24,7 @@ suite: test deployment container security context release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -65,4 +65,4 @@ tests: asserts: - equal: path: spec.template.spec.containers[0].securityContext.runAsGroup - value: 1000 \ No newline at end of file + value: 1000 diff --git a/alfa-client/apps/admin/src/test/helm/deployment_defaults_labels_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_defaults_labels_test.yaml index 8a98ecee5e35f378e0bc537dd6fca032198083a4..e616ba28a7f21bc9cb1cdbed81e5b065dc9a290d 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_defaults_labels_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_defaults_labels_test.yaml @@ -24,7 +24,7 @@ suite: test deployment default labels release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -39,33 +39,32 @@ tests: - equal: path: metadata.labels value: - app.kubernetes.io/instance: admin-client + app.kubernetes.io/instance: administration-client app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: admin-client + app.kubernetes.io/name: administration-client 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: admin-client-0.0.0-MANAGED-BY-JENKINS - + helm.sh/chart: administration-client-0.0.0-MANAGED-BY-JENKINS + - it: should set spec.selector.matchLabels asserts: - equal: path: spec.selector.matchLabels value: - app.kubernetes.io/name: admin-client + app.kubernetes.io/name: administration-client app.kubernetes.io/namespace: sh-helm-test - - it: should have correct deyploment spec.template.metadata.labels asserts: - equal: path: spec.template.metadata.labels - value: - app.kubernetes.io/instance: admin-client + value: + app.kubernetes.io/instance: administration-client app.kubernetes.io/managed-by: Helm - app.kubernetes.io/name: admin-client + app.kubernetes.io/name: administration-client app.kubernetes.io/namespace: sh-helm-test app.kubernetes.io/part-of: ozgcloud app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS - component: admin-client - helm.sh/chart: admin-client-0.0.0-MANAGED-BY-JENKINS \ No newline at end of file + component: administration-client + helm.sh/chart: administration-client-0.0.0-MANAGED-BY-JENKINS diff --git a/alfa-client/apps/admin/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml index 7f1200536637e1584514d7bc504615702694dc01..dcef5143625d5da53e1333f52826c9ec15348efa 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_defaults_topologySpreadConstraints_test.yaml @@ -24,11 +24,11 @@ suite: test deployment topology spread constrains release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml -set: +set: ozgcloud: environment: test imagePullSecret: test-image-secret @@ -49,4 +49,4 @@ tests: value: ScheduleAnyway - equal: path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/name"] - value: admin-client \ No newline at end of file + value: administration-client diff --git a/alfa-client/apps/admin/src/test/helm/deployment_general_value_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_general_value_test.yaml index 85d1b98c99cefb1080d4db168395c6d764b9a050..114d9e309062cf45213faaeedc9170dc54da3665 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_general_value_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_general_value_test.yaml @@ -24,7 +24,7 @@ suite: test deployment general values release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -33,25 +33,23 @@ set: environment: dev imagePullSecret: test-image-secret - tests: - it: should have correct apiVersion asserts: - isKind: of: Deployment - isAPIVersion: - of: "apps/v1" - - - it: should have correct deployment metadata - asserts: + of: 'apps/v1' + + - it: should have correct deployment metadata + asserts: - equal: path: metadata.name - value: admin-client - - equal: + value: administration-client + - equal: path: metadata.namespace value: sh-helm-test - - it: should have correct deyployment general spec values asserts: - equal: @@ -65,12 +63,10 @@ tests: value: 10 - it: should have correct deployment spec strategy values asserts: - - equal: + - equal: path: spec.strategy - value: + value: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate - - diff --git a/alfa-client/apps/admin/src/test/helm/deployment_host_aliases_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_host_aliases_test.yaml index 4fe65ff025aa4892f639bd6452bc5e9cea316e09..fda8d70bf7892b11f9f383fae197207b86c499e2 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_host_aliases_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_host_aliases_test.yaml @@ -24,11 +24,11 @@ suite: deployment host aliases release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml -set: +set: ozgcloud: environment: test imagePullSecret: test-image-secret @@ -40,15 +40,15 @@ tests: - it: should set spec.template.spec.hostAliases set: hostAliases: - - ip: "127.0.0.1" + - ip: '127.0.0.1' hostname: - - "eins" - - "zwei" + - 'eins' + - 'zwei' asserts: - contains: path: spec.template.spec.hostAliases content: - ip: "127.0.0.1" + ip: '127.0.0.1' hostname: - - "eins" - - "zwei" + - 'eins' + - 'zwei' diff --git a/alfa-client/apps/admin/src/test/helm/deployment_imagepull_secret_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_imagepull_secret_test.yaml index 7129ef48705458bca19a741136907126fbe09fa1..1671e8a154517a59520eba65fa4f73ea50d7f9bf 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_imagepull_secret_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_imagepull_secret_test.yaml @@ -24,7 +24,7 @@ suite: test deployment image pull secret release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -38,4 +38,4 @@ tests: asserts: - equal: path: spec.template.spec.imagePullSecrets[0].name - value: test-image-secret \ No newline at end of file + value: test-image-secret diff --git a/alfa-client/apps/admin/src/test/helm/deployment_ozgcloud_base_values_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_ozgcloud_base_values_test.yaml index 9195d806882c3e6bc7c841b34169e8de7a2673e8..892f2a185541661a5aaed10337c9eee95c2744fc 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_ozgcloud_base_values_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_ozgcloud_base_values_test.yaml @@ -24,11 +24,11 @@ suite: test ozgcloud base values release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml -set: +set: imagePullSecret: test-image-secret tests: diff --git a/alfa-client/apps/admin/src/test/helm/deployment_resources_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_resources_test.yaml index 487a6aa04c55c1636d661a7262635e573ab80276..ed640c855a3eb9a0a4c85087cf0275f72bf7b17e 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_resources_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_resources_test.yaml @@ -24,7 +24,7 @@ suite: test deployment container resources release: - name: admin-client + name: administration-client templates: - templates/deployment.yaml set: @@ -59,4 +59,3 @@ tests: asserts: - isEmpty: path: spec.template.spec.containers[0].resources - diff --git a/alfa-client/apps/admin/src/test/helm/deployment_service_account_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_service_account_test.yaml index 98246ba981cba50008edd137c04040383faa5ecc..e8544c9249516ef141e947003588e565bc138929 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_service_account_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_service_account_test.yaml @@ -24,7 +24,7 @@ suite: deployment service account release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml @@ -41,7 +41,7 @@ tests: asserts: - equal: path: spec.template.spec.serviceAccountName - value: admin-client-service-account + value: administration-client-service-account - it: should use service account with name set: serviceAccount: @@ -54,4 +54,4 @@ tests: - it: should use default service account asserts: - isNull: - path: spec.template.spec.serviceAccountName \ No newline at end of file + path: spec.template.spec.serviceAccountName diff --git a/alfa-client/apps/admin/src/test/helm/deployment_springProfile_test.yaml b/alfa-client/apps/admin/src/test/helm/deployment_springProfile_test.yaml index c42ea85d177c3daf475aa403f636efc4f8594707..483f9ef354b4d5bedeaf9fbbede3b1da763afc92 100644 --- a/alfa-client/apps/admin/src/test/helm/deployment_springProfile_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/deployment_springProfile_test.yaml @@ -24,11 +24,11 @@ suite: test deployment spring profiles release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/deployment.yaml -set: +set: ozgcloud: environment: test imagePullSecret: test-image-secret @@ -53,4 +53,4 @@ tests: path: spec.template.spec.containers[0].env content: name: spring_profiles_active - value: oc, test \ No newline at end of file + value: oc, test diff --git a/alfa-client/apps/admin/src/test/helm/ingress-tests.yaml b/alfa-client/apps/admin/src/test/helm/ingress-tests.yaml index 55974c06a961fefc8b43b985118eaf0eff5cc92a..ffcbcd43dc757d2bc0bc454dc88bcb556afb10f9 100644 --- a/alfa-client/apps/admin/src/test/helm/ingress-tests.yaml +++ b/alfa-client/apps/admin/src/test/helm/ingress-tests.yaml @@ -24,11 +24,11 @@ suite: test ingress.yaml release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/ingress.yaml -set: +set: ozgcloud: bezeichner: helm baseUrl: test.by.ozg-cloud.de @@ -42,7 +42,7 @@ tests: asserts: - equal: path: spec.tls[0].secretName - value: helm-admin-client-tls + value: helm-administration-client-tls - it: should not create ingress tls/ingressClass set: @@ -52,7 +52,7 @@ tests: path: spec.ingressClassName - isNull: path: spec.tls[0].secretName - + - it: should use default letsencrypt-prod cluster-issuer asserts: - equal: @@ -79,35 +79,34 @@ tests: asserts: - equal: path: spec.tls[0].hosts[0] - value: helm-admin.test.by.ozg-cloud.de + value: helm-administration.test.by.ozg-cloud.de - it: should create rules correctly asserts: - equal: path: spec.rules[0].http.paths[0] - value: - path: /api - pathType: Prefix - backend: - service: - name: administration - port: - number: 8080 + value: + path: /api + pathType: Prefix + backend: + service: + name: administration + port: + number: 8080 - equal: path: spec.rules[0].http.paths[1] - value: - path: / - pathType: Prefix - backend: - service: - name: admin-client - port: - number: 8080 - + value: + path: / + pathType: Prefix + backend: + service: + name: administration-client + port: + number: 8080 - it: should set hostname asserts: - equal: path: spec.rules[0].host - value: helm-admin.test.by.ozg-cloud.de + value: helm-administration.test.by.ozg-cloud.de diff --git a/alfa-client/apps/admin/src/test/helm/network_policy_test.yaml b/alfa-client/apps/admin/src/test/helm/network_policy_test.yaml index 2032db88a659c5b7fcf67aa199d6dba893bf5397..b9b5bce398183921d186fd26e480b1b0d6090110 100644 --- a/alfa-client/apps/admin/src/test/helm/network_policy_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/network_policy_test.yaml @@ -22,9 +22,9 @@ # unter der Lizenz sind dem Lizenztext zu entnehmen. # -suite: network policy admin-client test +suite: network policy administration-client test release: - name: admin-client + name: administration-client namespace: by-helm-test templates: - templates/network_policy.yaml @@ -52,7 +52,7 @@ tests: - equal: path: metadata value: - name: network-policy-admin-client + name: network-policy-administration-client namespace: by-helm-test - it: should add egress rule to administration service @@ -63,8 +63,8 @@ tests: - contains: path: spec.egress content: - to: - - namespaceSelector: + to: + - namespaceSelector: matchLabels: kubernetes.io/metadata.name: administration @@ -76,87 +76,86 @@ tests: - contains: path: spec.egress content: - to: + to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: test-dns-namespace - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - - port: 5353 - protocol: UDP - - port: 5353 - protocol: TCP + ports: + - port: 53 + protocol: UDP + - port: 53 + protocol: TCP + - port: 5353 + protocol: UDP + - port: 5353 + protocol: TCP - it: should add additionalIngressConfig local set: networkPolicy: dnsServerNamespace: test-namespace-dns additionalIngressConfigLocal: - - from: - - podSelector: - matchLabels: - component: client2 + - from: + - podSelector: + matchLabels: + component: client2 asserts: - contains: path: spec.ingress content: from: - - podSelector: - matchLabels: - component: client2 + - podSelector: + matchLabels: + component: client2 - it: should add additionalIngressConfig global set: networkPolicy: dnsServerNamespace: test-namespace-dns additionalIngressConfigGlobal: - - from: - - podSelector: - matchLabels: - component: client2 + - from: + - podSelector: + matchLabels: + component: client2 asserts: - contains: path: spec.ingress content: from: - - podSelector: - matchLabels: - component: client2 + - podSelector: + matchLabels: + component: client2 - it: should add additionalEgressConfig local set: networkPolicy: dnsServerNamespace: test-dns-namespace additionalEgressConfigLocal: - - to: - - ipBlock: - cidr: 1.2.3.4/32 + - to: + - ipBlock: + cidr: 1.2.3.4/32 asserts: - - contains: - path: spec.egress - content: - to: - - ipBlock: - cidr: 1.2.3.4/32 + - contains: + path: spec.egress + content: + to: + - ipBlock: + cidr: 1.2.3.4/32 - it: should add additionalEgressConfig global set: networkPolicy: dnsServerNamespace: test-dns-namespace additionalEgressConfigGlobal: - - to: - - ipBlock: - cidr: 1.2.3.4/32 + - to: + - ipBlock: + cidr: 1.2.3.4/32 asserts: - - contains: - path: spec.egress - content: - to: - - ipBlock: - cidr: 1.2.3.4/32 - + - contains: + path: spec.egress + content: + to: + - ipBlock: + cidr: 1.2.3.4/32 - it: test network policy disabled set: @@ -188,4 +187,4 @@ tests: dnsServerNamespace: test-dns-server-namespace asserts: - hasDocuments: - count: 1 \ No newline at end of file + count: 1 diff --git a/alfa-client/apps/admin/src/test/helm/service_account_test.yaml b/alfa-client/apps/admin/src/test/helm/service_account_test.yaml index e80dde85e375a7ba052a403807c460969c9fdc4e..ed45acb09d1975f2cde3e28d2ffa53ca44603e8e 100644 --- a/alfa-client/apps/admin/src/test/helm/service_account_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/service_account_test.yaml @@ -24,7 +24,7 @@ suite: test service account release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/service_account.yaml @@ -40,7 +40,7 @@ tests: of: v1 - equal: path: metadata.name - value: admin-client-service-account + value: administration-client-service-account - equal: path: metadata.namespace value: sh-helm-test @@ -61,4 +61,4 @@ tests: - it: should not create service account asserts: - hasDocuments: - count: 0 \ No newline at end of file + count: 0 diff --git a/alfa-client/apps/admin/src/test/helm/service_test.yaml b/alfa-client/apps/admin/src/test/helm/service_test.yaml index 6496fb494b71c6d91a23ee3979b611ebd06a9fda..02bff8a2fc9e152c2db8f5ec57eb91e6a592ff88 100644 --- a/alfa-client/apps/admin/src/test/helm/service_test.yaml +++ b/alfa-client/apps/admin/src/test/helm/service_test.yaml @@ -24,20 +24,20 @@ suite: test service release: - name: admin-client + name: administration-client namespace: sh-helm-test templates: - templates/service.yaml tests: - - it: should have the label component with correct value + - it: should have the label component with correct value asserts: - isKind: of: Service - isAPIVersion: - of: v1 + of: v1 - equal: path: metadata.labels.component - value: admin-client-service + value: administration-client-service - it: should be of type ClusterIP asserts: - equal: @@ -48,19 +48,19 @@ tests: asserts: - equal: path: spec.selector.component - value: admin-client + value: administration-client - it: selector should contain helm recommended labels name and namespace asserts: - equal: path: spec.selector value: - app.kubernetes.io/name: admin-client + app.kubernetes.io/name: administration-client app.kubernetes.io/namespace: sh-helm-test - component: admin-client + component: administration-client - it: check component label for service asserts: - equal: path: metadata.labels["component"] - value: admin-client-service \ No newline at end of file + value: administration-client-service diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-forwarding-dialog.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-forwarding-dialog.e2e.component.ts index 7f5d897628057b0c929c61fd9596ad7de3dad49a..34702bb369f5ae2c4bb777ea001a14562c8d5b9c 100644 --- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-forwarding-dialog.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-forwarding-dialog.e2e.component.ts @@ -5,9 +5,9 @@ export class ForwardingDialogE2EComponent { private readonly forwardingButton: string = 'forwarding-dialog-forwarding-button'; private readonly searchText: string = 'instant_search-text-input'; private readonly searchEntry: string = 'item-button'; - private readonly forwardingItem: string = 'forwarding-item'; + private readonly selectedSearchItem: string = 'selected-search-item'; private readonly changeButton: string = 'forwarding-item-change-button'; - private readonly zufiSearch: string = 'zufi-search'; + private readonly organisationsEinheitSearch: string = 'organisations-einheit-search'; public getRoot() { return cy.getTestElement(this.root); @@ -37,15 +37,15 @@ export class ForwardingDialogE2EComponent { cy.getTestElement(this.searchEntry).eq(index).click(); } - public getForwardingItem() { - return cy.getTestElement(this.forwardingItem); + public getSelectedSearchItem() { + return cy.getTestElement(this.selectedSearchItem); } public getChangeButton() { return cy.getTestElement(this.changeButton); } - public getZufiSearch() { - return cy.getTestElement(this.zufiSearch); + public getOrganisationsEinheitSearch() { + return cy.getTestElement(this.organisationsEinheitSearch); } } diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-forwarding.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-forwarding.cy.ts index d91019905c1bc53a44fb0a28e0fb882a416933f3..8634b339b87e025f62705edaefa760c86c16575b 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-forwarding.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-forwarding.cy.ts @@ -2,6 +2,7 @@ import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import localeDeExtra from '@angular/common/locales/extra/de'; import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components'; +import { ForwardingDialogE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-forwarding-dialog.e2e.component'; import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component'; import { E2EVorgangNavigator } from '../../../helper/vorgang/vorgang.navigator'; import { E2EVorgangVerifier } from '../../../helper/vorgang/vorgang.verifier'; @@ -9,10 +10,9 @@ import { VorgangE2E } from '../../../model/vorgang'; import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { VorgangPage } from '../../../page-objects/vorgang.po'; import { dropCollections } from '../../../support/cypress-helper'; -import { beDisabled, contains, exist, notBeDisabled, notExist } from '../../../support/cypress.util'; +import { beAriaDisabled, contains, exist, notBeAriaDisabled, notExist } from '../../../support/cypress.util'; import { loginAsPeter, loginAsSabine } from '../../../support/user-util'; import { createVorgang, initVorgaenge } from '../../../support/vorgang-util'; -import { ForwardingDialogE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-forwarding-dialog.e2e.component'; registerLocaleData(localeDe, 'de', localeDeExtra); @@ -59,12 +59,12 @@ describe('Vorgang weiterleiten', () => { exist(forwardingDialog.getRoot()); }); - it('should have zufi search', () => { - exist(forwardingDialog.getZufiSearch()); + it('should have organisations einheit search', () => { + exist(forwardingDialog.getOrganisationsEinheitSearch()); }); it('should have disabled forwarding button', () => { - beDisabled(forwardingDialog.getForwardingButton()); + beAriaDisabled(forwardingDialog.getForwardingButton()); }); it('should close dialog on escape', () => { @@ -87,30 +87,30 @@ describe('Vorgang weiterleiten', () => { notExist(forwardingDialog.getRoot()); }); - it('should show forwarding item on search select', () => { + it('should show selected search item on search select', () => { vorgangFormularButtons.getForwardButton().click(); forwardingDialog.search(organisationsEinheitName); forwardingDialog.clickSearchEntry(0); - exist(forwardingDialog.getForwardingItem()); - contains(forwardingDialog.getForwardingItem(), organisationsEinheitName); - contains(forwardingDialog.getForwardingItem(), organisationsEinheitAddress); + exist(forwardingDialog.getSelectedSearchItem()); + contains(forwardingDialog.getSelectedSearchItem(), organisationsEinheitName); + contains(forwardingDialog.getSelectedSearchItem(), organisationsEinheitAddress); }); it('should not show zufi search on search select', () => { - notExist(forwardingDialog.getZufiSearch()); + notExist(forwardingDialog.getOrganisationsEinheitSearch()); }); it('should not disable forwarding button on search select', () => { - notBeDisabled(forwardingDialog.getForwardingButton()); + notBeAriaDisabled(forwardingDialog.getForwardingButton()); }); - it('should clear forwarding item on change button click', () => { + it('should clear selected search item on change button click', () => { forwardingDialog.getChangeButton().click(); - notExist(forwardingDialog.getForwardingItem()); - exist(forwardingDialog.getZufiSearch()); - beDisabled(forwardingDialog.getForwardingButton()); + notExist(forwardingDialog.getSelectedSearchItem()); + exist(forwardingDialog.getOrganisationsEinheitSearch()); + beAriaDisabled(forwardingDialog.getForwardingButton()); }); it('should not display Weiterleiten button in status Angenommen', () => { diff --git a/alfa-client/apps/alfa-e2e/src/helper/forwarding/forwarding.executor.ts b/alfa-client/apps/alfa-e2e/src/helper/forwarding/forwarding.executor.ts index 22295bb180d00c9d23b787fde72a001bea29cab2..659d24215d7275c70ae2ee1b710f196dd0b81a46 100644 --- a/alfa-client/apps/alfa-e2e/src/helper/forwarding/forwarding.executor.ts +++ b/alfa-client/apps/alfa-e2e/src/helper/forwarding/forwarding.executor.ts @@ -9,7 +9,7 @@ export class E2EForwardingExecutor { this.forwardingDialog.getSearchText().type(organisationsEinheit); waitForSpinnerToDisappear(); this.forwardingDialog.clickSearchEntry(0); - exist(this.forwardingDialog.getForwardingItem()); + exist(this.forwardingDialog.getSelectedSearchItem()); this.forwardingDialog.getForwardingButton().click(); waitForSpinnerToDisappear(); } diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts b/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts index f62a66e73e504ddd9952afd438ecdd7cf242866a..768db5ed90ce7662d1e2358b58aff85d86655f6b 100644 --- a/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/cypress.util.ts @@ -97,12 +97,12 @@ export function notBeChecked(element: any): void { element.should('not.be.checked'); } -export function beDisabled(element: any): void { - element.should('be.disabled'); +export function beAriaDisabled(element: any): void { + element.should('have.attr', 'aria-disabled', 'true'); } -export function notBeDisabled(element: any): void { - element.should('not.be.disabled'); +export function notBeAriaDisabled(element: any): void { + element.should('have.attr', 'aria-disabled', 'false'); } //TODO: "first()" rausnehmen -> im html eine entprechende data-test-id ansprechen?! | trennen in "get" und "verify" diff --git a/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts b/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts index 4c1ebd4cfe3750fb12e7f5e05d8562fd49559b63..79e617880c423eefeb7ce3e3e41877c32154e29f 100644 --- a/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts +++ b/alfa-client/libs/design-component/src/lib/button-with-spinner/button-with-spinner.component.ts @@ -45,7 +45,7 @@ type ButtonVariants = VariantProps<typeof buttonVariants>; [dataTestId]="dataTestId" [isLoading]="isLoading" [disabled]="disabled" - (click)="clickEmitter.emit()" + (clickEmitter)="clickEmitter.emit()" > <ng-content icon select="[icon]" /> </ods-button>`, diff --git a/alfa-client/libs/design-component/src/lib/cancel-dialog-button/cancel-dialog-button.component.ts b/alfa-client/libs/design-component/src/lib/cancel-dialog-button/cancel-dialog-button.component.ts index df1f5fa4b1732a9b60879f6353ec9f006832cb5f..03ac3acbe39b7907df7af242da47d4d3f70a5fa3 100644 --- a/alfa-client/libs/design-component/src/lib/cancel-dialog-button/cancel-dialog-button.component.ts +++ b/alfa-client/libs/design-component/src/lib/cancel-dialog-button/cancel-dialog-button.component.ts @@ -27,7 +27,11 @@ import { ButtonComponent, CloseIconComponent, TooltipDirective } from '@ods/syst text="Abbrechen" dataTestId="cancel-dialog-button" data-test-id="cancel-dialog-button-container" - /> + > + <ng-container icon> + <ods-close-icon class="fill-primary" /> + </ng-container> + </ods-button> }`, }) export class CancelDialogButtonComponent { diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts index d05d44db8ce46777152a6f48145ac2000dd5d0a3..c17fdb29f53e0948d6f7b3a61d0d3725c18e2ffc 100644 --- a/alfa-client/libs/design-system/src/index.ts +++ b/alfa-client/libs/design-system/src/index.ts @@ -28,6 +28,7 @@ export * from './lib/bescheid-status-text/bescheid-status-text.component'; export * from './lib/bescheid-wrapper/bescheid-wrapper.component'; export * from './lib/button-card/button-card.component'; export * from './lib/button/button.component'; +export * from './lib/dialog-container/dialog-container.component'; export * from './lib/dropdown-menu/dropdown-menu-button-item/dropdown-menu-button-item.component'; export * from './lib/dropdown-menu/dropdown-menu-item/dropdown-menu-item.component'; export * from './lib/dropdown-menu/dropdown-menu-link-item/dropdown-menu-link-item.component'; @@ -41,6 +42,7 @@ export * from './lib/form/file-upload-button/file-upload-button.component'; export * from './lib/form/radio-button-card/radio-button-card.component'; export * from './lib/form/text-input/text-input.component'; export * from './lib/form/textarea/textarea.component'; +export * from './lib/forwarding-item/forwarding-item-info/forwarding-item-info.component'; export * from './lib/forwarding-item/forwarding-item.component'; export * from './lib/icons/accessibility-icon/accessibility-icon.component'; export * from './lib/icons/account-circle-icon/account-circle-icon.component'; diff --git a/alfa-client/libs/design-system/src/lib/button/button.component.spec.ts b/alfa-client/libs/design-system/src/lib/button/button.component.spec.ts index ecd327e0aa7ec13701a789698d80c163ea5d3dfa..fc5322e9e5371ac6f5a6dcc897224fce9b0a4c5e 100644 --- a/alfa-client/libs/design-system/src/lib/button/button.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/button/button.component.spec.ts @@ -41,4 +41,26 @@ describe('ButtonComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('component', () => { + beforeEach(() => { + component.clickEmitter.emit = jest.fn(); + }); + + describe('onClick', () => { + it('should emit click', () => { + component.onClick(); + + expect(component.clickEmitter.emit).toHaveBeenCalled(); + }); + + it('should NOT emit click if button is disabled', () => { + component.disabled = true; + + component.onClick(); + + expect(component.clickEmitter.emit).not.toHaveBeenCalled(); + }); + }); + }); }); diff --git a/alfa-client/libs/design-system/src/lib/button/button.component.ts b/alfa-client/libs/design-system/src/lib/button/button.component.ts index 47e76172adb5e6f9600be54291ee79a841defb78..3f88a32abc1bdb41fc4c12cabc4543f7c2def3c1 100644 --- a/alfa-client/libs/design-system/src/lib/button/button.component.ts +++ b/alfa-client/libs/design-system/src/lib/button/button.component.ts @@ -31,18 +31,18 @@ import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.compone export const buttonVariants = cva( [ 'flex items-center gap-3 rounded-lg text-sm font-medium box-border', - 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', + 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 outline-focus', ], { variants: { variant: { - primary: 'bg-primary text-whitetext shadow-md hover:enabled:bg-primary-hover focus-visible:bg-primary-hover', + primary: 'bg-primary text-whitetext shadow-md hover:bg-primary-hover focus-visible:bg-primary-hover', outline: - 'border border-primary bg-background-50 text-primary shadow-md hover:enabled:bg-ghost-hover focus-visible:bg-ghost-hover focus-visible:border-background-200', + 'border border-primary bg-background-50 text-primary shadow-md hover:bg-ghost-hover focus-visible:bg-ghost-hover focus-visible:border-background-200', outline_error: - 'border border-error bg-background-50 text-error shadow-md hover:enabled:bg-ghost-hover focus-visible:bg-ghost-hover focus-visible:border-background-200', + 'border border-error bg-background-50 text-error shadow-md hover:bg-ghost-hover focus-visible:bg-ghost-hover focus-visible:border-background-200', ghost: - 'border border-transparent hover:enabled:bg-ghost-hover text-primary focus-visible:border-background-200 focus-visible:bg-ghost-hover font-semibold [&]:focus-visible:outline-offset-1', + 'border border-transparent hover:bg-ghost-hover text-primary focus-visible:border-background-200 focus-visible:bg-ghost-hover font-semibold [&]:focus-visible:outline-offset-1', }, size: { medium: 'h-9 py-2 px-4 min-w-32', @@ -50,11 +50,11 @@ export const buttonVariants = cva( }, disabled: { false: null, - true: ['opacity-70', 'cursor-not-allowed'], + true: '[&]:outline-disabled-button cursor-not-allowed', }, destructive: { - false: 'outline-focus', - true: 'outline-destructive', + false: null, + true: '[&]:outline-destructive', }, }, defaultVariants: { @@ -66,19 +66,34 @@ export const buttonVariants = cva( { variant: 'primary', destructive: true, - class: - '[&]:hover:enabled:bg-destructive-primary-hover [&]:bg-destructive [&]:outline-destructive [&]:focus-visible:bg-destructive-primary-hover', + class: '[&]:hover:bg-destructive-primary-hover [&]:bg-destructive [&]:focus-visible:bg-destructive-primary-hover', }, { variant: 'outline', destructive: true, class: - '[&]:border-destructive [&]:text-destructive [&]:hover:enabled:bg-destructive-hover [&]:focus-visible:bg-destructive-hover', + '[&]:border-destructive [&]:text-destructive [&]:hover:bg-destructive-hover [&]:focus-visible:bg-destructive-hover', }, { variant: 'ghost', destructive: true, - class: '[&]:text-destructive [&]:hover:enabled:bg-destructive-hover [&]:focus-visible:bg-destructive-hover', + class: '[&]:text-destructive [&]:hover:bg-destructive-hover [&]:focus-visible:bg-destructive-hover', + }, + { + variant: 'primary', + disabled: true, + class: '[&]:bg-disabled-button [&]:hover:bg-disabled-button/90 [&]:focus-visible:bg-disabled-button/90', + }, + { + variant: 'outline', + disabled: true, + class: + '[&]:text-disabled-button [&]:border-disabled-button [&]:hover:bg-disabled-button/10 [&]:focus-visible:bg-disabled-button/10', + }, + { + variant: 'ghost', + disabled: true, + class: '[&]:text-disabled-button [&]:hover:bg-disabled-button/10 [&]:focus-visible:bg-disabled-button/10', }, ], }, @@ -89,27 +104,31 @@ export type ButtonVariants = VariantProps<typeof buttonVariants>; selector: 'ods-button', standalone: true, imports: [CommonModule, SpinnerIconComponent], - template: ` <button + template: `<button type="button" - [ngClass]="buttonVariants({ size, variant, disabled, destructive })" - [disabled]="isDisabled" + [ngClass]="buttonVariants({ size, variant, disabled: isDisabled, destructive })" [attr.aria-disabled]="isDisabled" [attr.aria-label]="text" [attr.data-test-id]="dataTestId" [attr.data-test-class]="dataTestClass" - (click)="clickEmitter.emit()" + (click)="onClick()" > - <ng-content *ngIf="!isLoading" select="[icon]"></ng-content> - <ods-spinner-icon *ngIf="isLoading" [size]="spinnerSize" data-test-class="spinner"></ods-spinner-icon> - <div *ngIf="text" class="flex-grow">{{ text }}</div> + @if (isLoading) { + <ods-spinner-icon [class]="isDisabled && 'fill-disabled-button'" [size]="spinnerSize" data-test-class="spinner" /> + } @else { + <ng-content select="[icon]" /> + } + @if (text) { + <p class="flex-grow">{{ text }}</p> + } </button>`, }) export class ButtonComponent { @Input() text: string = ''; @Input() dataTestId: string = ''; @Input() dataTestClass: string = ''; - @Input() disabled: boolean = false; - @Input() isLoading: boolean = false; + @Input({ transform: booleanAttribute }) disabled: boolean = false; + @Input({ transform: booleanAttribute }) isLoading: boolean = false; @Input({ transform: booleanAttribute }) destructive: boolean = false; @Input() variant: ButtonVariants['variant']; @Input() size: ButtonVariants['size']; @@ -121,5 +140,11 @@ export class ButtonComponent { return this.disabled || this.isLoading; } + public onClick(): void { + if (!this.isDisabled) { + this.clickEmitter.emit(); + } + } + readonly buttonVariants = buttonVariants; } diff --git a/alfa-client/libs/design-system/src/lib/dialog-container/dialog-container.component.spec.ts b/alfa-client/libs/design-system/src/lib/dialog-container/dialog-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..d1f894406fa1f6c9468c1d7ba356a56947a05c25 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/dialog-container/dialog-container.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DialogContainerComponent } from './dialog-container.component'; + +describe('DialogContainerComponent', () => { + let component: DialogContainerComponent; + let fixture: ComponentFixture<DialogContainerComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DialogContainerComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DialogContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/dialog-container/dialog-container.component.ts b/alfa-client/libs/design-system/src/lib/dialog-container/dialog-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3df7faf24a83fb4ed3965b741004cdc53aaeabb6 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/dialog-container/dialog-container.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ods-dialog-container', + standalone: true, + imports: [], + template: ` + <div class="static flex w-[calc(100vw-2rem)] justify-center"> + <div class="flex max-w-4xl grow flex-col rounded-lg bg-background-50 p-6 shadow-md"> + <ng-content /> + </div> + </div> + `, +}) +export class DialogContainerComponent {} diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts index 4a8ddff09949312893bf0faa30b59918d5461ce5..c84948d1e2db9eba1d7cd0071f193f1010ad825e 100644 --- a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts @@ -55,30 +55,31 @@ type TextInputVariants = VariantProps<typeof textInputVariants>; template: ` <div class="relative"> <label *ngIf="showLabel" [for]="id" class="text-md mb-2 block font-medium text-text"> - {{ inputLabel }}<ng-container *ngIf="required"><i aria-hidden="true">*</i></ng-container> + {{ inputLabel }} + <ng-container *ngIf="required"><i aria-hidden="true">*</i></ng-container> </label> - <div class="mt-2"> - <div *ngIf="withPrefix" class="pointer-events-none absolute bottom-2 left-2 flex size-6 items-center justify-center"> - <ng-content select="[prefix]" /> - </div> - <input - #inputElement - type="text" - [id]="id" - [formControl]="fieldControl" - [ngClass]="[textInputVariants({ variant }), withPrefix ? 'pl-10' : '', withSuffix ? 'pr-10' : '']" - [placeholder]="placeholder" - [autocomplete]="autocomplete" - [attr.aria-required]="required" - [attr.aria-invalid]="variant === 'error'" - [attr.data-test-id]="_dataTestId + '-text-input'" - [attr.aria-describedby]="ariaDescribedBy" - (click)="clickEmitter.emit()" - /> - <div *ngIf="withSuffix" class="absolute bottom-2 right-2 flex size-6 items-center justify-center"> - <ng-content select="[suffix]" /> - </div> + + <div *ngIf="withPrefix" class="pointer-events-none absolute bottom-2 left-2 flex size-6 items-center justify-center"> + <ng-content select="[prefix]"/> + </div> + <input + type="text" + [id]="id" + [formControl]="fieldControl" + [ngClass]="[textInputVariants({ variant }), withPrefix ? 'pl-10' : '', withSuffix ? 'pr-10' : '']" + [placeholder]="placeholder" + [autocomplete]="autocomplete" + [attr.aria-required]="required" + [attr.aria-invalid]="variant === 'error'" + [attr.data-test-id]="_dataTestId + '-text-input'" + [attr.aria-describedby]="ariaDescribedBy" + (click)="clickEmitter.emit()" + #inputElement + /> + <div *ngIf="withSuffix" class="absolute bottom-2 right-2 flex size-6 items-center justify-center"> + <ng-content select="[suffix]"/> </div> + <ng-content select="[error]"></ng-content> </div> `, diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item-info/forwarding-item-info.component.spec.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item-info/forwarding-item-info.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa29de43383f328ce1179743c2fb6bbd0b435954 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item-info/forwarding-item-info.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ForwardingItemInfoComponent } from './forwarding-item-info.component'; + +describe('ForwardingItemInfoComponent', () => { + let component: ForwardingItemInfoComponent; + let fixture: ComponentFixture<ForwardingItemInfoComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ForwardingItemInfoComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(ForwardingItemInfoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item-info/forwarding-item-info.component.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item-info/forwarding-item-info.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..abace4dec64981bfc6fd2e5cd8e3c66abeca881e --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item-info/forwarding-item-info.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'ods-forwarding-item-info', + standalone: true, + template: `<p class="font-medium">{{ label }}</p> + <p>{{ address }}</p>`, +}) +export class ForwardingItemInfoComponent { + @Input({ required: true }) label!: string; + @Input({ required: true }) address!: string; +} diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts index 7f8ebfd800c662910c5ec0905935c3d12487b7f3..e1322cfcdef6610df2a458541bcd3436fc12d7d2 100644 --- a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts +++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts @@ -21,7 +21,6 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import { ForwardVorgangIconComponent } from '../icons/forward-vorgang-icon/forward-vorgang-icon.component'; @@ -33,25 +32,18 @@ export enum ForwardingDirection { @Component({ selector: 'ods-forwarding-item', standalone: true, - imports: [CommonModule, ForwardVorgangIconComponent], - template: `<div - class="flex flex-col items-start justify-between gap-2 rounded-lg border border-grayborder p-3 md:flex-row md:items-center md:gap-0" - > - <div class="flex gap-3"> - <ods-forward-vorgang-icon class="fill-text" /> - <p class="text-gray-500">{{ direction }}:</p> - <div> - <p class="font-medium">{{ label }}</p> - <p>{{ address }}</p> + imports: [ForwardVorgangIconComponent], + template: ` <div class="h-full rounded-lg border border-grayborder"> + <div class="flex flex-col gap-3 p-3 align-top sm:flex-row"> + <div class="flex gap-3"> + <ods-forward-vorgang-icon class="fill-text" /> + <div class="font-medium text-gray-500">{{ direction }}:</div> </div> - </div> - <div class="text-end empty:hidden"> - <ng-content /> + <div class="grow"><ng-content /></div> + <div class="flex items-center"><ng-content select="[end-content]" /></div> </div> </div>`, }) export class ForwardingItemComponent { - @Input({ required: true }) label!: string; - @Input({ required: true }) address!: string; @Input() direction: ForwardingDirection = ForwardingDirection.TO; } diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts index 53d2116e9f314c9e2194cd8a9ff7c72e39dd1b12..d70b202b1147e34a030258198844ac19afc7b1b6 100644 --- a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts +++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts @@ -24,11 +24,9 @@ import { argsToTemplate, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; import { ButtonComponent } from '../button/button.component'; +import { ForwardingItemInfoComponent } from './forwarding-item-info/forwarding-item-info.component'; import { ForwardingDirection, ForwardingItemComponent } from './forwarding-item.component'; -const label: string = 'Bund für Umwelt und Naturschutz Kreisgruppe Kiel'; -const address: string = 'Kaiserstraße 25, 12443 Kiel'; - const meta: Meta<ForwardingItemComponent> = { title: 'Forwarding item', component: ForwardingItemComponent, @@ -41,7 +39,7 @@ const meta: Meta<ForwardingItemComponent> = { }, decorators: [ moduleMetadata({ - imports: [ForwardingItemComponent, ButtonComponent], + imports: [ForwardingItemComponent, ForwardingItemInfoComponent, ButtonComponent], }), ], excludeStories: /.*Data$/, @@ -53,40 +51,39 @@ type Story = StoryObj<ForwardingItemComponent>; export const Default: Story = { args: { - label: label, - address: address, direction: ForwardingDirection.TO, }, argTypes: { direction: { control: 'select', options: [ForwardingDirection.TO, ForwardingDirection.FROM] }, }, + render: () => ({ + template: `<ods-forwarding-item> + <ods-forwarding-item-info label="Bund für Umwelt und Naturschutz Kreisgruppe Kiel" address="Kaiserstraße 25, 12443 Kiel" /> + </ods-forwarding-item>`, + }), }; export const WithButton: Story = { - args: { - label: label, - address: address, - }, - - render: (args: ForwardingItemComponent) => ({ - props: args, - template: `<ods-forwarding-item ${argsToTemplate(args)}> - <ods-button variant="outline" text="Stelle ändern" /> + render: () => ({ + template: `<ods-forwarding-item> + <ods-forwarding-item-info label="Bund für Umwelt und Naturschutz Kreisgruppe Kiel" address="Kaiserstraße 25, 12443 Kiel" /> + <ods-button variant="outline" text="Stelle ändern" end-content /> </ods-forwarding-item>`, }), }; export const WithCreationInfo: Story = { args: { - label: label, - address: address, direction: ForwardingDirection.FROM, }, render: (args: ForwardingItemComponent) => ({ props: args, template: `<ods-forwarding-item ${argsToTemplate(args)}> - <p>20. Dez. 09:35</p> - <p class="text-sm">Karin Wanowski-Müller</p> + <ods-forwarding-item-info label="Bund für Umwelt und Naturschutz Kreisgruppe Kiel" address="Kaiserstraße 25, 12443 Kiel" /> + <div end-content> + <p>20. Dez. 09:35</p> + <p class="text-sm">Karin Wanowski-Müller</p> + </div> </ods-forwarding-item>`, }), }; diff --git a/alfa-client/libs/design-system/src/lib/icons/spinner-icon/spinner-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/spinner-icon/spinner-icon.component.ts index d361292b08e026c2f05e245276dae53b82fa2805..20ca2f1c2affe64e1a2aab8b81576c2c40a68e3e 100644 --- a/alfa-client/libs/design-system/src/lib/icons/spinner-icon/spinner-icon.component.ts +++ b/alfa-client/libs/design-system/src/lib/icons/spinner-icon/spinner-icon.component.ts @@ -24,6 +24,7 @@ import { NgClass } from '@angular/common'; import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; import { IconVariants, iconVariants } from '../iconVariants'; @Component({ @@ -33,8 +34,7 @@ import { IconVariants, iconVariants } from '../iconVariants'; template: ` <svg xmlns="http://www.w3.org/2000/svg" - [ngClass]="iconVariants({ size })" - class="animate-spin fill-primary text-gray-200 dark:text-gray-600" + [ngClass]="twMerge('animate-spin fill-primary text-gray-200 dark:text-gray-600', iconVariants({ size }), class)" aria-hidden="true" viewBox="0 0 100 100" fill="none" @@ -53,6 +53,8 @@ import { IconVariants, iconVariants } from '../iconVariants'; }) export class SpinnerIconComponent { @Input() size: IconVariants['size'] = 'full'; + @Input() class: string; - iconVariants = iconVariants; + readonly iconVariants = iconVariants; + readonly twMerge = twMerge; } diff --git a/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts b/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts index 48a8a502165e5795ba32bd93485def62486d4de9..73cf86fa263ec18bad66efdb06b5ad28e6b48041 100644 --- a/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts +++ b/alfa-client/libs/design-system/src/lib/instant-search/instant-search/instant-search.component.ts @@ -71,7 +71,7 @@ import { InstantSearchQuery, InstantSearchResult } from './instant-search.model' <ods-aria-live-region [text]="ariaLiveText" /> <ods-search-result-layer *ngIf="results.length && areResultsVisible" - containerClass="absolute z-50 mt-3 max-h-[calc(50vh)] w-full overflow-y-auto" + containerClass="absolute z-50 mt-3 max-h-[calc(37vh)] w-full overflow-y-auto" id="results" > <ods-search-result-header *ngIf="headerText" [text]="headerText" [count]="results.length" header /> diff --git a/alfa-client/libs/design-system/src/lib/instant-search/search-result-item/search-result-item.component.ts b/alfa-client/libs/design-system/src/lib/instant-search/search-result-item/search-result-item.component.ts index 3f5364877b5c08806ff6990851a7863abdcd74a5..3d765154891b5f39c3168a8a07e39c973eee840b 100644 --- a/alfa-client/libs/design-system/src/lib/instant-search/search-result-item/search-result-item.component.ts +++ b/alfa-client/libs/design-system/src/lib/instant-search/search-result-item/search-result-item.component.ts @@ -32,7 +32,7 @@ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@ *ngIf="title" [ngClass]="[ 'flex w-full justify-between border-2 border-transparent px-6 py-3', - 'hover:border-focus focus:border-focus focus:outline-none', + 'hover:bg-background-150 focus:border-focus focus:outline-none', ]" role="listitem" tabindex="-1" diff --git a/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css b/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css index a3c8f7b01b5e1b8342761bf3190841ef059b5cc8..333257d60e54034a148f8f864ae42132d1a7643e 100644 --- a/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css +++ b/alfa-client/libs/design-system/src/lib/tailwind-preset/root.css @@ -18,6 +18,7 @@ --color-disabled: 206 14% 95%; --color-disabled-dark: 208 12% 65%; + --color-disabled-button: 0 0% 42%; --color-destructive: 360, 71%, 49%, 1; --color-destructive-hover: 360, 71%, 49%, 0.07; @@ -59,6 +60,7 @@ --color-disabled: 206 14% 15%; --color-disabled-dark: 208 12% 33%; + --color-disabled-button: 0 0% 68%; --color-destructive: 360, 71%, 49%, 1; --color-destructive-hover: 360, 71%, 49%, 0.2; diff --git a/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js b/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js index cf2abfcb2f32821bcb410f4d9bcd817f2aa2efb0..9c5ba7a4e53f673e8ac6c1b27e08f63936647d7f 100644 --- a/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js +++ b/alfa-client/libs/design-system/src/lib/tailwind-preset/tailwind.config.js @@ -146,6 +146,7 @@ module.exports = { focus: 'hsl(var(--color-focus))', disabled: { dark: 'hsl(var(--color-disabled-dark) / <alpha-value>)', + button: 'hsl(var(--color-disabled-button) / <alpha-value>)', DEFAULT: 'hsl(var(--color-disabled) / <alpha-value>)', }, destructive: 'hsla(var(--color-destructive))', diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.html b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.html index 5bf44a14c8978d8fea1e07d51b0ccc1279935ca4..6995cd3356290db9eb8f6011c21e013009b29734 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.html +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.html @@ -1,11 +1,12 @@ <ods-button-with-spinner [stateResource]="stateResource" [disabled]="disabled" + [tooltip]="tooltip" (clickEmitter)="clickEmitter.emit()" - text="Weiterleiten" - variant="outline" + text="Jetzt weiterleiten" + tooltipPosition="above" dataTestId="forwarding-dialog-forwarding-button" data-test-id="forwarding-button-container" > - <ods-forward-vorgang-icon icon class="fill-primary" /> + <ods-forward-vorgang-icon icon class="fill-whitetext" /> </ods-button-with-spinner> diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.spec.ts index 9e9a9d2118e1a9758f7ba58715f822822ead4cbf..661105c1ad208f595ae5b3f7f1158e0529d9fe2f 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.spec.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.spec.ts @@ -1,3 +1,4 @@ +import { EMPTY_STRING } from '@alfa-client/tech-shared'; import { dispatchEventFromFixture, MockEvent } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ButtonWithSpinnerComponent } from '@ods/component'; @@ -27,13 +28,31 @@ describe('ForwardingButtonComponent', () => { expect(component).toBeTruthy(); }); - describe('on button click', () => { - it('should emit', () => { - component.clickEmitter.emit = jest.fn(); + describe('component', () => { + describe('set disabled', () => { + it('should set tooltip text', () => { + component.disabled = true; - dispatchEventFromFixture(fixture, button, MockEvent.CLICK); + expect(component.tooltip).not.toBe(EMPTY_STRING); + }); - expect(component.clickEmitter.emit).toHaveBeenCalled(); + it('should set empty tooltip', () => { + component.disabled = false; + + expect(component.tooltip).toBe(EMPTY_STRING); + }); + }); + }); + + describe('template', () => { + describe('on button click', () => { + it('should emit', () => { + component.clickEmitter.emit = jest.fn(); + + dispatchEventFromFixture(fixture, button, MockEvent.CLICK); + + expect(component.clickEmitter.emit).toHaveBeenCalled(); + }); }); }); }); diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.ts index 767fe5e4ce40e7589725973d37e9a84c12fd0564..e881014e936c13d57632ed0c9d059093bcb1d76a 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-button/forwarding-button.component.ts @@ -1,18 +1,28 @@ import { CommandResource } from '@alfa-client/command-shared'; -import { StateResource } from '@alfa-client/tech-shared'; +import { EMPTY_STRING, StateResource } from '@alfa-client/tech-shared'; import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ButtonWithSpinnerComponent } from '@ods/component'; -import { ForwardVorgangIconComponent } from '@ods/system'; +import { ForwardVorgangIconComponent, TooltipDirective } from '@ods/system'; @Component({ selector: 'alfa-forwarding-button', standalone: true, - imports: [ButtonWithSpinnerComponent, ForwardVorgangIconComponent], + imports: [ButtonWithSpinnerComponent, ForwardVorgangIconComponent, TooltipDirective], templateUrl: './forwarding-button.component.html', }) export class ForwardingButtonComponent { - @Input() disabled: boolean; + @Input() set disabled(value: boolean) { + this._disabled = value; + this.tooltip = value ? 'Bitte ein Amt oder Stelle auswählen' : EMPTY_STRING; + } @Input() stateResource: StateResource<CommandResource>; @Output() clickEmitter: EventEmitter<void> = new EventEmitter(); + + public tooltip: string; + private _disabled: boolean; + + get disabled() { + return this._disabled; + } } diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.html b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.html index 5aaf99a340455262073812254cf8c7d74adf578e..54327bb8b611751959f462fc5415b16e0fcde6d7 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.html +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.html @@ -1,22 +1,25 @@ -<div class="flex w-[620px] max-w-full flex-col gap-4 bg-background-100 p-8"> - <div class="flex items-center justify-between"> - <h1 class="text-xl font-semibold text-primary">Vorgang weiterleiten</h1> - <ods-cancel-dialog-button showAsIconButton="true" /> - </div> - - @if (!selectedSearchResult) { - <alfa-search-zustaendige-stelle-form-container cdkFocusInitial focusOnSearchField="true" data-test-id="zufi-search" /> - } @else { - <alfa-forwarding-item-in-dialog [organisationsEinheitResource]="selectedSearchResult" data-test-id="forwarding-item" /> - } +<ods-dialog-container> + <div class="flex grow flex-col gap-6"> + <div class="flex items-center justify-between"> + <h1 class="text-lg font-medium text-primary">Vorgang weiterleiten</h1> + <ods-cancel-dialog-button showAsIconButton="true" /> + </div> + <div class="h-[calc(37vh+4.5rem)] grow"> + @if (!selectedSearchResult) { + <alfa-forwarding-search-organisations-einheit cdkFocusInitial data-test-id="organisations-einheit-search" /> + } @else { + <alfa-selected-search-item [organisationsEinheitResource]="selectedSearchResult" data-test-id="selected-search-item" /> + } + </div> - <div class="flex gap-4"> - <alfa-forwarding-button - [stateResource]="forwardCommandStateResource" - [disabled]="!selectedSearchResult" - (clickEmitter)="onForwarding()" - data-test-id="foward-dialog-forward-button" - /> - <ods-cancel-dialog-button /> + <div class="flex gap-4"> + <alfa-forwarding-button + [stateResource]="forwardCommandStateResource" + [disabled]="!selectedSearchResult" + (clickEmitter)="onForwarding()" + data-test-id="foward-dialog-forward-button" + /> + <ods-cancel-dialog-button /> + </div> </div> -</div> +</ods-dialog-container> diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.spec.ts index 7e6114236be2ad7d2dddfcdfd309853b32568cdd..be35437daced36c2d43a532852f0d78cbc4fa8b9 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.spec.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.spec.ts @@ -5,35 +5,36 @@ import { MockEvent, notExistsAsHtmlElement, } from '@alfa-client/test-utils'; -import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle'; import { OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { getUrl } from '@ngxp/rest'; import { CancelDialogButtonComponent } from '@ods/component'; -import { MockComponent, MockModule } from 'ng-mocks'; +import { MockComponent } from 'ng-mocks'; import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test'; import { createOrganisationsEinheitResource } from '../../../../../zustaendige-stelle-shared/test/organisations-einheit'; import { ForwardingButtonComponent } from './forwarding-button/forwarding-button.component'; import { ForwardingDialogComponent } from './forwarding-dialog.component'; -import { ForwardingItemInDialogComponent } from './forwarding-item/forwarding-item.component'; +import { SelectedSearchItemComponent } from './selected-search-item/selected-search-item.component'; +import { ForwardingSearchOrganisationsEinheitComponent } from './search-organisations-einheit/search-organisations-einheit.component'; describe('ForwardingDialogComponent', () => { let component: ForwardingDialogComponent; let fixture: ComponentFixture<ForwardingDialogComponent>; - const zufiSearch: string = getDataTestIdOf('zufi-search'); - const forwardingItem: string = getDataTestIdOf('forwarding-item'); + const organisationsEinheitSearch: string = getDataTestIdOf('organisations-einheit-search'); + const selectedSearchItem: string = getDataTestIdOf('selected-search-item'); const forwardButton: string = getDataTestIdOf('foward-dialog-forward-button'); const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ForwardingDialogComponent], declarations: [ MockComponent(CancelDialogButtonComponent), MockComponent(ForwardingButtonComponent), - MockComponent(ForwardingItemInDialogComponent), - MockModule(ZustaendigeStelleModule), + MockComponent(SelectedSearchItemComponent), + MockComponent(ForwardingSearchOrganisationsEinheitComponent), ], }).compileComponents(); @@ -53,7 +54,7 @@ describe('ForwardingDialogComponent', () => { fixture.detectChanges(); - existsAsHtmlElement(fixture, zufiSearch); + existsAsHtmlElement(fixture, organisationsEinheitSearch); }); it('should NOT render if selectedSearchResult is NOT null', () => { @@ -61,7 +62,7 @@ describe('ForwardingDialogComponent', () => { fixture.detectChanges(); - notExistsAsHtmlElement(fixture, zufiSearch); + notExistsAsHtmlElement(fixture, organisationsEinheitSearch); }); }); }); @@ -78,7 +79,7 @@ describe('ForwardingDialogComponent', () => { fixture.detectChanges(); - existsAsHtmlElement(fixture, forwardingItem); + existsAsHtmlElement(fixture, selectedSearchItem); }); it('should NOT render if selectedSearchResult is null', () => { @@ -86,7 +87,7 @@ describe('ForwardingDialogComponent', () => { fixture.detectChanges(); - notExistsAsHtmlElement(fixture, forwardingItem); + notExistsAsHtmlElement(fixture, selectedSearchItem); }); }); diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.ts index 178d84465273bc421ee5bd9a49dca84d213cb299..9ff338f0a8f472af342aa6ccd809b3dcbcfca407 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-dialog.component.ts @@ -7,8 +7,10 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { getUrl, ResourceUri } from '@ngxp/rest'; import { CancelDialogButtonComponent } from '@ods/component'; +import { DialogContainerComponent } from '@ods/system'; import { ForwardingButtonComponent } from './forwarding-button/forwarding-button.component'; -import { ForwardingItemInDialogComponent } from './forwarding-item/forwarding-item.component'; +import { SelectedSearchItemComponent } from './selected-search-item/selected-search-item.component'; +import { ForwardingSearchOrganisationsEinheitComponent } from './search-organisations-einheit/search-organisations-einheit.component'; @Component({ selector: 'alfa-forwarding-dialog', @@ -19,7 +21,9 @@ import { ForwardingItemInDialogComponent } from './forwarding-item/forwarding-it ReactiveFormsModule, ZustaendigeStelleModule, ForwardingButtonComponent, - ForwardingItemInDialogComponent, + ForwardingSearchOrganisationsEinheitComponent, + SelectedSearchItemComponent, + DialogContainerComponent, ], templateUrl: './forwarding-dialog.component.html', }) diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.html b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.html deleted file mode 100644 index bd41e43d6a1c75eb03bca208ca264c7553aaa5a8..0000000000000000000000000000000000000000 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.html +++ /dev/null @@ -1,3 +0,0 @@ -<ods-forwarding-item [label]="organisationsEinheitResource.name" [address]="organisationsEinheitResource.anschrift | anschriftToString" > - <alfa-forwarding-item-change-button-container /> -</ods-forwarding-item> \ No newline at end of file diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.spec.ts deleted file mode 100644 index b8ffb55d8ab7ff80771ddd8cdd2d1e6611dbe459..0000000000000000000000000000000000000000 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { getMockComponent } from '@alfa-client/test-utils'; -import { Anschrift, OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; -import { ForwardingItemComponent } from '@ods/system'; -import { MockComponent } from 'ng-mocks'; -import { createOrganisationsEinheitResource } from '../../../../../../zustaendige-stelle-shared/test/organisations-einheit'; -import { ForwardingItemChangeButtonContainerComponent } from './forwarding-item-change-button-container/forwarding-item-change-button-container.component'; -import { ForwardingItemInDialogComponent } from './forwarding-item.component'; - -describe('ForwardingDialogForwardingItemComponent', () => { - let component: ForwardingItemInDialogComponent; - let fixture: ComponentFixture<ForwardingItemInDialogComponent>; - - const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); - const anschrift: Anschrift = organisationsEinheitResource.anschrift; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ForwardingItemInDialogComponent], - declarations: [MockComponent(ForwardingItemChangeButtonContainerComponent), MockComponent(ForwardingItemComponent)], - }).compileComponents(); - - fixture = TestBed.createComponent(ForwardingItemInDialogComponent); - component = fixture.componentInstance; - component.organisationsEinheitResource = organisationsEinheitResource; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('forwarding item', () => { - it('should exist with input', () => { - const forwardingItem: ForwardingItemComponent = getMockComponent(fixture, ForwardingItemComponent); - - expect(forwardingItem.label).toBe(organisationsEinheitResource.name); - expect(forwardingItem.address).toBe(`${anschrift.strasse} ${anschrift.hausnummer}, ${anschrift.plz} ${anschrift.ort}`); - }); - }); -}); diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.ts deleted file mode 100644 index 9828f682d8860e851cc15cde31fef24150120f4a..0000000000000000000000000000000000000000 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { AnschriftToStringPipe, OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; -import { Component, Input } from '@angular/core'; -import { ForwardingItemComponent } from '@ods/system'; -import { ForwardingItemChangeButtonContainerComponent } from './forwarding-item-change-button-container/forwarding-item-change-button-container.component'; - -@Component({ - selector: 'alfa-forwarding-item-in-dialog', - standalone: true, - imports: [ForwardingItemChangeButtonContainerComponent, AnschriftToStringPipe, ForwardingItemComponent], - templateUrl: './forwarding-item.component.html', -}) -export class ForwardingItemInDialogComponent { - @Input() organisationsEinheitResource: OrganisationsEinheitResource; -} diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.html b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.html new file mode 100644 index 0000000000000000000000000000000000000000..410a1ed8605cd28872a594b69559885e6e707d5d --- /dev/null +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.html @@ -0,0 +1,3 @@ +<ods-forwarding-item> + <alfa-search-zustaendige-stelle-form-container focusOnSearchField="true"/> +</ods-forwarding-item> \ No newline at end of file diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..84b088454368fd60b3f91e74363ce1aadae01ee0 --- /dev/null +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle'; +import { ForwardingItemComponent } from '@ods/system'; +import { MockComponent, MockModule } from 'ng-mocks'; +import { ForwardingSearchOrganisationsEinheitComponent } from './search-organisations-einheit.component'; + +describe('ForwardingSearchOrganisationsEinheitComponent', () => { + let component: ForwardingSearchOrganisationsEinheitComponent; + let fixture: ComponentFixture<ForwardingSearchOrganisationsEinheitComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ForwardingSearchOrganisationsEinheitComponent], + declarations: [MockComponent(ForwardingItemComponent), MockModule(ZustaendigeStelleModule)], + }).compileComponents(); + + fixture = TestBed.createComponent(ForwardingSearchOrganisationsEinheitComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc974a66d4a87b9d32b81acf1e8eff03d5f40430 --- /dev/null +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/search-organisations-einheit/search-organisations-einheit.component.ts @@ -0,0 +1,11 @@ +import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle'; +import { Component } from '@angular/core'; +import { ForwardingItemComponent } from '@ods/system'; + +@Component({ + selector: 'alfa-forwarding-search-organisations-einheit', + standalone: true, + imports: [ForwardingItemComponent, ZustaendigeStelleModule], + templateUrl: './search-organisations-einheit.component.html', +}) +export class ForwardingSearchOrganisationsEinheitComponent {} diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.html b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.html similarity index 100% rename from alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.html rename to alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.html diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.spec.ts similarity index 79% rename from alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.spec.ts rename to alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.spec.ts index 49e50eaa845262e74914cd7f4717c66e549ca924..86ce46346d2fa0592dc93cc2c83c75f3f4512d83 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.spec.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.spec.ts @@ -5,11 +5,11 @@ import { OrganisationsEinheitService, ZUSTAENDIGE_STELLE_SERVICE } from '@alfa-c import { ButtonComponent } from '@ods/system'; import { MockComponent } from 'ng-mocks'; import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test'; -import { ForwardingItemChangeButtonContainerComponent } from './forwarding-item-change-button-container.component'; +import { ChangeButtonContainerComponent } from './change-button-container.component'; describe('ForwardingItemChangeButtonContainerComponent', () => { - let component: ForwardingItemChangeButtonContainerComponent; - let fixture: ComponentFixture<ForwardingItemChangeButtonContainerComponent>; + let component: ChangeButtonContainerComponent; + let fixture: ComponentFixture<ChangeButtonContainerComponent>; const buttonContainer: string = getDataTestIdOf('forwarding-item-change-button-container'); @@ -19,12 +19,12 @@ describe('ForwardingItemChangeButtonContainerComponent', () => { service = mock(OrganisationsEinheitService); TestBed.configureTestingModule({ - imports: [ForwardingItemChangeButtonContainerComponent], + imports: [ChangeButtonContainerComponent], declarations: [MockComponent(ButtonComponent)], providers: [{ provide: ZUSTAENDIGE_STELLE_SERVICE, useValue: service }], }).compileComponents(); - fixture = TestBed.createComponent(ForwardingItemChangeButtonContainerComponent); + fixture = TestBed.createComponent(ChangeButtonContainerComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.ts similarity index 71% rename from alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.ts rename to alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.ts index 5a0ca9ccbe7730e0eb8d54ef013b17d12719b0ec..549bd4342b5c274724a0a55a6fdde303d1209d69 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/forwarding-item/forwarding-item-change-button-container/forwarding-item-change-button-container.component.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/change-button-container/change-button-container.component.ts @@ -3,12 +3,12 @@ import { Component, inject } from '@angular/core'; import { ButtonComponent } from '@ods/system'; @Component({ - selector: 'alfa-forwarding-item-change-button-container', + selector: 'alfa-change-button-container', standalone: true, imports: [ButtonComponent], - templateUrl: './forwarding-item-change-button-container.component.html', + templateUrl: './change-button-container.component.html', }) -export class ForwardingItemChangeButtonContainerComponent { +export class ChangeButtonContainerComponent { private readonly organisationsEinheitService = inject(ZUSTAENDIGE_STELLE_SERVICE) as OrganisationsEinheitService; public onClick(): void { diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.html b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.html new file mode 100644 index 0000000000000000000000000000000000000000..66f8b9cac15d60112010465b2632f3e607b0dfa7 --- /dev/null +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.html @@ -0,0 +1,7 @@ +<ods-forwarding-item class="block"> + <ods-forwarding-item-info + [label]="organisationsEinheitResource.name" + [address]="organisationsEinheitResource.anschrift | anschriftToString" + /> + <alfa-change-button-container end-content /> +</ods-forwarding-item> diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..c95fd052a78482a1a5aa3a15a60e3e3cd0b35ec3 --- /dev/null +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.spec.ts @@ -0,0 +1,46 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { getMockComponent } from '@alfa-client/test-utils'; +import { Anschrift, OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; +import { ForwardingItemComponent, ForwardingItemInfoComponent } from '@ods/system'; +import { MockComponent } from 'ng-mocks'; +import { createOrganisationsEinheitResource } from '../../../../../../zustaendige-stelle-shared/test/organisations-einheit'; +import { ChangeButtonContainerComponent } from './change-button-container/change-button-container.component'; +import { SelectedSearchItemComponent } from './selected-search-item.component'; + +describe('ForwardingSearchOrganisationsEinheitComponent', () => { + let component: SelectedSearchItemComponent; + let fixture: ComponentFixture<SelectedSearchItemComponent>; + + const organisationsEinheitResource: OrganisationsEinheitResource = createOrganisationsEinheitResource(); + const anschrift: Anschrift = organisationsEinheitResource.anschrift; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SelectedSearchItemComponent], + declarations: [ + MockComponent(ChangeButtonContainerComponent), + MockComponent(ForwardingItemComponent), + MockComponent(ForwardingItemInfoComponent), + ], + }).compileComponents(); + + fixture = TestBed.createComponent(SelectedSearchItemComponent); + component = fixture.componentInstance; + component.organisationsEinheitResource = organisationsEinheitResource; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('forwarding item info', () => { + it('should exist with input', () => { + const forwardingItemInfo: ForwardingItemInfoComponent = getMockComponent(fixture, ForwardingItemInfoComponent); + + expect(forwardingItemInfo.label).toBe(organisationsEinheitResource.name); + expect(forwardingItemInfo.address).toBe(`${anschrift.strasse} ${anschrift.hausnummer}, ${anschrift.plz} ${anschrift.ort}`); + }); + }); +}); diff --git a/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.ts b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c40737820507149807e1fe17be6de8a6033b6e6d --- /dev/null +++ b/alfa-client/libs/forwarding/src/lib/forwarding-dialog-container/forwarding-dialog/selected-search-item/selected-search-item.component.ts @@ -0,0 +1,14 @@ +import { AnschriftToStringPipe, OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; +import { Component, Input } from '@angular/core'; +import { ForwardingItemComponent, ForwardingItemInfoComponent } from '@ods/system'; +import { ChangeButtonContainerComponent } from './change-button-container/change-button-container.component'; + +@Component({ + selector: 'alfa-selected-search-item', + standalone: true, + imports: [ChangeButtonContainerComponent, AnschriftToStringPipe, ForwardingItemComponent, ForwardingItemInfoComponent], + templateUrl: './selected-search-item.component.html', +}) +export class SelectedSearchItemComponent { + @Input() organisationsEinheitResource: OrganisationsEinheitResource; +} diff --git a/alfa-client/package.json b/alfa-client/package.json index d6a7bffddc6984305f4bc77149fa653d2083dfd3..d4e51a736a56e6aebfb6e3c8943ca998363833d7 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -17,9 +17,9 @@ "test:lib": "nx test ${npm_config_lib}", "test:debug:lib": "nx test ${npm_config_lib} --detectOpenHandles --watchAll", "ci-build": "nx run alfa:build --outputHashing=all", - "ci-build-admin": "nx container admin", + "ci-build-administration": "nx container admin", "ci-prodBuild": "nx run alfa:build --outputHashing=all --configuration production", - "ci-prodBuild-admin": "nx container admin", + "ci-prodBuild-administration": "nx container admin", "ci-test": "nx run-many --target=test --parallel 20 -- --runInBand", "ci-sonar": "nx run-many --target=test --parallel 20 -- --runInBand --codeCoverage --coverageReporters=lcov --testResultsProcessor=jest-sonar-reporter && pnpm exec sonar-scanner", "lint": "nx workspace-lint && nx lint",