diff --git a/Jenkinsfile.admin b/Jenkinsfile.admin new file mode 100644 index 0000000000000000000000000000000000000000..111ca2c5fff71683885dfc840a809ced2ce0c75a --- /dev/null +++ b/Jenkinsfile.admin @@ -0,0 +1,48 @@ +pipeline { + agent { + node { + label 'ozgcloud-jenkins-build-agent' + } + } + + environment { + BLUE_OCEAN_URL = "https://jenkins.infra.ozg-cloud.systems/job/alfa/job/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/" + RELEASE_REGEX = /\d+.\d+.\d+/ + SNAPSHOT_REGEX = /\d+.\d+.\d+-SNAPSHOT/ + FAILED_STAGE = "" + SH_SUCCESS_STATUS_CODE = 0 + } + + options { + timeout(time: 1, unit: 'HOURS') + disableConcurrentBuilds() + buildDiscarder(logRotator(numToKeepStr: '5')) + } + + // TODO check version + stage('build') { + steps { + script { + FAILED_STAGE=env.STAGE_NAME + + dir('alfa-client') { + sh 'echo "registry=https://nexus.ozg-sh.de/repository/npm-proxy" >> ~/.npmrc' + sh 'echo "//nexus.ozg-sh.de/:_auth=amVua2luczprTSFnNVUhMVQzNDZxWQ==" >> ~/.npmrc' + + sh 'npm cache verify' + sh 'npm install' + + if (isReleaseBranch()) { + sh 'npm run ci-prodBuild-admin' + } else { + sh 'npm run ci-build-admin' + } + } + } + } + } +} + +Boolean isReleaseBranch() { + return env.BRANCH_NAME == 'release' +} \ No newline at end of file diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json index 14577917261bad756c03028d361bb469403a14bc..05c9ea2dd537b26dd920ae82a7b8c9e042012f16 100644 --- a/alfa-client/package-lock.json +++ b/alfa-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "alfa", - "version": "0.0.0", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "alfa", - "version": "0.0.0", + "version": "0.1.0", "license": "MIT", "dependencies": { "@angular/animations": "16.2.11", diff --git a/alfa-client/package.json b/alfa-client/package.json index 0ea2f44f86f68c0285268d36703bda00acd484c4..d66013f0643824ef2ae3f3eb761863774d1abec9 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -1,6 +1,6 @@ { "name": "alfa", - "version": "0.0.0", + "version": "0.1.0", "license": "MIT", "scripts": { "start": "nx run alfa:serve --port 4300 --disable-host-check", @@ -14,7 +14,9 @@ "test:lib": "nx test ${npm_config_lib} --watchAll", "test:debug:lib": "nx test ${npm_config_lib} --detectOpenHandles --watchAll", "ci-build": "nx run alfa:build --outputHashing=all", + "ci-build-admin": "nx run admin:build --outputHashing=all", "ci-prodBuild": "nx run alfa:build --outputHashing=all --configuration production", + "ci-prodBuild-admin": "nx run admin:build --outputHashing=all --configuration production", "ci-test": "nx run-many --target=test --parallel 8 -- --runInBand", "ci-sonar": "nx run-many --target=test --parallel 8 -- --runInBand --codeCoverage --coverageReporters=lcov --testResultsProcessor=jest-sonar-reporter && npx sonar-scanner", "lint": "nx workspace-lint && nx lint", diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java index 89dd5f2c400be5b9b2be40f20bf873d51c4351cf..ac48de62dda65cb160e37d62a03be7583ff7ab37 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java @@ -31,11 +31,13 @@ public class PrimaerdokumentTypeBuilder { } public PrimaerdokumentType build() { - var primaerdokumentType = new PrimaerdokumentType(); - if (ozgFile != null) { - primaerdokumentType.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile)); - primaerdokumentType.setDateinameOriginal(ozgFile.getName()); + if (ozgFile == null) { + throw new IllegalStateException("Can not build Primaerdokument when ozg file is null"); } + + var primaerdokumentType = new PrimaerdokumentType(); + primaerdokumentType.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile)); + primaerdokumentType.setDateinameOriginal(ozgFile.getName()); primaerdokumentType.setErsteller(ersteller); primaerdokumentType.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(createdAt)); return primaerdokumentType; diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java index cc24f2e704bc7184fae776617db700bb6515771f..8840c0ac344b8d8d84fde3d7d48a96ec76794267 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java @@ -5,11 +5,13 @@ import java.util.Map; import jakarta.xml.bind.Marshaller; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Configuration class ExportConfiguration { @@ -17,8 +19,7 @@ class ExportConfiguration { static final String PROPERTY_NAMESPACE_PREFIX_MAPPER = "org.glassfish.jaxb.namespacePrefixMapper"; static final String CONTEXT_PATH = "de.xoev.xdomea"; - @Autowired - private XdomeaNamespacePrefixMapper prefixMapper; + private final XdomeaNamespacePrefixMapper prefixMapper; @Bean Jaxb2Marshaller marshaller() { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java index c239b4a0190d1ca3dc22440afa66f36f9bfd70ea..40049d86cd0da151919f637034d44d31fae801da 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java @@ -58,18 +58,28 @@ class XdomeaNachrichtBuilder { } public AbgabeAbgabe0401 build() { - representations.forEach(vorgang.getDokument()::add); - attachments.forEach(vorgang.getDokument()::add); - historie.forEach(vorgang.getHistorienProtokollInformation()::add); + addVorgangDokumente(); + addVorgangChangeHistory(); var abgabeType = new AbgabeAbgabe0401(); abgabeType.setKopf(kopf); + abgabeType.getSchriftgutobjekt().add(createSchriftgutobjekt()); + return abgabeType; + } + private Schriftgutobjekt createSchriftgutobjekt() { var schriftgutobjekt = new Schriftgutobjekt(); schriftgutobjekt.setVorgang(vorgang); schriftgutobjekt.setAkte(aktenzeichen); - abgabeType.getSchriftgutobjekt().add(schriftgutobjekt); - return abgabeType; + return schriftgutobjekt; } + void addVorgangDokumente() { + representations.forEach(vorgang.getDokument()::add); + attachments.forEach(vorgang.getDokument()::add); + } + + void addVorgangChangeHistory() { + historie.forEach(vorgang.getHistorienProtokollInformation()::add); + } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java index 523c4a422a2e7df3d7dc3a6ba9d5b0419bbaf084..625313a85d2365950b6e7d0295bc8bb520b9ff72 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java @@ -11,6 +11,7 @@ import de.xoev.xdomea.DokumentType; import de.xoev.xdomea.FormatType; import de.xoev.xdomea.IdentifikationObjektType; import de.xoev.xdomea.MediumCodeType; +import de.xoev.xdomea.PrimaerdokumentType; import de.xoev.xdomea.VersionType; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -49,12 +50,7 @@ public class DokumentTypeBuilder { dokumentType.setIdentifikation(createIdentifikation()); dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten()); dokumentType.getVersion().add(createVersionType()); - dokumentType.getVersion().get(0).getFormat().get(0).setPrimaerdokument( - PrimaerdokumentTypeBuilder.builder() - .withOzgFile(ozgFile) - .withErsteller(formEngineName) - .build() - ); + dokumentType.getVersion().get(0).getFormat().get(0).setPrimaerdokument(createPrimaerdokument()); return dokumentType; } @@ -94,4 +90,11 @@ public class DokumentTypeBuilder { mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); return mediumCode; } + + PrimaerdokumentType createPrimaerdokument() { + return PrimaerdokumentTypeBuilder.builder() + .withOzgFile(ozgFile) + .withErsteller(formEngineName) + .build(); + } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java index 9365c58f7075c8159f0b1ce2dba513d846c7c491..b5b8a45e9e650bc8e193de707b082ec057e8758f 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java @@ -9,8 +9,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import jakarta.validation.constraints.NotNull; - import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.DateConverter; @@ -28,7 +26,7 @@ class FormDataMapper { private final DatatypeMapper datatypeMapper; - public Antragsdaten toAntragsdaten(@NotNull VorgangWithEingang vorgang) { + public Antragsdaten toAntragsdaten(VorgangWithEingang vorgang) { var antragsdaten = new Antragsdaten(); antragsdaten.getItem().addAll(mapFormData(vorgang)); antragsdaten.getItem().addAll(mapOtherData(vorgang)); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java index 631b58ca17de09178637107421700d04274ef3a7..51447d711d95bd24c947899d9339d36b03e548c1 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java @@ -16,7 +16,7 @@ import de.ozgcloud.alfa.common.file.OzgFileTestFactory; class PrimaerdokumentTypeBuilderTest { - private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder(); + private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder().withOzgFile(OzgFileTestFactory.create()); @Nested class TestBuild { @@ -46,13 +46,6 @@ class PrimaerdokumentTypeBuilderTest { exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)); } - @Test - void shouldNotGenerateExportFilename() { - builder.build(); - - exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(null), never()); - } - @Test void shouldHaveDateiname() { var primaerdokumentType = builder.withOzgFile(ozgFile).build(); @@ -74,13 +67,6 @@ class PrimaerdokumentTypeBuilderTest { assertThat(primaerdokumentType.getDateinameOriginal()).isEqualTo(OzgFileTestFactory.NAME); } - @Test - void shouldNotHaveDateinameOriginal() { - var primaerdokumentType = builder.build(); - - assertThat(primaerdokumentType.getDateinameOriginal()).isNull(); - } - @Test void shouldHaveErsteller() { var primaerdokumentType = builder.withErsteller(ERSTELLER).build(); @@ -108,6 +94,11 @@ class PrimaerdokumentTypeBuilderTest { assertThat(primaerdokumentType.getDatumUhrzeit()).isNull(); } + + @Test + void shouldThrowIllegalgStateException() { + assertThatThrownBy(() -> builder.withOzgFile(null).build()).isInstanceOf(IllegalStateException.class); + } } } \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java index 170341bb8acca8b1140dba7f92f47e9e049fcfb4..6721bd0741933c922627264340621a3676ae27cb 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java @@ -111,6 +111,8 @@ class ExportServiceTest { @Nested class TestCollectExportData { + private MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic; + private static final String FILENAME_ID = UUID.randomUUID().toString(); private static final String FILE_NAME = "file.zip"; private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); @@ -125,24 +127,41 @@ class ExportServiceTest { private final List<HistorienProtokollInformationType> historienProtokollInformationTypes = List.of( HistorienProtokollInformationTypeTestFactory.create()); - private final MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class); @Mock private XdomeaNachrichtBuilder xdomeaNachrichtBuilder; @BeforeEach void setUp() { + setUpVorgangService(); + setUpXdomeaNachrichtBuilder(); + setUpExportFileService(); + setUpExportHistorieService(); + + doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID); + doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang); + + } + + private void setUpVorgangService() { when(exportVorgangService.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); when(exportVorgangService.createVorgangType(vorgang)).thenReturn(vorgangType); when(exportVorgangService.createKopf(vorgang)).thenReturn(kopfType); when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType); + } + private void setUpXdomeaNachrichtBuilder() { + xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class); when(xdomeaNachrichtBuilder.withKopf(kopfType)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withVorgang(vorgangType)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withAktenzeichen(akteType)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withRepresentations(representationsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withAttachments(attachmentsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withHistorie(historienProtokollInformationTypes)).thenReturn(xdomeaNachrichtBuilder); + xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); + } + private void setUpExportFileService() { mockStreamToList(representations, stream -> when(exportFileService.getRepresentations(vorgang)).thenReturn(stream)); mockStreamToList(attachments, stream -> when(exportFileService.getAttachments(vorgang)).thenReturn(stream)); mockStreamToList(representationsDokumentTypes, @@ -151,15 +170,11 @@ class ExportServiceTest { .thenReturn(stream)); mockStreamToList(attachmentsDokumentTypes, stream -> when(exportFileService.createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(stream)); + } + + private void setUpExportHistorieService() { mockStreamToList(historienProtokollInformationTypes, stream -> when(exportHistorieService.createHistorienProtokollInformationTypes(vorgang)).thenReturn(stream)); - - doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID); - doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang); - - when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); - - xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); } @AfterEach @@ -533,7 +548,7 @@ class ExportServiceTest { class TestGetFormEngineName { @Test - void shouldReturnEmptyOnNullEingang() { + void shouldReturnEmptyStringOnNullEingang() { var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); var formEngineName = service.getFormEngineName(vorgang); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java index 58636d28abc5890749863c724368be6a3e58ef9a..332cfc515421594b8613b79ce54b31effcf7ec04 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java @@ -55,31 +55,17 @@ class DokumentTypeBuilderTest { @Nested class TestBuild { - private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic; - @Mock - private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder; - private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); private final VersionType versionType = VersionTypeTestFactory.create(); - private final PrimaerdokumentType primaerdokumentType = PrimaerdokumentTypeTestFactory.create(); + private final PrimaerdokumentType primaerdokument = PrimaerdokumentTypeTestFactory.create(); @BeforeEach void setUp() { - primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class); - primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder); - doReturn(identifikationObjekt).when(builder).createIdentifikation(); doReturn(versionType).when(builder).createVersionType(); doReturn(allgemeineMetadaten).when(builder).createAllgemeineMetadaten(); - when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.build()).thenReturn(primaerdokumentType); - } - - @AfterEach - void tearDown() { - primaerdokumentTypeBuilderMockedStatic.close(); + doReturn(primaerdokument).when(builder).createPrimaerdokument(); } @Test @@ -125,32 +111,19 @@ class DokumentTypeBuilderTest { } @Test - void shouldPrimaerdokumentWithOzgFile() { - builder.build(); - - verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldPrimaerdokumentWithErsteller() { - builder.build(); - - verify(primaerdokumentTypeBuilder).withErsteller(FORM_ENGINE_NAME); - } - - @Test - void shouldBuildPrimaerdokumentType() { + void shouldCreatePrimaerdokument() { builder.build(); - verify(primaerdokumentTypeBuilder).build(); + verify(builder).createPrimaerdokument(); } @Test void shouldHavePrimaerdokument() { var dokument = builder.build(); - assertThat(dokument.getVersion().get(0).getFormat().get(0).getPrimaerdokument()).isEqualTo(primaerdokumentType); + assertThat(dokument.getVersion().get(0).getFormat().get(0).getPrimaerdokument()).isEqualTo(primaerdokument); } + } @Nested @@ -196,14 +169,14 @@ class DokumentTypeBuilderTest { } @Test - void shouldHaveKennzeichen() { + void shouldHaveEmptyKennzeichen() { var allgemeineMetadaten = builder.createAllgemeineMetadaten(); assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty(); } @Test - void shouldHaveBemerkung() { + void shouldHaveEmptyBemerkung() { var allgemeineMetadaten = builder.createAllgemeineMetadaten(); assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); @@ -276,4 +249,56 @@ class DokumentTypeBuilderTest { } } + @Nested + class TestCreatePrimaerdokument { + + private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic; + @Mock + private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder; + + private final PrimaerdokumentType primaerdokumentType = PrimaerdokumentTypeTestFactory.create(); + + @BeforeEach + void setUp() { + primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class); + primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.build()).thenReturn(primaerdokumentType); + } + + @AfterEach + void tearDown() { + primaerdokumentTypeBuilderMockedStatic.close(); + } + + @Test + void shouldCreatePrimaerdokumentWithOzgFile() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile); + } + + @Test + void shouldCreatePrimaerdokumentWithErsteller() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).withErsteller(FORM_ENGINE_NAME); + } + + @Test + void shouldBuildPrimaerdokument() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).build(); + } + + @Test + void shouldReturnBuildPrimaerdokument() { + var primaerdokument = builder.createPrimaerdokument(); + + assertThat(primaerdokument).isEqualTo(primaerdokument); + } + } + } \ No newline at end of file