diff --git a/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java b/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java index 510b7c92779fa39758cf3da4855a7af4dec20fe1..29b9ca971b5aa597a7df76abdc2537562202ad59 100644 --- a/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java +++ b/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java @@ -5,6 +5,7 @@ import java.time.LocalDate; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.stereotype.Component; +import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @Component @@ -17,10 +18,17 @@ public class VorgangNummerSupplier { static final int SUFFIX_LENGTH = 6; public String get() { + return get(SUFFIX_LENGTH); + } + + public String get(int suffixLength) { + if (suffixLength <1){ + throw new TechnicalException("Suffix length must be at least 1"); + } var today = LocalDate.now(); var lastYearNumber = today.getYear() % 10; return VORGANGNUMMER_TEMPLATE.formatted(lastYearNumber, today.getMonthValue(), today.getDayOfMonth(), - RandomStringUtils.random(SUFFIX_LENGTH, BASE30_ALPHABET)); + RandomStringUtils.random(suffixLength, BASE30_ALPHABET)); } } diff --git a/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java b/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java index 2fc9a524f5e23d2bebd9721eb5612d96ad879782..fa604a63010e2b45ef5fb16d76438c870ced4603 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java @@ -1,18 +1,20 @@ package de.ozgcloud.eingang.common.vorgang; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; import java.time.LocalDate; -import java.util.Random; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.Spy; -import org.springframework.test.util.ReflectionTestUtils; + +import de.ozgcloud.common.errorhandling.TechnicalException; class VorgangNummerSupplierTest { @@ -26,7 +28,25 @@ class VorgangNummerSupplierTest { void shouldAddSuffix() { var result = vorgangNummerSupplier.get(); - assertThat(result).hasSize(11); + assertThat(getSuffix(result)).hasSize(VorgangNummerSupplier.SUFFIX_LENGTH); + } + + @Test + void shouldHaveSuffixSize() { + var result = vorgangNummerSupplier.get(3); + + assertThat(getSuffix(result)).hasSize(3); + } + + @DisplayName("should throw exception when") + @ParameterizedTest(name = "suffix length {0}") + @ValueSource(ints = { -1, 0 }) + void shouldThrowException(int suffixLength) { + assertThrows(TechnicalException.class, () -> vorgangNummerSupplier.get(suffixLength)); + } + + private String getSuffix(String string) { + return string.substring(string.indexOf('-') + 1); } @Test diff --git a/run_helm_test.sh b/run_helm_test.sh index 76ae9ac809e2a17d7c58020c0cff75be781f1e48..3e37c7fcde941bda9e3456c45c299dd62c1ecda5 100755 --- a/run_helm_test.sh +++ b/run_helm_test.sh @@ -4,4 +4,4 @@ set -e helm template ./src/main/helm/ -f src/test/helm-linter-values.yaml helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/ -cd src/main/helm && helm unittest -f '../../test/helm/*.yaml' -v '../../test/unit-values.yaml' . \ No newline at end of file +cd src/main/helm && helm unittest -f '../../test/helm/*.yaml' . \ No newline at end of file diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index 410348cb151bd9c0ab6eb1d4a9a3eaf9cd6cb7e5..0915f0f2372d26b4dab57e0c2aa3a25dae0b6b08 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -1,45 +1,44 @@ {{/* vim: set filetype=mustache: */}} -{{/* Truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} -{{/* Name */}} -{{- define "app.name" -}} -{{- default .Release.Name | toString | trunc 63 | trimSuffix "-" -}} -{{- end -}} - +{{/* error check 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} {{/* Namespace */}} {{- define "app.namespace" -}} -{{- default .Release.Namespace | toString | trunc 63 | trimSuffix "-" -}} +{{- if gt (len (.Release.Namespace)) 63 -}} +{{- fail (printf ".Release.Namespace %s ist zu lang (max. 63 Zeichen)" .Release.Namespace) -}} {{- end -}} - -{{/* Version */}} -{{- define "app.version" -}} -{{- default .Chart.Version | toString | trunc 63 | trimSuffix "-" -}} +{{ printf "%s" .Release.Namespace }} {{- end -}} {{/* Chart: Name + Version */}} {{- define "app.chart" -}} -{{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- if gt (len (printf "%s-%s" .Chart.Name .Chart.Version)) 63 -}} +{{- fail (printf ".Chart.Name-.Chart.Version %s-%s ist zu lang (max. 63 Zeichen)" .Chart.Name .Chart.Version) -}} +{{- end -}} +{{ printf "%s-%s" .Chart.Name .Chart.Version }} {{- end -}} {{/* Managed-by -> On Helm, this value is always Helm */}} {{- define "app.managedBy" -}} -{{- default .Release.Service | toString | trunc 63 | trimSuffix "-" -}} +{{- if gt (len (.Release.Service)) 63 -}} +{{- fail (printf ".Release.Service %s ist zu lang (max. 63 Zeichen)" .Release.Service) -}} +{{- end -}} +{{ printf "%s" .Release.Service }} {{- end -}} {{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} {{- define "app.defaultLabels" }} app.kubernetes.io/instance: afm-adapter app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} -app.kubernetes.io/name: {{ include "app.name" . }} +app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/part-of: ozgcloud -app.kubernetes.io/version: {{ include "app.version" . }} +app.kubernetes.io/version: {{ .Chart.Version }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} helm.sh/chart: {{ include "app.chart" . }} ozg-component: eingangsadapter {{- end -}} {{- define "app.matchLabels" }} -app.kubernetes.io/name: {{ include "app.name" . }} +app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- end -}} diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index c6aa75141309794cf147ab2b26cd8f9ff599a0c4..25aac6555744ac684adeebce207ec3591d9a5831 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -25,7 +25,7 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} @@ -56,7 +56,7 @@ spec: whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: - app.kubernetes.io/name: {{ include "app.name" . }} + app.kubernetes.io/name: {{ .Release.Name }} containers: - env: {{- range (.Values.env).grpc }} @@ -159,7 +159,7 @@ spec: {{- if .Values.imagePullSecret }} - name: {{ .Values.imagePullSecret }} {{ else }} - - name: {{ include "app.name" . }}-image-pull-secret + - name: {{ .Release.Name }}-image-pull-secret {{- end }} restartPolicy: Always {{- with .Values.hostAliases }} diff --git a/src/main/helm/templates/image-pull-secret.yaml b/src/main/helm/templates/image-pull-secret.yaml index 9ac29e90a738d57e16307c8335a60c032134f1c8..327b37f8b27d39d926ae1a67d6ef35701b9852e8 100644 --- a/src/main/helm/templates/image-pull-secret.yaml +++ b/src/main/helm/templates/image-pull-secret.yaml @@ -26,7 +26,7 @@ apiVersion: v1 kind: Secret metadata: - name: {{ include "app.name" . }}-image-pull-secret + name: {{ .Release.Name }}-image-pull-secret namespace: {{ include "app.namespace" . }} type: kubernetes.io/dockerconfigjson data: diff --git a/src/main/helm/templates/ingress.yaml b/src/main/helm/templates/ingress.yaml index c03c83992ec0a80c726b4c5ea0f5c05a058cdb50..fa2ba46fea9549d096b59469ce9a3ac821883986 100644 --- a/src/main/helm/templates/ingress.yaml +++ b/src/main/helm/templates/ingress.yaml @@ -37,7 +37,7 @@ metadata: cert-manager.io/cluster-issuer: letsencrypt-prod {{- end }} {{- end }} - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} spec: {{- if and (.Values.ingress).className }} @@ -50,7 +50,7 @@ spec: service: port: number: 8080 - name: {{ include "app.name" . }} + name: {{ .Release.Name }} path: '' pathType: ImplementationSpecific host: {{ include "app.ingress.host" . }} @@ -61,7 +61,7 @@ spec: {{- if (.Values.ingress).tlsSecretName }} secretName: {{ (.Values.ingress).tlsSecretName }} {{- else }} - secretName: {{ .Values.ozgcloud.bezeichner }}-{{ include "app.name" . }}-tls + secretName: {{ .Values.ozgcloud.bezeichner }}-{{ .Release.Name }}-tls {{- end }} {{- end }} {{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/network_policy.yaml b/src/main/helm/templates/network_policy.yaml index 929afd7c84be59aa8d39ca31148f72375a2c228b..2d70106bb1690fc7ca90516a8f9f1e7e4c01afc7 100644 --- a/src/main/helm/templates/network_policy.yaml +++ b/src/main/helm/templates/network_policy.yaml @@ -26,7 +26,7 @@ apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: - name: network-policy-{{ include "app.name" .}} + name: network-policy-{{ .Release.Name}} namespace: {{ .Release.Namespace }} spec: podSelector: diff --git a/src/main/helm/templates/service.yaml b/src/main/helm/templates/service.yaml index 541a2679c92c41306fe08d926bd425421a9b99ea..93574b29b45f4157a6c0dafbd69b2ed60a25a9f2 100644 --- a/src/main/helm/templates/service.yaml +++ b/src/main/helm/templates/service.yaml @@ -25,7 +25,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} diff --git a/src/main/helm/templates/service_monitor.yaml b/src/main/helm/templates/service_monitor.yaml index ae25136b8dd6b875a7eb7c1c9e917b37e8b2ae45..053a25810d66a1d9530bfeae0ec3da3f3fc86068 100644 --- a/src/main/helm/templates/service_monitor.yaml +++ b/src/main/helm/templates/service_monitor.yaml @@ -25,7 +25,7 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} diff --git a/src/main/helm/templates/tests/test-ingress-connection.yaml b/src/main/helm/templates/tests/test-ingress-connection.yaml index 13551e9ef21b7920039e739e78ff86dd85020e0b..6d33a4e544785fedc58153ce275ecfb949c46885 100644 --- a/src/main/helm/templates/tests/test-ingress-connection.yaml +++ b/src/main/helm/templates/tests/test-ingress-connection.yaml @@ -25,7 +25,7 @@ apiVersion: v1 kind: Pod metadata: - name: "{{ include "app.name" . }}-test-ingress" + name: "{{ .Release.Name }}-test-ingress" labels: {{- include "app.matchLabels" . | nindent 4 }} annotations: diff --git a/src/main/helm/templates/tests/test-service-connection.yaml b/src/main/helm/templates/tests/test-service-connection.yaml index 9bc4d39f4b42ccd5e2ee5e37d076a5c43dd39ea2..62dda4f5ef40ec4f566af007a57def2ab26ce7b5 100644 --- a/src/main/helm/templates/tests/test-service-connection.yaml +++ b/src/main/helm/templates/tests/test-service-connection.yaml @@ -25,7 +25,7 @@ apiVersion: v1 kind: Pod metadata: - name: "{{ include "app.name" . }}-test-connection" + name: "{{ .Release.Name }}-test-connection" labels: {{- include "app.matchLabels" . | nindent 4 }} annotations: @@ -35,5 +35,5 @@ spec: - name: wget image: busybox command: ['wget'] - args: ['{{ include "app.name" . }}:8080/ws/intelliform_formDatas.wsdl'] + args: ['{{ .Release.Name }}:8080/ws/intelliform_formDatas.wsdl'] restartPolicy: Never diff --git a/src/test/helm/deployment_63_chars_test.yaml b/src/test/helm/deployment_63_chars_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1e63b47eed93c5e640879e17856231ee1606eaee --- /dev/null +++ b/src/test/helm/deployment_63_chars_test.yaml @@ -0,0 +1,55 @@ +# +# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test deyploment less than 63 chars +release: + name: eingang-manager + namespace: sh-helm-test + +chart: + name: eingang-manager +set: + ozgcloud.environment: test +templates: + - templates/deployment.yaml + +tests: + - it: should fail on .Release.Namespace length longer than 63 characters + release: + namespace: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Release.Namespace test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Release.Namespace length less than 63 characters + asserts: + - notFailedTemplate: {} + - it: should fail on .Chart.Name-.Chart.Version length longer than 63 characters + chart: + version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Chart.Name-.Chart.Version Intelliform-Adapter-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 diff --git a/src/test/helm/deployment_bindings_test.yaml b/src/test/helm/deployment_bindings_test.yaml index a8019796719356545283c8015c2f5ba731766dab..9b3f68067786e6cdcb5a77c4dd07fced16581305 100644 --- a/src/test/helm/deployment_bindings_test.yaml +++ b/src/test/helm/deployment_bindings_test.yaml @@ -25,6 +25,8 @@ suite: deployment bindings templates: - templates/deployment.yaml +set: + ozgcloud.environment: test tests: - it: should have temp-dir volume asserts: diff --git a/src/test/helm/deployment_container_security_context_test.yaml b/src/test/helm/deployment_container_security_context_test.yaml index 416374d56a7f925dfe499c556eb58b6e71eb2029..f8679c7fd3c246ecec861d85e6cbc88eff467faf 100644 --- a/src/test/helm/deployment_container_security_context_test.yaml +++ b/src/test/helm/deployment_container_security_context_test.yaml @@ -28,6 +28,8 @@ release: namespace: sh-helm-test templates: - templates/deployment.yaml +set: + ozgcloud.environment: test tests: - it: check default values asserts: diff --git a/src/test/helm/deployment_defaults_labels_test.yaml b/src/test/helm/deployment_defaults_labels_test.yaml index d6952edf6d1fb42b2ab2dcc11321b73d35c7e2d5..e5688f081df983cb484ad12faf57719437655b7f 100644 --- a/src/test/helm/deployment_defaults_labels_test.yaml +++ b/src/test/helm/deployment_defaults_labels_test.yaml @@ -30,6 +30,8 @@ templates: - templates/deployment.yaml - templates/service_monitor.yaml - templates/service.yaml +set: + ozgcloud.environment: test tests: - it: check default labels asserts: diff --git a/src/test/helm/deployment_env_test.yaml b/src/test/helm/deployment_env_test.yaml index c76bf80b818f7ef9e19c301c47699fae83cc7374..fbc35ac562a0fa9aeb4ffae2a198acb173db4cc7 100644 --- a/src/test/helm/deployment_env_test.yaml +++ b/src/test/helm/deployment_env_test.yaml @@ -25,6 +25,8 @@ suite: test environments templates: - templates/deployment.yaml +set: + ozgcloud.environment: test tests: - it: check customList template: deployment.yaml @@ -39,8 +41,6 @@ tests: name: my_test_environment_name value: "A test value" - it: check customList test value is not set by default - set: - ozgcloud.environment: test template: deployment.yaml asserts: - notContains: diff --git a/src/test/helm/deployment_host_aliases_test.yaml b/src/test/helm/deployment_host_aliases_test.yaml index 689bf6fd2d5d9eabbb92a6f521397c665bde2f08..5bd226ad13c2cade607f3981f15b3f7ab3bee237 100644 --- a/src/test/helm/deployment_host_aliases_test.yaml +++ b/src/test/helm/deployment_host_aliases_test.yaml @@ -28,6 +28,9 @@ release: namespace: sh-helm-test templates: - templates/deployment.yaml + +set: + ozgcloud.environment: test tests: - it: should not set hostAliases asserts: diff --git a/src/test/helm/deployment_imagepull_secret_test.yaml b/src/test/helm/deployment_imagepull_secret_test.yaml index 2c72debd4fe921192fd925b909f7e6b85c649685..e48100c1bbd73d6d9ec54caa7fbf40a0cbaee231 100644 --- a/src/test/helm/deployment_imagepull_secret_test.yaml +++ b/src/test/helm/deployment_imagepull_secret_test.yaml @@ -28,6 +28,8 @@ release: namespace: sh-helm-test templates: - templates/deployment.yaml +set: + ozgcloud.environment: test tests: - it: should use default imagePull secret asserts: diff --git a/src/test/helm/deployment_resources_test.yaml b/src/test/helm/deployment_resources_test.yaml index 744cc072737cf7858190c1af10d9be704eb7436e..e945125e67791a5d195ac5d27d420732e995d3b6 100644 --- a/src/test/helm/deployment_resources_test.yaml +++ b/src/test/helm/deployment_resources_test.yaml @@ -27,6 +27,8 @@ release: name: afm-adapter templates: - templates/deployment.yaml +set: + ozgcloud.environment: test tests: - it: test resources set: diff --git a/src/test/helm/deployment_routing-strategy.yaml b/src/test/helm/deployment_routing-strategy.yaml index ff18c1c83bbbc4eaf837fea1d2c8d0bce3f279af..72d2046884e5cc96194448ef52daad3c170ee969 100644 --- a/src/test/helm/deployment_routing-strategy.yaml +++ b/src/test/helm/deployment_routing-strategy.yaml @@ -30,6 +30,7 @@ templates: - deployment.yaml set: image.tag: latest + ozgcloud.environment: test tests: - it: validate default routing values without questions.yaml asserts: diff --git a/src/test/helm/deployment_service_account_test.yaml b/src/test/helm/deployment_service_account_test.yaml index 43aa6fcf59131f1fd9f4e0530a60b14551f89c9b..1c3b8a40130177ef415443d82574265202f89243 100644 --- a/src/test/helm/deployment_service_account_test.yaml +++ b/src/test/helm/deployment_service_account_test.yaml @@ -28,6 +28,9 @@ release: namespace: sh-helm-test templates: - templates/deployment.yaml + +set: + ozgcloud.environment: test tests: - it: should use afm-adapter service account name set: diff --git a/src/test/helm/deployment_springProfile_test.yaml b/src/test/helm/deployment_springProfile_test.yaml index dcdccb8008eea2ea7e84b4a49e8dd81aa524a37b..446ce8f43177fd6f67bb53b780d2159c5edc228d 100644 --- a/src/test/helm/deployment_springProfile_test.yaml +++ b/src/test/helm/deployment_springProfile_test.yaml @@ -27,6 +27,7 @@ release: name: if-adapter templates: - templates/deployment.yaml + tests: - it: should override spring profiles set: @@ -40,6 +41,8 @@ tests: name: spring_profiles_active value: oc,stage,ea - it: should generate spring profiles + set: + ozgcloud.environment: test asserts: - isKind: of: Deployment diff --git a/src/test/helm/deployment_test.yaml b/src/test/helm/deployment_test.yaml index ca8169b68401d2b65038514a34145a36917e54b7..7edba4d797ab8fb1484784d4d1cef9079f627eb6 100644 --- a/src/test/helm/deployment_test.yaml +++ b/src/test/helm/deployment_test.yaml @@ -28,6 +28,8 @@ release: namespace: sh-helm-test templates: - deployment.yaml +set: + ozgcloud.environment: test tests: - it: validate image type and container image asserts: diff --git a/src/test/helm/ingress-create-or-not.yaml b/src/test/helm/ingress-create-or-not.yaml index 7bf967dda4211df292b300c73a6c3f8265a4320a..fa92ab46b56c118237bd47ad6f9ef891d9278777 100644 --- a/src/test/helm/ingress-create-or-not.yaml +++ b/src/test/helm/ingress-create-or-not.yaml @@ -25,6 +25,11 @@ suite: test ingress creation dependent from values templates: - templates/ingress.yaml + +set: + ozgcloud: + bezeichner: helm + tests: - it: create ingress by config set: diff --git a/src/test/helm/ingress-nginx-tests.yaml b/src/test/helm/ingress-nginx-tests.yaml index 4659dbbd94ab5784d075c00f1f8e76e6318fff05..f968300409794fbe83e56b70fd48e1dea3cee088 100644 --- a/src/test/helm/ingress-nginx-tests.yaml +++ b/src/test/helm/ingress-nginx-tests.yaml @@ -25,6 +25,11 @@ suite: test ingress options templates: - templates/ingress.yaml + +set: + ozgcloud: + bezeichner: helm + tests: - it: should create afm ingress tls release: diff --git a/src/test/helm/ingress_test.yaml b/src/test/helm/ingress_test.yaml index 493d124a19b6f9d087d1d850dbdeaaea312535c3..ee0b43da744be9805ca8e9a5930f532f34e502db 100644 --- a/src/test/helm/ingress_test.yaml +++ b/src/test/helm/ingress_test.yaml @@ -28,6 +28,9 @@ release: namespace: sh-helm-test templates: - templates/ingress.yaml +set: + ozgcloud: + bezeichner: helm tests: - it: should match basic data asserts: diff --git a/src/test/unit-values.yaml b/src/test/unit-values.yaml deleted file mode 100644 index 4c10588096434157f0e0ce39098dfcb134dec497..0000000000000000000000000000000000000000 --- a/src/test/unit-values.yaml +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den -# Ministerpräsidenten des Landes Schleswig-Holstein -# Staatskanzlei -# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung -# -# Lizenziert unter der EUPL, Version 1.2 oder - sobald -# diese von der Europäischen Kommission genehmigt wurden - -# Folgeversionen der EUPL ("Lizenz"); -# Sie dürfen dieses Werk ausschließlich gemäß -# dieser Lizenz nutzen. -# Eine Kopie der Lizenz finden Sie hier: -# -# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 -# -# Sofern nicht durch anwendbare Rechtsvorschriften -# gefordert oder in schriftlicher Form vereinbart, wird -# die unter der Lizenz verbreitete Software "so wie sie -# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - -# ausdrücklich oder stillschweigend - verbreitet. -# Die sprachspezifischen Genehmigungen und Beschränkungen -# unter der Lizenz sind dem Lizenztext zu entnehmen. -# - -baseUrl: test.sh.ozg-cloud.de - -ozgcloud: - bundesland: sh - environment: test - bezeichner: helm - -routing: - targetVorgangManagerName: vorgang-manager - -image: - repo: docker.ozg-sh.de - name: intelliform-adapter - tag: latest diff --git a/xta-adapter/run_helm_test.sh b/xta-adapter/run_helm_test.sh index 8cfc42013cc858b0d2f5afc2c43b12eb56b68bab..9a57c3aa8f89a760772338f83d79796e04c242cb 100755 --- a/xta-adapter/run_helm_test.sh +++ b/xta-adapter/run_helm_test.sh @@ -2,6 +2,6 @@ set -e -helm template ./src/main/helm/ -f src/main/helm/test-values.yaml -helm lint -f src/test/helm/values/unit-values.yaml ./src/main/helm/ -cd src/main/helm && helm unittest -f '../../test/helm/*.yaml' -v '../../test/helm/values/unit-values.yaml' . \ No newline at end of file +helm template ./src/main/helm/ -f src/test/helm-linter-values.yaml +helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/ +cd src/main/helm && helm unittest -f '../../test/helm/*.yaml' . diff --git a/xta-adapter/src/main/helm/templates/_helpers.tpl b/xta-adapter/src/main/helm/templates/_helpers.tpl index 203aab813c0e2dbb6505eb2af8acc5ca1631b146..afcc6d669c8d184bc9029f310e6b9464372b5cfd 100644 --- a/xta-adapter/src/main/helm/templates/_helpers.tpl +++ b/xta-adapter/src/main/helm/templates/_helpers.tpl @@ -1,38 +1,37 @@ {{/* vim: set filetype=mustache: */}} -{{/* Truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} -{{/* Name */}} -{{- define "app.name" -}} -{{- default .Release.Name | toString | trunc 63 | trimSuffix "-" -}} -{{- end -}} - +{{/* error check 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} {{/* Namespace */}} {{- define "app.namespace" -}} -{{- default .Release.Namespace | toString | trunc 63 | trimSuffix "-" -}} +{{- if gt (len (.Release.Namespace)) 63 -}} +{{- fail (printf ".Release.Namespace %s ist zu lang (max. 63 Zeichen)" .Release.Namespace) -}} {{- end -}} - -{{/* Version */}} -{{- define "app.version" -}} -{{- default .Chart.Version | toString | trunc 63 | trimSuffix "-" -}} +{{ printf "%s" .Release.Namespace }} {{- end -}} {{/* Chart: Name + Version */}} {{- define "app.chart" -}} -{{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- if gt (len (printf "%s-%s" .Chart.Name .Chart.Version)) 63 -}} +{{- fail (printf ".Chart.Name-.Chart.Version %s-%s ist zu lang (max. 63 Zeichen)" .Chart.Name .Chart.Version) -}} +{{- end -}} +{{ printf "%s-%s" .Chart.Name .Chart.Version }} {{- end -}} {{/* Managed-by -> On Helm, this value is always Helm */}} {{- define "app.managedBy" -}} -{{- default .Release.Service | toString | trunc 63 | trimSuffix "-" -}} +{{- if gt (len (.Release.Service)) 63 -}} +{{- fail (printf ".Release.Service %s ist zu lang (max. 63 Zeichen)" .Release.Service) -}} +{{- end -}} +{{ printf "%s" .Release.Service }} {{- end -}} {{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} {{- define "app.defaultLabels" }} -app.kubernetes.io/instance: {{ include "app.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} -app.kubernetes.io/name: {{ include "app.name" . }} +app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/part-of: ozgcloud -app.kubernetes.io/version: {{ include "app.version" . }} +app.kubernetes.io/version: {{ .Chart.Version }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} helm.sh/chart: {{ include "app.chart" . }} {{- end -}} diff --git a/xta-adapter/src/main/helm/templates/image-pull-secret.yaml b/xta-adapter/src/main/helm/templates/image-pull-secret.yaml index 9ac29e90a738d57e16307c8335a60c032134f1c8..327b37f8b27d39d926ae1a67d6ef35701b9852e8 100644 --- a/xta-adapter/src/main/helm/templates/image-pull-secret.yaml +++ b/xta-adapter/src/main/helm/templates/image-pull-secret.yaml @@ -26,7 +26,7 @@ apiVersion: v1 kind: Secret metadata: - name: {{ include "app.name" . }}-image-pull-secret + name: {{ .Release.Name }}-image-pull-secret namespace: {{ include "app.namespace" . }} type: kubernetes.io/dockerconfigjson data: diff --git a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml index 8f8f55aea4531cbe52c88983d7491551b9c2354e..04e62c964cce2c3d83c1771b114d4d1ac94fe5e4 100644 --- a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml +++ b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml @@ -25,7 +25,7 @@ apiVersion: batch/v1 kind: CronJob metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} @@ -166,11 +166,11 @@ spec: {{- if .Values.imagePullSecret }} - name: {{ .Values.imagePullSecret }} {{ else }} - - name: {{ include "app.name" . }}-image-pull-secret + - name: {{ .Release.Name }}-image-pull-secret {{- end }} {{- if (.Values.securityContext).fsGroup }} securityContext: fsGroup: {{ (.Values.securityContext).fsGroup }} {{- else }} securityContext: {} - {{- end }} \ No newline at end of file + {{- end }} diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java index 0fe6d495bf3382335bbb41a8fc186feeb30ba300..9e60b84b7ac4ba0dafc491ae1d80742a4d002d58 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java @@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormHeader; +import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; import lombok.NonNull; import lombok.extern.log4j.Log4j2; @@ -17,11 +19,14 @@ import lombok.extern.log4j.Log4j2; class XtaService { static final String DFOERDERMITTELANTRAG_MESSAGE_TYPE = "Geschaeftsgang.Geschaeftsgang.0201"; + static final int VORGANG_NUMMER_SUFFIX_LENGTH = 4; @Autowired private XtaRemoteService remoteService; @Autowired private XtaMessageMapper mapper; + @Autowired + private VorgangNummerSupplier vorgangNummerSupplier; public Stream<FormData> getMessages() { return createXtaMessageStream().filter(this::filterByMessageType).map(this::getFormData); @@ -45,7 +50,16 @@ class XtaService { public FormData getFormData(@NonNull XtaMessageMetaData metaData) { var msg = remoteService.getMessage(metaData.getMessageId()); - return mapper.toFormData(msg.toBuilder().metaData(metaData).build()); + var formData = mapper.toFormData(msg.toBuilder().metaData(metaData).build()); + return updateHeader(formData); + } + + FormData updateHeader(FormData formData) { + return formData.toBuilder().header(setVorgangNummer(formData.getHeader())).build(); + } + + FormHeader setVorgangNummer(FormHeader formHeader) { + return formHeader.toBuilder().vorgangNummer(vorgangNummerSupplier.get(VORGANG_NUMMER_SUFFIX_LENGTH)).build(); } public void acknowledgeReceive(@NonNull XtaMessageId messageId) { diff --git a/xta-adapter/src/main/helm/test-values.yaml b/xta-adapter/src/test/helm-linter-values.yaml similarity index 100% rename from xta-adapter/src/main/helm/test-values.yaml rename to xta-adapter/src/test/helm-linter-values.yaml diff --git a/xta-adapter/src/test/helm/cronjob_service_account_test.yaml b/xta-adapter/src/test/helm/cronjob_service_account_test.yaml index 933e2c64f494bff262c48c680a46df70239662bd..b84278f12a2b95b750f3dbe657f66f0e54d46bbf 100644 --- a/xta-adapter/src/test/helm/cronjob_service_account_test.yaml +++ b/xta-adapter/src/test/helm/cronjob_service_account_test.yaml @@ -28,6 +28,8 @@ templates: release: name: xta-adapter namespace: helm-test +set: + ozgcloud.environment: test tests: - it: should use service account with default name set: diff --git a/xta-adapter/src/test/helm/values/unit-values.yaml b/xta-adapter/src/test/helm/values/unit-values.yaml deleted file mode 100644 index fe20e41e9122cdb398e01905ee0fe53db2463cdc..0000000000000000000000000000000000000000 --- a/xta-adapter/src/test/helm/values/unit-values.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den -# Ministerpräsidenten des Landes Schleswig-Holstein -# Staatskanzlei -# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung -# -# Lizenziert unter der EUPL, Version 1.2 oder - sobald -# diese von der Europäischen Kommission genehmigt wurden - -# Folgeversionen der EUPL ("Lizenz"); -# Sie dürfen dieses Werk ausschließlich gemäß -# dieser Lizenz nutzen. -# Eine Kopie der Lizenz finden Sie hier: -# -# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 -# -# Sofern nicht durch anwendbare Rechtsvorschriften -# gefordert oder in schriftlicher Form vereinbart, wird -# die unter der Lizenz verbreitete Software "so wie sie -# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - -# ausdrücklich oder stillschweigend - verbreitet. -# Die sprachspezifischen Genehmigungen und Beschränkungen -# unter der Lizenz sind dem Lizenztext zu entnehmen. -# - -ozgcloud: - bundesland: sh - environment: test - bezeichner: helm \ No newline at end of file diff --git a/xta-adapter/src/test/helm/xta_adapter_63_chars_test.yaml b/xta-adapter/src/test/helm/xta_adapter_63_chars_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b2a1223a8dbe928d2d0ce41ae6dd03d005e706eb --- /dev/null +++ b/xta-adapter/src/test/helm/xta_adapter_63_chars_test.yaml @@ -0,0 +1,55 @@ +# +# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test less than 63 chars +release: + name: xta-adapter + namespace: sh-helm-test +set: + ozgcloud.environment: test +chart: + name: xta-adapter + +templates: + - templates/xta_adapter_cronjob.yaml + +tests: + - it: should fail on .Release.Namespace length longer than 63 characters + release: + namespace: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Release.Namespace test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Release.Namespace length less than 63 characters + asserts: + - notFailedTemplate: {} + - it: should fail on .Chart.Name-.Chart.Version length longer than 63 characters + chart: + version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Chart.Name-.Chart.Version xta-adapter-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 diff --git a/xta-adapter/src/test/helm/xta_adapter_bindings_test.yaml b/xta-adapter/src/test/helm/xta_adapter_bindings_test.yaml index ef1560522dcf450be3069f560c9aaa04bc7bb52b..959b0b824e88969cbc4012198b340d64836e5c61 100644 --- a/xta-adapter/src/test/helm/xta_adapter_bindings_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_bindings_test.yaml @@ -25,6 +25,8 @@ suite: xta-adapter bindings templates: - templates/xta_adapter_cronjob.yaml +set: + ozgcloud.environment: test tests: - it: should have temp-dir volume asserts: diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml index a75640cc51806e0a22c85787acb094ed8218b0bf..c42c4aadc068555e2f789fa4d449fcea8ac22d2d 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml @@ -28,6 +28,9 @@ templates: release: name: xta-adapter namespace: helm-test +set: + ozgcloud.environment: dev + tests: - it: validate basic data template: xta_adapter_cronjob.yaml @@ -70,7 +73,6 @@ tests: template: xta_adapter_cronjob.yaml set: image.name: xta-adapter - ozgcloud.environment: dev asserts: - equal: path: spec.schedule @@ -79,7 +81,6 @@ tests: template: xta_adapter_cronjob.yaml set: image.name: xta-adapter - ozgcloud.environment: dev asserts: - equal: path: spec.jobTemplate.spec.template.spec.containers[0].image diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml index 0a3ef9a964538609c475ec585b624d12892fc984..93637305c8f873e3557b93817da786ea391e32aa 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml @@ -28,6 +28,8 @@ templates: release: name: xta-adapter namespace: helm-test +set: + ozgcloud.environment: test tests: - it: check dummy livenessProbe default disabled template: xta_adapter_cronjob.yaml diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml index 5e4ca8ae1ee9d03f4c10c05eab3596eb9f47d013..45eb29fa69debf6962737e66509cc2c2c807ad29 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml @@ -28,6 +28,8 @@ templates: release: name: xta-adapter namespace: helm-test +set: + ozgcloud.environment: test tests: - it: check default env template: xta_adapter_cronjob.yaml diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_image_pull_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_image_pull_test.yaml index d74e945ac83c43e56c43f2065615719c412c9432..bf1fb21e365ad092aceaa9829bfcb9520e65012d 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_image_pull_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_image_pull_test.yaml @@ -28,8 +28,12 @@ release: namespace: sh-helm-test templates: - templates/xta_adapter_cronjob.yaml +set: + ozgcloud.environment: dev + tests: - it: should use default imagePull secret + set: asserts: - equal: path: spec.jobTemplate.spec.template.spec.imagePullSecrets[0].name diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml index 198021ea113204629eca21b78cc1b6fa373a28c9..02efe39637d3eeb149ffa8322d8f0e5d2e149f20 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml @@ -28,6 +28,8 @@ templates: release: name: xta-adapter namespace: helm-test +set: + ozgcloud.environment: dev tests: - it: check resources template: xta_adapter_cronjob.yaml diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml index 95013323f05525f8a9d21ee106f3a9b0f29d5169..6acac9f4f2a7376cef9ca583eb3e82ae9cec76ec 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_volumes_test.yaml @@ -28,6 +28,8 @@ templates: release: name: xta-adapter namespace: helm-test +set: + ozgcloud.environment: dev tests: - it: check volume mounts template: xta_adapter_cronjob.yaml diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index 643602f8918e4082a2c71cc0cf6223a79945a596..d1fc3de86803ba5fc9c49a574011b41adf8e3be0 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -6,6 +6,7 @@ import static org.mockito.Mockito.*; import java.util.stream.Stream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -15,6 +16,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; + class XtaServiceTest { private static final String MESSAGE_TYPE_OTHER = "MESSAGE_TYPE_OTHER"; @@ -27,6 +31,8 @@ class XtaServiceTest { private XtaRemoteService remoteService; @Mock private XtaMessageMapper mapper; + @Mock + private VorgangNummerSupplier vorgangNummerSupplier; @Nested class TestGetMessagesAsFormData { @@ -49,6 +55,7 @@ class XtaServiceTest { @Test void shouldCallFilterByMessageType() { + when(mapper.toFormData(any())).thenReturn(FormDataTestFactory.create()); when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message); service.getMessages().toList(); @@ -58,6 +65,7 @@ class XtaServiceTest { @Test void shouldCallGetFormData() { + when(mapper.toFormData(any())).thenReturn(FormDataTestFactory.create()); when(remoteService.getMessage(any(XtaMessageId.class))).thenReturn(message); doReturn(true).when(service).filterByMessageType(messageMetaData); @@ -101,6 +109,8 @@ class XtaServiceTest { @Captor private ArgumentCaptor<XtaMessage> messageCaptor; + @Mock + private FormData formData; @BeforeEach void init() { @@ -109,6 +119,8 @@ class XtaServiceTest { @Test void shouldCallRemoteService() { + doReturn(formData).when(service).updateHeader(any()); + service.getFormData(XtaMessageMetaDataTestFactory.create()); verify(remoteService).getMessage(XtaMessageTestFactory.MESSAGE_ID); @@ -116,6 +128,8 @@ class XtaServiceTest { @Test void shouldCallMapper() { + doReturn(formData).when(service).updateHeader(any()); + service.getFormData(XtaMessageMetaDataTestFactory.create()); verify(mapper).toFormData(any()); @@ -123,7 +137,9 @@ class XtaServiceTest { @Test void shouldHaveMetaData() { + doReturn(formData).when(service).updateHeader(any()); XtaMessageMetaData metaData = XtaMessageMetaDataTestFactory.create(); + service.getFormData(metaData); verify(mapper).toFormData(messageCaptor.capture()); @@ -134,6 +150,7 @@ class XtaServiceTest { void shouldReturnMappedResult() { var mapped = FormDataTestFactory.create(); when(mapper.toFormData(any())).thenReturn(mapped); + doReturn(mapped).when(service).updateHeader(any()); var result = service.getFormData(XtaMessageMetaDataTestFactory.create()); @@ -141,6 +158,50 @@ class XtaServiceTest { } } + @Nested + class TestUpdateHeader { + + @Test + void shouldCallSetVorgangNummer() { + var formData = FormDataTestFactory.create(); + + service.updateHeader(formData); + + verify(service).setVorgangNummer(formData.getHeader()); + } + + @Test + void shouldSetUpdatedHeader() { + var updatedHeader = FormHeaderTestFactory.create(); + doReturn(updatedHeader).when(service).setVorgangNummer(any()); + + var result = service.updateHeader(FormDataTestFactory.create()); + + Assertions.assertThat(result.getHeader()).isSameAs(updatedHeader); + } + } + + @Nested + class TestSetVorgangNummer { + + @Test + void shouldCallVorgangNummerSupplier() { + service.setVorgangNummer(FormHeaderTestFactory.create()); + + verify(vorgangNummerSupplier).get(XtaService.VORGANG_NUMMER_SUFFIX_LENGTH); + } + + @Test + void shouldSetVorgangNummer() { + var vorgangNummer = "vorgang-1"; + when(vorgangNummerSupplier.get(anyInt())).thenReturn(vorgangNummer); + + var result = service.setVorgangNummer(FormHeaderTestFactory.create()); + + assertThat(result.getVorgangNummer()).isEqualTo(vorgangNummer); + } + } + @Nested class TestAcknowledgeReceive {