diff --git a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java index 370151b741acd26e8de4ad99dca5e1961a0fab70..395c02868b9a1a1cf6c3f9656c6a19b50366af43 100644 --- a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java +++ b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarMapper.java @@ -9,27 +9,36 @@ import org.mapstruct.MappingConstants; import org.mapstruct.NullValueCheckStrategy; import org.mapstruct.ReportingPolicy; import org.mapstruct.ValueMapping; +import org.springframework.beans.factory.annotation.Autowired; +import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper; import de.itvsh.ozg.pluto.grpc.command.GrpcCommand; +import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcVorgangAttachedItem; @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) -public interface KommentarMapper { +abstract class KommentarMapper { static final String ID = "id"; - static final String VERSION = "version"; static final String TEXT = "text"; static final String CREATED_BY = "createdBy"; static final String CREATED_AT = "createdAt"; + @Autowired + private GrpcObjectMapper grpcObjectMapper; + @Mapping(target = "kommentar", ignore = true) @ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL) @ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL) - KommentarCommand toKommentarCommand(GrpcCommand command); + abstract KommentarCommand toKommentarCommand(GrpcCommand command); + + public Kommentar fromItem(GrpcVorgangAttachedItem vorgangAttachedItem) { + return fromItemMap(grpcObjectMapper.mapFromGrpc(vorgangAttachedItem.getItem()), vorgangAttachedItem.getVersion()); + } - default Kommentar fromItemMap(Map<String, Object> map) { + Kommentar fromItemMap(Map<String, Object> map, long version) { return Kommentar.builder() .id((String) map.get(ID)) - .version((long) map.get(VERSION)) + .version(version) .createdAt(ZonedDateTime.parse((String) map.get(CREATED_AT))) .createdBy((String) map.get(CREATED_BY)) .text((String) map.get(TEXT)) diff --git a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java index 2e2d6c6cb0ce3dab68978db6e72f06bafcb51ef7..c6873ea395c1988420c1bef8057ae5f95b125276 100644 --- a/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java +++ b/goofy-server/src/main/java/de/itvsh/goofy/kommentar/KommentarRemoteService.java @@ -6,31 +6,25 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.itvsh.goofy.GoofyServerApplication; -import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper; import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; -import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; import de.itvsh.ozg.pluto.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; import net.devh.boot.grpc.client.inject.GrpcClient; @Service class KommentarRemoteService { + static final String ITEM_NAME = "Kommentar"; @GrpcClient(GoofyServerApplication.GRPC_CLIENT) private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; @Autowired private KommentarMapper mapper; - @Autowired - private GrpcObjectMapper grpcObjectMapper; public Stream<Kommentar> findByVorgangId(String vorgangId) { - GrpcFindVorgangAttachedItemResponse response = vorgangAttachedItemServiceStub - .find(buildFindRequest(vorgangId)); + var response = vorgangAttachedItemServiceStub.find(buildFindRequest(vorgangId)); - return response.getVorgangAttachedItemsList().stream() - .map(item -> grpcObjectMapper.mapFromGrpc(item.getItem())) - .map(mapper::fromItemMap); + return response.getVorgangAttachedItemsList().stream().map(mapper::fromItem); } GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) { @@ -42,8 +36,8 @@ class KommentarRemoteService { public Kommentar getById(String kommentarId) { var response = vorgangAttachedItemServiceStub.getById(buildRequest(kommentarId)); - var kommentar = mapper.fromItemMap(grpcObjectMapper.mapFromGrpc(response.getVorgangAttachedItem().getItem())); - return kommentar.toBuilder().vorgangId(response.getVorgangAttachedItem().getVorgangId()).build(); + + return mapper.fromItem(response.getVorgangAttachedItem()).toBuilder().vorgangId(response.getVorgangAttachedItem().getVorgangId()).build(); } private GrpcVorgangAttachedItemRequest buildRequest(String kommentarId) { diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java index 1865abc67e4131ec816bf3f90907c7a30f7ea6a7..b059c5ec3dd1177dfd22673b6aa73594abf671e5 100644 --- a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java +++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarMapperTest.java @@ -1,15 +1,55 @@ package de.itvsh.goofy.kommentar; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; import static org.assertj.core.api.Assertions.*; +import de.itvsh.goofy.vorgang.GrpcVorgangAttachedItemTestFactory; +import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper; + class KommentarMapperTest { + @Spy + @InjectMocks private KommentarMapper mapper = Mappers.getMapper(KommentarMapper.class); + @Mock + private GrpcObjectMapper grpcObjectMapper; + + @DisplayName("Map from item") + @Nested + class TestFromItem { + + @BeforeEach + void mockMapper() { + when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(KommentarTestFactory.createAsMap()); + } + + @Test + void shouldCallGrpcObjectMapper() { + mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); + + verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM); + } + + @Test + void shouldCallMapperFromItemMap() { + mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); + + verify(mapper).fromItemMap(KommentarTestFactory.createAsMap(), KommentarTestFactory.VERSION); + } + } + @DisplayName("Map from item map") @Nested class TestFromItemMap { @@ -50,6 +90,6 @@ class KommentarMapperTest { } private Kommentar map() { - return mapper.fromItemMap(KommentarTestFactory.createAsMap()); + return mapper.fromItemMap(KommentarTestFactory.createAsMap(), KommentarTestFactory.VERSION); } } diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java index 6b8c32c2b10a75d57a416b112e405f229cc339cd..364b8af57e85a8873ad4f58d55988c094d21b392 100644 --- a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java +++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarRemoteServiceTest.java @@ -6,6 +6,7 @@ import static org.mockito.Mockito.*; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -14,7 +15,6 @@ import org.mockito.Spy; import de.itvsh.goofy.vorgang.GrpcVorgangAttachedItemTestFactory; import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory; -import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper; import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest; import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse; import de.itvsh.ozg.pluto.vorgangAttachedItem.GrpcVorgangAttachedItem; @@ -27,24 +27,23 @@ class KommentarRemoteServiceTest { @Spy @InjectMocks private KommentarRemoteService service; - @Mock private VorgangAttachedItemServiceBlockingStub vorgangAttachedItemServiceStub; @Mock private KommentarMapper mapper; - @Mock - private GrpcObjectMapper grpcObjectMapper; private GrpcVorgangAttachedItem kommentar = GrpcVorgangAttachedItemTestFactory.create(); + @DisplayName("Find by vorgangId") @Nested class TestFindByVorgangId { private GrpcFindVorgangAttachedItemRequest request = GrpcFindVorgangAttachedItemRequest.newBuilder() - .setVorgangId(VorgangHeaderTestFactory.ID).setItemName(KommentarRemoteService.ITEM_NAME).build(); + .setVorgangId(VorgangHeaderTestFactory.ID) + .setItemName(KommentarRemoteService.ITEM_NAME) + .build(); private GrpcFindVorgangAttachedItemResponse response = GrpcFindVorgangAttachedItemResponse.newBuilder() .clearVorgangAttachedItems() - .addVorgangAttachedItems(kommentar) .addVorgangAttachedItems(kommentar).build(); @BeforeEach @@ -61,10 +60,10 @@ class KommentarRemoteServiceTest { @Test void shouldCallMapper() { - Stream<Kommentar> result = service.findByVorgangId(VorgangHeaderTestFactory.ID); + var result = service.findByVorgangId(VorgangHeaderTestFactory.ID); collectStreamElementsToTriggerLazyStream(result); - verify(mapper, times(2)).fromItemMap(any()); + verify(mapper).fromItem(any()); } private void collectStreamElementsToTriggerLazyStream(Stream<Kommentar> stream) { @@ -72,17 +71,20 @@ class KommentarRemoteServiceTest { } } + @DisplayName("Find by id") @Nested class TestGetById { - GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponse.newBuilder() - .setVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()).build(); - GrpcVorgangAttachedItemRequest request = GrpcVorgangAttachedItemRequest.newBuilder().setId(KommentarTestFactory.ID).build(); + private GrpcVorgangAttachedItemResponse response = GrpcVorgangAttachedItemResponse.newBuilder() + .setVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create()) + .build(); + private GrpcVorgangAttachedItemRequest request = GrpcVorgangAttachedItemRequest.newBuilder() + .setId(KommentarTestFactory.ID) + .build(); @BeforeEach void mockStub() { when(vorgangAttachedItemServiceStub.getById(any())).thenReturn(response); - when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(KommentarTestFactory.createAsMap()); - when(mapper.fromItemMap(any())).thenReturn(KommentarTestFactory.create()); + when(mapper.fromItem(any())).thenReturn(KommentarTestFactory.create()); } @Test @@ -96,7 +98,7 @@ class KommentarRemoteServiceTest { void shouldCallMapper() { service.getById(KommentarTestFactory.ID); - verify(mapper).fromItemMap(any()); + verify(mapper).fromItem(any()); } } } diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java index 096dcde7839aa6a9ffdc570c0fcc5e9188dea965..34815cd0a577824603a3929cba29eec8cfb5f37b 100644 --- a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java +++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java @@ -38,7 +38,6 @@ public class KommentarTestFactory { public static Map<String, Object> createAsMap() { return Map.of( KommentarMapper.ID, ID, - KommentarMapper.VERSION, VERSION, KommentarMapper.TEXT, TEXT, KommentarMapper.CREATED_BY, CREATED_BY, KommentarMapper.CREATED_AT, CREATED_AT_STR); diff --git a/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java b/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java index 78ffae49fa4b0e2a3fd37cd2932c69cf16dde805..3b21f24d6a98eb7c2808706afdc8dcd35648ca81 100644 --- a/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java +++ b/goofy-server/src/test/java/de/itvsh/goofy/wiedervorlage/WiedervorlageMapperTest.java @@ -21,7 +21,6 @@ import de.itvsh.goofy.common.binaryfile.BinaryFileTestFactory; import de.itvsh.goofy.common.binaryfile.FileIdMapper; import de.itvsh.goofy.vorgang.GrpcVorgangAttachedItemTestFactory; import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper; -import de.itvsh.ozg.pluto.common.GrpcObject; class WiedervorlageMapperTest { @@ -46,7 +45,7 @@ class WiedervorlageMapperTest { void shouldCallGrpcObjectMapper() { mapper.fromItem(GrpcVorgangAttachedItemTestFactory.create()); - verify(grpcObjectMapper).mapFromGrpc(any(GrpcObject.class)); + verify(grpcObjectMapper).mapFromGrpc(GrpcVorgangAttachedItemTestFactory.ITEM); } @Test