diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java index b1a5f192ba800117d29f3c76047b127e499915d0..f843a45a6e08222a6de6cfd2cdcea7d7b78f00d8 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidController.java @@ -23,7 +23,6 @@ */ package de.ozgcloud.alfa.bescheid; -import org.apache.commons.lang3.StringUtils; import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; import org.springframework.http.ResponseEntity; @@ -35,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController; import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.RequiredArgsConstructor; @RestController @@ -54,23 +52,12 @@ public class BescheidController { return ResponseEntity.of(bescheidService.getBescheidDraft(vorgangId).map(assembler::toModel)); } - // TODO Sobald Grpc Schnittstelle zum Laden eines einzelnen Bescheids existiert, - // den Endpoint auf bescheidId beschraenken und ueber den Service -> - // den Bescheid laden @GetMapping("/{bescheidId}/attachments") - public CollectionModel<EntityModel<OzgFile>> getAttachments(@PathVariable String bescheidId, @RequestParam String vorgangId) { - var bescheid = getBescheid(bescheidId, vorgangId); + public CollectionModel<EntityModel<OzgFile>> getAttachments(@PathVariable String bescheidId) { + var bescheid = bescheidService.getBescheid(bescheidId); return binaryFileController.getFiles(bescheid.getAttachments()); } - Bescheid getBescheid(String bescheidId, String vorgangId) { - var bescheid = bescheidService.findByVorgangId(vorgangId) - .filter(oneBescheid -> StringUtils.equals(oneBescheid.getId(), bescheidId)) - .findFirst(); - return bescheid.orElseThrow(() -> new TechnicalException(String.format("No Bescheid exists for id %s.", bescheidId))); - } - // - @RestController @RequestMapping(BescheidByVorgangController.BESCHEID_BY_VORGANG_PATH) @RequiredArgsConstructor diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeatures.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeatures.java new file mode 100644 index 0000000000000000000000000000000000000000..0c1663f589d71e666f93d3eed86a84759390d67f --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeatures.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +class BescheidManagerFeatures { + + private boolean canCreateBescheidDocument; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..b36b752c17c1175534391c53b8e003e0162d97ca --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapper.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.document.bescheid.GrpcBescheidManagerFeatures; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +interface BescheidManagerFeaturesMapper { + + BescheidManagerFeatures fromGrpc(GrpcBescheidManagerFeatures grpcBescheidManagerFeatures); +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java index a28cc6972ff033c9c265e041c716b01ed300f28d..e24e7101b1606ee6bb86cc90a294744a69661b0b 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java @@ -35,15 +35,19 @@ import com.google.protobuf.ProtocolStringList; import de.ozgcloud.alfa.common.binaryfile.FileId; import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcSentInfo; +import de.ozgcloud.document.bescheid.GrpcBescheid; +import de.ozgcloud.document.bescheid.GrpcSentInfo; @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = { FileIdMapper.class, UserIdMapper.class }) interface BescheidMapper { + @Mapping(target = "vorgangId", ignore = true) @Mapping(target = "attachments", source = "grpcBescheid.attachmentsList") - Bescheid fromGrpc(GrpcBescheid grpcBescheid, String vorgangId); + Bescheid fromGrpc(GrpcBescheid grpcBescheid); + + @Mapping(target = "attachments", source = "grpcBescheid.attachmentsList") + Bescheid fromGrpcAndVorgangId(GrpcBescheid grpcBescheid, String vorgangId); List<FileId> fromProtocolStringList(ProtocolStringList value); diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java index f320773cd9955240468b3273446d15b44f1e502b..f02c1ae8594ce65d7791033112b4ed7f2fda297e 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java @@ -81,7 +81,7 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc methodOn(CommandByRelationController.class).createCommand(bescheid.getVorgangId(), bescheid.getId(), bescheid.getVersion(), null)); var uploadBescheidFileLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidFile", null)); var uploadAttachmentLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidAttachment", null)); - var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getId(), bescheid.getVorgangId())); + var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getId())); var createCommandLink = buildCreateCommandLink(bescheid); var vorgangWithEingang = vorgangController.getVorgang(bescheid.getVorgangId()); var bescheidenUndSendenLink = linkTo( diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java index f3c5443186be698d154bb7ed2f1097a2153b308a..61e2022de3c09c46d1b0ad6084f6402aa44575df 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java @@ -26,57 +26,74 @@ package de.ozgcloud.alfa.bescheid; import java.util.Optional; import java.util.stream.Stream; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.alfa.common.GrpcUtil; -import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest; -import de.ozgcloud.bescheid.GrpcGetAllBescheidRequest; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse; +import de.ozgcloud.document.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; +import de.ozgcloud.document.bescheid.GrpcBescheid; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigRequest; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigResponse; +import de.ozgcloud.document.bescheid.GrpcGetAllBescheidRequest; +import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftRequest; +import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftResponse; +import de.ozgcloud.document.bescheid.GrpcGetBescheidRequest; +import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.client.inject.GrpcClient; @Service +@RequiredArgsConstructor class BescheidRemoteService { @GrpcClient(GrpcUtil.VORGANG_MANAGER_GRPC_CLIENT) - private BescheidServiceBlockingStub bescheidServiceStub; - @Autowired - private BescheidMapper bescheidMapper; + private final BescheidServiceBlockingStub bescheidServiceStub; + private final BescheidMapper bescheidMapper; + private final BescheidManagerFeaturesMapper bescheidManagerFeaturesMapper; public Optional<Bescheid> getBescheidDraft(String vorgangId) { var request = buildGetBescheidDraftRequest(vorgangId); var response = bescheidServiceStub.getBescheidDraft(request); - return getBescheidFromResponse(response).map(bescheid -> bescheidMapper.fromGrpc(bescheid, vorgangId)); + return getBescheidFromResponse(response).map(bescheid -> bescheidMapper.fromGrpcAndVorgangId(bescheid, vorgangId)); } GrpcGetBescheidDraftRequest buildGetBescheidDraftRequest(String vorgangId) { - return GrpcGetBescheidDraftRequest.newBuilder() - .setVorgangId(vorgangId) - .build(); + return GrpcGetBescheidDraftRequest.newBuilder().setVorgangId(vorgangId).build(); } Optional<GrpcBescheid> getBescheidFromResponse(GrpcGetBescheidDraftResponse response) { return response.hasBescheid() ? Optional.of(response.getBescheid()) : Optional.empty(); } + public Bescheid getBescheid(String bescheidId) { + var request = buildGetBescheidRequest(bescheidId); + var response = bescheidServiceStub.getBescheid(request); + return bescheidMapper.fromGrpc(response.getBescheid()); + } + + GrpcGetBescheidRequest buildGetBescheidRequest(String bescheidId) { + return GrpcGetBescheidRequest.newBuilder().setId(bescheidId).build(); + } + public Stream<Bescheid> findByVorgangId(String vorgangId) { var request = buildGetAllBescheidRequest(vorgangId); var response = bescheidServiceStub.getAll(request); - return response.getBescheidList().stream().map(grpcBescheid -> bescheidMapper.fromGrpc(grpcBescheid, vorgangId)); + return response.getBescheidList().stream().map(grpcBescheid -> bescheidMapper.fromGrpcAndVorgangId(grpcBescheid, vorgangId)); } GrpcGetAllBescheidRequest buildGetAllBescheidRequest(String vorgangId) { return GrpcGetAllBescheidRequest.newBuilder().setVorgangId(vorgangId).build(); } - // TODO Logik in den Service verschieben - public boolean canCreateBescheidDocument() { - var response = bescheidServiceStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); - return response.hasFeatures() && response.getFeatures().getCanCreateBescheidDocument(); + public BescheidManagerFeatures getBescheidManagerFeatures() { + return getFeatures(getConfig()); + } + + private GrpcBescheidManagerConfigResponse getConfig() { + return bescheidServiceStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); + } + + private BescheidManagerFeatures getFeatures(GrpcBescheidManagerConfigResponse configResponse) { + return bescheidManagerFeaturesMapper.fromGrpc(configResponse.getFeatures()); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java index d08895f986fe673b8de45be743078b4b4b99e19d..347586b0793d1d1af3f9da2b2931c87031595b7b 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java @@ -42,6 +42,10 @@ public class BescheidService { return remoteService.getBescheidDraft(vorgangId); } + public Bescheid getBescheid(String bescheidId) { + return remoteService.getBescheid(bescheidId); + } + public Stream<Bescheid> findByVorgangId(String vorgangId) { return remoteService.findByVorgangId(vorgangId); } @@ -55,7 +59,7 @@ public class BescheidService { } public boolean canCreateBescheidDocumentAutomatically() { - return remoteService.canCreateBescheidDocument(); + return remoteService.getBescheidManagerFeatures().isCanCreateBescheidDocument(); } public boolean existsBescheid(String vorgangId) { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java index 458337f0fe6848e241ab6c7c702e95fe3f1c598b..4c2526a372c9e34ea40f98f36bdbda9881194179 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidControllerTest.java @@ -23,14 +23,13 @@ */ package de.ozgcloud.alfa.bescheid; -import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import java.util.List; import java.util.Optional; -import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -39,14 +38,15 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; import lombok.SneakyThrows; class BescheidControllerTest { @@ -129,15 +129,16 @@ class BescheidControllerTest { @BeforeEach void mock() { - doReturn(BescheidTestFactory.create()).when(controller).getBescheid(anyString(), anyString()); + when(bescheidService.getBescheid(any())).thenReturn(BescheidTestFactory.create()); + when(binaryFileController.getFiles(any())).thenReturn(CollectionModel.of(List.of(EntityModel.of(OzgFileTestFactory.create())))); } @SneakyThrows @Test - void shouldGetBescheid() { + void shouldCallBescheidService() { doRequest(); - verify(controller).getBescheid(BescheidTestFactory.ID, BescheidTestFactory.VORGANG_ID); + verify(bescheidService).getBescheid(BescheidTestFactory.ID); } @SneakyThrows @@ -157,47 +158,34 @@ class BescheidControllerTest { } @SneakyThrows - private ResultActions doRequest() { - return mockMvc.perform( - get(BescheidController.PATH + "/{bescheidId}/attachments", BescheidTestFactory.ID).param("vorgangId", - BescheidTestFactory.VORGANG_ID)); - } - } - - @DisplayName("Get Bescheid") - @Nested - class TestGetBescheid { - - private final Bescheid matchingBescheid = BescheidTestFactory.create(); - private final Bescheid notMatchingBescheid = BescheidTestFactory.createBuilder().id("NOT_MATCH").build(); + @Test + void shouldHaveAttachmentName() { + var response = doRequest(); - @BeforeEach - void mock() { - when(bescheidService.findByVorgangId(anyString())).thenReturn(Stream.of(matchingBescheid, notMatchingBescheid)); + response.andExpect(jsonPath("$.content[0].name").value(OzgFileTestFactory.NAME)); } - @DisplayName("should call service to find all bescheid by vorgang") + @SneakyThrows @Test - void shouldCallFindByVorgangId() { - controller.getBescheid(BescheidTestFactory.ID, VorgangHeaderTestFactory.ID); + void shouldHaveAttachmentSize() { + var response = doRequest(); - verify(bescheidService).findByVorgangId(VorgangHeaderTestFactory.ID); + response.andExpect(jsonPath("$.content[0].size").value(OzgFileTestFactory.SIZE)); } + @SneakyThrows @Test - void shouldReturnMatchingEntry() { - var bescheid = controller.getBescheid(BescheidTestFactory.ID, VorgangHeaderTestFactory.ID); + void shouldHaveAttachmentContentType() { + var response = doRequest(); - assertThat(bescheid).isEqualTo(matchingBescheid); + response.andExpect(jsonPath("$.content[0].contentType").value(OzgFileTestFactory.CONTENT_TYPE)); } - @Test - void shouldThrowExceptionIfNoBescheidExists() { - when(bescheidService.findByVorgangId(anyString())).thenReturn(Stream.empty()); - - assertThatThrownBy(() -> controller.getBescheid(BescheidTestFactory.ID, VorgangHeaderTestFactory.ID)) - .isInstanceOf(TechnicalException.class) - .hasMessageContaining("No Bescheid exists for id " + BescheidTestFactory.ID); + @SneakyThrows + private ResultActions doRequest() { + return mockMvc.perform( + get(BescheidController.PATH + "/{bescheidId}/attachments", BescheidTestFactory.ID).param("vorgangId", + BescheidTestFactory.VORGANG_ID)); } } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e7914a16b1499f53f956a804b25ec1e3f81771c2 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapperTest.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mapstruct.factory.Mappers; + +import de.ozgcloud.document.bescheid.GrpcBescheidManagerFeatures; + +class BescheidManagerFeaturesMapperTest { + + private final BescheidManagerFeaturesMapper mapper = Mappers.getMapper(BescheidManagerFeaturesMapper.class); + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void shouldMapCanCreateBescheidDocument(boolean canCreate) { + var grpcFeatures = GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(canCreate).build(); + + var features = mapper.fromGrpc(grpcFeatures); + + assertThat(features.isCanCreateBescheidDocument()).isEqualTo(canCreate); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java index 2b93192a54784deb5eb7ea1a98f68f0933cb7924..8ddaddbedd9a0678fc2ec08a01fbbc58426697f1 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java @@ -27,8 +27,8 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.time.ZonedDateTime; - +import org.assertj.core.api.recursive.comparison.*; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; @@ -36,7 +36,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.ozgcloud.alfa.common.binaryfile.FileIdMapper; -import de.ozgcloud.alfa.common.user.UserId; import de.ozgcloud.alfa.common.user.UserIdMapper; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; @@ -49,100 +48,60 @@ class BescheidMapperTest { @InjectMocks private final BescheidMapper mapper = Mappers.getMapper(BescheidMapper.class); + @BeforeEach + void init() { + when(fileIdMapper.toFileId(any())).thenReturn(BescheidTestFactory.ATTACHMENT_ID); + when(userIdMapper.fromString(any())).thenReturn(BescheidTestFactory.SENT_INFO.getSentBy()); + } + @Nested class TestFromGrpc { @Test - void shouldMapId() { - var bescheid = map(); - - assertThat(bescheid.getId()).isEqualTo(GrpcBescheidTestFactory.ID); - } - - @Test - void shouldMapVorgangId() { - var bescheid = map(); + void shouldMapAttachments() { + mapper.fromGrpc(GrpcBescheidTestFactory.create()); - assertThat(bescheid.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID); + verify(fileIdMapper).toFileId(GrpcBescheidTestFactory.ATTACHMENT_ID); } @Test - void shouldMapBewilligt() { - var bescheid = map(); + void shouldMapSentBy() { + mapper.fromGrpc(GrpcBescheidTestFactory.create()); - assertThat(bescheid.getBewilligt()).isEqualTo(GrpcBescheidTestFactory.BEWILLIGT); + verify(userIdMapper).fromString(GrpcSentInfoTestFactory.SENT_BY); } @Test - void shouldMapBeschiedenAm() { - var bescheid = map(); + void shouldMapAllFields() { + var bescheid = mapper.fromGrpc(GrpcBescheidTestFactory.create()); - assertThat(bescheid.getBeschiedenAm()).isEqualTo(GrpcBescheidTestFactory.BESCHIEDEN_AM); + assertThat(bescheid).usingRecursiveComparison(RecursiveComparisonConfiguration.builder().withIgnoredFields("vorgangId").build()) + .isEqualTo(BescheidTestFactory.create()); } + } - @Test - void shouldMapBescheidDocument() { - var bescheid = map(); - - assertThat(bescheid.getBescheidDocument()).isEqualTo(GrpcBescheidTestFactory.BESCHEID_DOCUMENT); - } + @Nested + class TestFromGrpcAndVorgangId { @Test void shouldMapAttachments() { - when(fileIdMapper.toFileId(any())).thenCallRealMethod(); - - var bescheid = map(); + mapper.fromGrpc(GrpcBescheidTestFactory.create()); - assertThat(bescheid.getAttachments()).containsExactlyInAnyOrderElementsOf(BescheidTestFactory.ATTACHMENTS); + verify(fileIdMapper).toFileId(GrpcBescheidTestFactory.ATTACHMENT_ID); } @Test - void shouldMapNachrichtText() { - var bescheid = map(); + void shouldMapSentBy() { + mapper.fromGrpc(GrpcBescheidTestFactory.create()); - assertThat(bescheid.getNachrichtText()).isEqualTo(GrpcBescheidTestFactory.NACHRICHT_TEXT); + verify(userIdMapper).fromString(GrpcSentInfoTestFactory.SENT_BY); } @Test - void shouldMapNachrichtSubject() { - var bescheid = map(); - - assertThat(bescheid.getNachrichtSubject()).isEqualTo(GrpcBescheidTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldMapStatus() { - var bescheid = map(); - - assertThat(bescheid.getStatus()).isEqualTo(BescheidTestFactory.STATUS); - } - - @Nested - class TestMapSentInfo { - private final SentInfo expectedSentInfo = SentInfoTestFactory.createBuilder() - .sentAt(ZonedDateTime.parse(GrpcSentInfoTestFactory.SENT_AT)) - .sentBy(UserId.from(GrpcSentInfoTestFactory.SENT_BY)) - .build(); - - @Test - void shouldMapSentBy() { - when(userIdMapper.fromString(GrpcSentInfoTestFactory.SENT_BY)).thenCallRealMethod(); - - var bescheid = map(); - - assertThat(bescheid.getSentInfo().getSentBy()).isEqualTo(expectedSentInfo.getSentBy()); - } - - @Test - void shouldMapSentAt() { - var bescheid = map(); - - assertThat(bescheid.getSentInfo().getSentAt()).isEqualTo(expectedSentInfo.getSentAt()); - } - } + void shouldMapAllFields() { + var bescheid = mapper.fromGrpcAndVorgangId(GrpcBescheidTestFactory.create(), VorgangHeaderTestFactory.ID); - private Bescheid map() { - return mapper.fromGrpc(GrpcBescheidTestFactory.create(), VorgangHeaderTestFactory.ID); + assertThat(bescheid).usingRecursiveComparison().isEqualTo(BescheidTestFactory.create()); } } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java index 2db87cf5d2741de5cc3ad649dfb414c8b0e31d1c..8c207f58d05b16356cdafe1a05d45ac113ccf99f 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java @@ -137,8 +137,7 @@ class BescheidModelAssemblerTest { var model = callToModel(); assertThat(model.getLink(REL_ATTACHMENTS)).isPresent().get().extracting(Link::getHref) - .isEqualTo(String.format("%s/%s/attachments?vorgangId=%s", BescheidController.PATH, BescheidTestFactory.ID, - BescheidTestFactory.VORGANG_ID)); + .isEqualTo(String.format("%s/%s/attachments", BescheidController.PATH, BescheidTestFactory.ID)); } @Test diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java index 3e74aac952c10febc3d53e6322c3eec505e337af..8b2de8c267d910580a8bf6f02fc0caad59a5be35 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java @@ -38,13 +38,15 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse; -import de.ozgcloud.bescheid.GrpcGetAllBescheidRequest; -import de.ozgcloud.bescheid.GrpcGetAllBescheidResponse; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse; +import de.ozgcloud.document.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigRequest; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigResponse; +import de.ozgcloud.document.bescheid.GrpcGetAllBescheidRequest; +import de.ozgcloud.document.bescheid.GrpcGetAllBescheidResponse; +import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftRequest; +import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftResponse; +import de.ozgcloud.document.bescheid.GrpcGetBescheidRequest; +import de.ozgcloud.document.bescheid.GrpcGetBescheidResponse; class BescheidRemoteServiceTest { @@ -55,6 +57,8 @@ class BescheidRemoteServiceTest { private BescheidServiceBlockingStub bescheidServiceStub; @Mock private BescheidMapper bescheidMapper; + @Mock + private BescheidManagerFeaturesMapper featuresMapper; @Nested class TestGetBescheidDraft { @@ -83,18 +87,25 @@ class BescheidRemoteServiceTest { verify(bescheidServiceStub).getBescheidDraft(request); } + @Test + void shouldGetBescheidFromResponse() { + service.getBescheidDraft(VorgangHeaderTestFactory.ID); + + verify(service).getBescheidFromResponse(response); + } + @Test void shouldCallMapper() { doReturn(Optional.of(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID)).when(service).getBescheidFromResponse(response); service.getBescheidDraft(VorgangHeaderTestFactory.ID); - verify(bescheidMapper).fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID); + verify(bescheidMapper).fromGrpcAndVorgangId(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID); } @Test void shouldReturnBescheid() { - when(bescheidMapper.fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID)).thenReturn( + when(bescheidMapper.fromGrpcAndVorgangId(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID)).thenReturn( bescheidDraft); var bescheidDraft = service.getBescheidDraft(VorgangHeaderTestFactory.ID); @@ -110,13 +121,6 @@ class BescheidRemoteServiceTest { assertThat(bescheidDraft).isEmpty(); } - - @Test - void shouldGetBescheidFromResponse() { - service.getBescheidDraft(VorgangHeaderTestFactory.ID); - - verify(service).getBescheidFromResponse(response); - } } @Nested @@ -149,51 +153,92 @@ class BescheidRemoteServiceTest { } @Nested - class TestCanCreateBescheidDocument { + class TestGetBescheid { - private final GrpcBescheidManagerConfigRequest request = GrpcBescheidManagerConfigRequestTestFactory.create(); - private final GrpcBescheidManagerConfigResponse respone = GrpcBescheidManagerConfigResponseTestFactory.create(); + private final GrpcGetBescheidRequest request = GrpcGetBescheidRequestTestFactory.create(); + private final GrpcGetBescheidResponse response = GrpcGetBescheidResponseTestFactory.create(); @BeforeEach void setUp() { - when(bescheidServiceStub.getConfig(request)).thenReturn(respone); + doReturn(request).when(service).buildGetBescheidRequest(any()); + when(bescheidServiceStub.getBescheid(any())).thenReturn(response); } @Test - void shouldCallRemoteService() { - service.canCreateBescheidDocument(); + void shouldBuildGetBescheidRequest() { + service.getBescheid(BescheidTestFactory.ID); - verify(bescheidServiceStub).getConfig(request); + verify(service).buildGetBescheidRequest(BescheidTestFactory.ID); + } + + @Test + void shouldCallGrpcService() { + service.getBescheid(BescheidTestFactory.ID); + + verify(bescheidServiceStub).getBescheid(request); } @Test - void shouldReturnTrue() { - var canCreate = service.canCreateBescheidDocument(); + void shouldCallMapper() { + service.getBescheid(BescheidTestFactory.ID); - assertThat(canCreate).isTrue(); + verify(bescheidMapper).fromGrpc(GrpcGetBescheidResponseTestFactory.GRPC_BESCHEID); } @Test - void shouldReturnFalseIfNoFeaturesAvailable() { - when(bescheidServiceStub.getConfig(request)).thenReturn(GrpcBescheidManagerConfigResponse.newBuilder().build()); + void shouldReturnBescheid() { + var mappedBescheid = BescheidTestFactory.create(); + when(bescheidMapper.fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID)).thenReturn(mappedBescheid); - var canCreate = service.canCreateBescheidDocument(); + var bescheid = service.getBescheid(BescheidTestFactory.ID); - assertThat(canCreate).isFalse(); + assertThat(bescheid).isEqualTo(mappedBescheid); } + } + + @Nested + class TestBuildGetBescheidRequest { @Test - void shouldReturnFalseIfFeatureDisabled() { - var respones = GrpcBescheidManagerConfigResponseTestFactory.createBuilder() - .setFeatures(GrpcBescheidManagerFeaturesTestFactory.createBuilder() - .setCanCreateBescheidDocument(false) - .build()) - .build(); - when(bescheidServiceStub.getConfig(request)).thenReturn(respones); + void shouldHaveId() { + var request = service.buildGetBescheidRequest(BescheidTestFactory.ID); + + assertThat(request.getId()).isEqualTo(BescheidTestFactory.ID); + } + } + + @Nested + class TestGetBescheidManagerFeatures { - var canCreate = service.canCreateBescheidDocument(); + private final GrpcBescheidManagerConfigRequest request = GrpcBescheidManagerConfigRequestTestFactory.create(); + private final GrpcBescheidManagerConfigResponse respone = GrpcBescheidManagerConfigResponseTestFactory.create(); + private final BescheidManagerFeatures mappedFeatures = BescheidManagerFeatures.builder().build(); + + @BeforeEach + void setUp() { + when(bescheidServiceStub.getConfig(request)).thenReturn(respone); + when(featuresMapper.fromGrpc(any())).thenReturn(mappedFeatures); + } + + @Test + void shouldCallGrpcService() { + service.getBescheidManagerFeatures(); + + verify(bescheidServiceStub).getConfig(request); + } + + @Test + void shouldCallMapper() { + service.getBescheidManagerFeatures(); + + verify(featuresMapper).fromGrpc(GrpcBescheidManagerFeaturesTestFactory.create()); + } + + @Test + void shouldReturnMappedFeatures() { + var features = service.getBescheidManagerFeatures(); - assertThat(canCreate).isFalse(); + assertThat(features).isSameAs(mappedFeatures); } } @@ -231,12 +276,12 @@ class BescheidRemoteServiceTest { void shouldMapBescheid() { service.findByVorgangId(VorgangHeaderTestFactory.ID).toList(); - verify(bescheidMapper).fromGrpc(GrpcGetAllBescheidResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID); + verify(bescheidMapper).fromGrpcAndVorgangId(GrpcGetAllBescheidResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID); } @Test void shouldReturnStreamOfBescheide() { - when(bescheidMapper.fromGrpc(any(), any())).thenReturn(bescheid); + when(bescheidMapper.fromGrpcAndVorgangId(any(), any())).thenReturn(bescheid); var bescheide = service.findByVorgangId(VorgangHeaderTestFactory.ID); diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java index 07cb7f98e4ef1018673fb7fbb847c2082870bb28..64f4c2b236348edaf26714e88dd10e1f73a357bb 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java @@ -74,6 +74,27 @@ class BescheidServiceTest { } } + @Nested + class TestGetBescheid { + + @Test + void shouldCallRemoteService() { + service.getBescheid(BescheidTestFactory.ID); + + verify(remoteService).getBescheid(BescheidTestFactory.ID); + } + + @Test + void shouldReturnResultFromRemoteService() { + var remoteServiceResult = BescheidTestFactory.create(); + when(remoteService.getBescheid(BescheidTestFactory.ID)).thenReturn(remoteServiceResult); + + var result = service.getBescheid(BescheidTestFactory.ID); + + assertThat(result).isEqualTo(remoteServiceResult); + } + } + @Nested class TestFindByVorgangId { private final Stream<Bescheid> bescheidsUnsorted = Stream.of(BescheidTestFactory.create()); @@ -147,19 +168,22 @@ class BescheidServiceTest { @Test void shouldCallRemoteService() { + when(remoteService.getBescheidManagerFeatures()).thenReturn(BescheidManagerFeatures.builder().build()); + service.canCreateBescheidDocumentAutomatically(); - verify(remoteService).canCreateBescheidDocument(); + verify(remoteService).getBescheidManagerFeatures(); } @ParameterizedTest @ValueSource(booleans = { true, false }) - void shouldRetrun(boolean canCreateBescheidDocument) { - when(remoteService.canCreateBescheidDocument()).thenReturn(canCreateBescheidDocument); + void shouldReturnFeatureValue(boolean featureValue) { + when(remoteService.getBescheidManagerFeatures()).thenReturn( + BescheidManagerFeatures.builder().canCreateBescheidDocument(featureValue).build()); - var canCreateAutomatically = service.canCreateBescheidDocumentAutomatically(); + var canCreate = service.canCreateBescheidDocumentAutomatically(); - assertThat(canCreateAutomatically).isEqualTo(canCreateBescheidDocument); + assertThat(canCreate).isEqualTo(featureValue); } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java index 2f84362023d62e5ee86f533280ec3b81abe689eb..c71d8b97b9dc54bca7afa98928a53fd16e0374f1 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java @@ -42,7 +42,9 @@ public class BescheidTestFactory { public static final String BESCHIEDEN_AM = "2024-05-27"; public static final boolean BEWILLIGT = true; public static final String BESCHEID_DOCUMENT = UUID.randomUUID().toString(); - public static final List<FileId> ATTACHMENTS = List.of(FileId.from(UUID.randomUUID().toString()), FileId.from(UUID.randomUUID().toString())); + public static final String ATTACHMENT_ID_VALUE = UUID.randomUUID().toString(); + public static final FileId ATTACHMENT_ID = FileId.from(ATTACHMENT_ID_VALUE); + public static final List<FileId> ATTACHMENTS = List.of(ATTACHMENT_ID); public static final String NACHRICHT_TEXT = LoremIpsum.getInstance().getWords(10); public static final String NACHRICHT_SUBJECT = LoremIpsum.getInstance().getWords(3); public static final SendBy SEND_BY = SendBy.MANUAL; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java index c2ddf5fe79fb1427bdb2151306c4cb1768ee59d9..931249f981d8e2acec3e96e031f0ca3f68a75ad8 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java @@ -23,7 +23,7 @@ */ package de.ozgcloud.alfa.bescheid; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigRequest; public class GrpcBescheidManagerConfigRequestTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java index d90b382a10cbac1872efab99746096d56339733b..e28d961a6537c0b43375425623cf8467796a08e4 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java @@ -23,7 +23,7 @@ */ package de.ozgcloud.alfa.bescheid; -import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigResponse; public class GrpcBescheidManagerConfigResponseTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java index 1150827c0ea0ca58770a59fd7994e7a115b601ff..ace46f083aca7c0748d9161ec077dc6c71dce2f1 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java @@ -23,7 +23,7 @@ */ package de.ozgcloud.alfa.bescheid; -import de.ozgcloud.bescheid.GrpcBescheidManagerFeatures; +import de.ozgcloud.document.bescheid.GrpcBescheidManagerFeatures; public class GrpcBescheidManagerFeaturesTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java index 7c05a12f621586e93b7a01b8966d356765d7c9a3..c902cf1899e195310837819ca0a4eacaf8db3034 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java @@ -25,19 +25,22 @@ package de.ozgcloud.alfa.bescheid; import java.util.List; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcSentInfo; -import de.ozgcloud.common.datatype.StringBasedValue; +import de.ozgcloud.document.bescheid.GrpcBescheid; +import de.ozgcloud.document.bescheid.GrpcSentInfo; public class GrpcBescheidTestFactory { public static final String ID = BescheidTestFactory.ID; + public static final String STATUS = BescheidTestFactory.STATUS.toString(); + public static final long VERSION = BescheidTestFactory.VERSION; public static final boolean BEWILLIGT = BescheidTestFactory.BEWILLIGT; public static final String BESCHIEDEN_AM = BescheidTestFactory.BESCHIEDEN_AM; public static final String BESCHEID_DOCUMENT = BescheidTestFactory.BESCHEID_DOCUMENT; - public static final List<String> ATTACHMENTS = BescheidTestFactory.ATTACHMENTS.stream().map(StringBasedValue::toString).toList(); + public static final String ATTACHMENT_ID = BescheidTestFactory.ATTACHMENT_ID_VALUE; + public static final List<String> ATTACHMENTS = List.of(ATTACHMENT_ID); public static final String NACHRICHT_TEXT = BescheidTestFactory.NACHRICHT_TEXT; public static final String NACHRICHT_SUBJECT = BescheidTestFactory.NACHRICHT_SUBJECT; + public static final String SEND_BY = BescheidTestFactory.SEND_BY.toString(); public static final GrpcSentInfo SENT_INFO = GrpcSentInfoTestFactory.create(); public static GrpcBescheid create() { @@ -47,14 +50,15 @@ public class GrpcBescheidTestFactory { public static GrpcBescheid.Builder createBuilder() { return GrpcBescheid.newBuilder() .setId(ID) - .setStatus(BescheidTestFactory.STATUS.toString()) + .setStatus(STATUS) + .setVersion(VERSION) .setBewilligt(BEWILLIGT) .setBeschiedenAm(BESCHIEDEN_AM) .setBescheidDocument(BESCHEID_DOCUMENT) .addAllAttachments(ATTACHMENTS) .setNachrichtText(NACHRICHT_TEXT) .setNachrichtSubject(NACHRICHT_SUBJECT) - .setSendBy(BescheidTestFactory.SEND_BY.toString()) + .setSendBy(SEND_BY) .setSentInfo(SENT_INFO); } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java index ced557a1071248f836947c199f470287913cd02f..3b0e75935aea57e14099e5c8071e54e5c06a8563 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidRequestTestFactory.java @@ -24,7 +24,7 @@ package de.ozgcloud.alfa.bescheid; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.bescheid.GrpcGetAllBescheidRequest; +import de.ozgcloud.document.bescheid.GrpcGetAllBescheidRequest; public class GrpcGetAllBescheidRequestTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java index 9beae7eedc1980f75f54b84b6b84a5b1673816f8..b55dac63003d1347c4517defe3807a07eb1b6d60 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetAllBescheidResponseTestFactory.java @@ -23,8 +23,8 @@ */ package de.ozgcloud.alfa.bescheid; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcGetAllBescheidResponse; +import de.ozgcloud.document.bescheid.GrpcBescheid; +import de.ozgcloud.document.bescheid.GrpcGetAllBescheidResponse; public class GrpcGetAllBescheidResponseTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java index 55b44b9f40c190644ace896510645a32c565d067..8fd8dcd3b17ae9c1df208afb637b455e11ce47a1 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftRequestTestFactory.java @@ -24,7 +24,7 @@ package de.ozgcloud.alfa.bescheid; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest; +import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftRequest; public class GrpcGetBescheidDraftRequestTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java index 491f4532579b798fe419c518148eabbe0eaebdbd..43db699ca9ebb17d7da3a4ff8378dacbb863435b 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidDraftResponseTestFactory.java @@ -23,8 +23,8 @@ */ package de.ozgcloud.alfa.bescheid; -import de.ozgcloud.bescheid.GrpcBescheid; -import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse; +import de.ozgcloud.document.bescheid.GrpcBescheid; +import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftResponse; public class GrpcGetBescheidDraftResponseTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..a78c10c0dbdc058b890b9a9c4255431d0b05e794 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidRequestTestFactory.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import de.ozgcloud.document.bescheid.GrpcGetBescheidRequest; + +class GrpcGetBescheidRequestTestFactory { + + public static GrpcGetBescheidRequest create() { + return createBuilder().build(); + } + + public static GrpcGetBescheidRequest.Builder createBuilder() { + return GrpcGetBescheidRequest.newBuilder().setId(BescheidTestFactory.ID); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..1d073c1b466f3888c5007a1ebe162d5f7be3247b --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidResponseTestFactory.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import de.ozgcloud.document.bescheid.GrpcBescheid; +import de.ozgcloud.document.bescheid.GrpcGetBescheidResponse; + +class GrpcGetBescheidResponseTestFactory { + + public static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create(); + + public static GrpcGetBescheidResponse create() { + return createBuilder().build(); + } + + public static GrpcGetBescheidResponse.Builder createBuilder() { + return GrpcGetBescheidResponse.newBuilder().setBescheid(GRPC_BESCHEID); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java index 39f6fa51231bde4eff18d9becc2dc6fe1f9b34fa..32342f5e1348f4a5a6f80e920462ceb7f6a8f6fa 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java @@ -23,15 +23,12 @@ */ package de.ozgcloud.alfa.bescheid; -import java.time.ZonedDateTime; - -import de.ozgcloud.alfa.common.user.GrpcUserTestFactory; -import de.ozgcloud.bescheid.GrpcSentInfo; +import de.ozgcloud.document.bescheid.GrpcSentInfo; public class GrpcSentInfoTestFactory { - public static final String SENT_AT = ZonedDateTime.now().toString(); - public static final String SENT_BY = GrpcUserTestFactory.ID; + public static final String SENT_AT = SentInfoTestFactory.SENT_AT.toString(); + public static final String SENT_BY = SentInfoTestFactory.SENT_BY.toString(); public static GrpcSentInfo create() { return createBuilder().build(); diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1f84c544ebfe0982fe0fce33c4b7e97b2c68f924 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapperTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.common.binaryfile; + +import static org.assertj.core.api.Assertions.*; + +import java.util.UUID; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +class FileIdMapperTest { + + private final FileIdMapper mapper = Mappers.getMapper(FileIdMapper.class); + private final String fileIdValue = UUID.randomUUID().toString(); + + @Nested + class TestToFileId { + + @Test + void shouldReturnFileId() { + var fileId = mapper.toFileId(fileIdValue); + + assertThat(fileId).isEqualTo(FileId.from(fileIdValue)); + } + } + + @Nested + class TestToString { + + @Test + void shouldReturnFileIdValue() { + var fileIdString = mapper.toString(FileId.from(fileIdValue)); + + assertThat(fileIdString).isEqualTo(fileIdValue); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserIdMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserIdMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..600ad9de19051d434b04b51cf641048f70db1469 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserIdMapperTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.common.user; + +import static org.assertj.core.api.Assertions.*; + +import java.util.UUID; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; +import org.mapstruct.factory.Mappers; + +class UserIdMapperTest { + + private final UserIdMapper mapper = Mappers.getMapper(UserIdMapper.class); + private final String userIdValue = UUID.randomUUID().toString(); + + @Nested + class TestFromString { + + @ParameterizedTest + @NullAndEmptySource + @ValueSource(strings = {" "}) + void shouldReturnNull(String str) { + var userId = mapper.fromString(str); + + assertThat(userId).isNull(); + } + + @Test + void shouldReturnUserId() { + var userId = mapper.fromString(userIdValue); + + assertThat(userId).isEqualTo(UserId.from(userIdValue)); + } + + @Test + void shouldTrimUserIdString() { + var userId = mapper.fromString(" " + userIdValue + " "); + + assertThat(userId).isEqualTo(UserId.from(userIdValue)); + } + } + + @Nested + class TestToString { + + @Test + void shouldReturnUserIdValue() { + var userIdString = mapper.toString(UserId.from(userIdValue)); + + assertThat(userIdString).isEqualTo(userIdValue); + } + } +} diff --git a/lombok.config b/lombok.config index 32903abaf7760ff694e6cc45854316eb10f87137..d248ae3c4da552a1948c74ed6736e9e9d72655bd 100644 --- a/lombok.config +++ b/lombok.config @@ -27,4 +27,5 @@ lombok.log.slf4j.flagUsage = ERROR lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file +lombok.addLombokGeneratedAnnotation = true +lombok.copyableAnnotations += net.devh.boot.grpc.client.inject.GrpcClient \ No newline at end of file