diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java index 9850d8535baef894d668e7725334796b761bf88a..fb0421f5c3c497cc8580748fcd111a0932218dec 100644 --- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java @@ -1,6 +1,5 @@ package de.ozgcloud.apilib.vorgang.grpc; -import java.util.Collections; import java.util.List; import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor; @@ -28,6 +27,7 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService { private final OzgCloudVorgangMapper mapper; private final OzgCloudVorgangStubMapper stubMapper; + private final OzgCloudVorgangQueryMapper queryMapper; private final OzgCloudCallContextProvider contextProvider; @@ -66,13 +66,23 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService { .build(); } - VorgangServiceBlockingStub getVorgangServiceStub() { - return vorgangServiceStub.withInterceptors(new OzgCloudCallContextAttachingInterceptor(contextProvider)); - } - @Override public List<OzgCloudVorgangStub> find(OzgCloudVorgangQuery query, Page page) { - // TODO Auto-generated method stub - return Collections.emptyList(); + var response = getVorgangServiceStub().findVorgang(buildFindRequest(query, page)); + + return response.getVorgangList().stream().map(stubMapper::fromGrpc).toList(); + } + + GrpcFindVorgangRequest buildFindRequest(OzgCloudVorgangQuery query, Page page) { + return GrpcFindVorgangRequest.newBuilder() + .setLimit(page.getLimit()) + .setOffset(page.getOffset()) + .setQuery(queryMapper.toGrpc(query)) + .setOrderBy(GrpcOrderBy.CREATED_AT_DESC) + .build(); + } + + VorgangServiceBlockingStub getVorgangServiceStub() { + return vorgangServiceStub.withInterceptors(new OzgCloudCallContextAttachingInterceptor(contextProvider)); } } diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindVorgangRequestTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindVorgangRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..3fdca504ed4743193ffe38dc66516c7b123a97d7 --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindVorgangRequestTestFactory.java @@ -0,0 +1,27 @@ +package de.ozgcloud.apilib.vorgang.grpc; + +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.Builder; +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy; +import de.ozgcloud.vorgang.vorgang.GrpcQuery; + +public class GrpcFindVorgangRequestTestFactory { + + public static final GrpcQuery QUERY = GrpcQueryTestFactory.create(); + public static final int LIMIT = (int) (Math.random() * 100); + public static final int OFFSET = (int) (Math.random() * LIMIT); + + public static GrpcFindVorgangRequest create() { + return createBuilder() + .build(); + } + + public static Builder createBuilder() { + return GrpcFindVorgangRequest.newBuilder() + .setLimit(LIMIT) + .setOffset(OFFSET) + .setQuery(QUERY) + .setOrderBy(GrpcOrderBy.CREATED_AT_DESC); + } + +} diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindVorgangResponseTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindVorgangResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..9bd3be8ffc2d771f0e3bf611a0b1d0375396edbc --- /dev/null +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindVorgangResponseTestFactory.java @@ -0,0 +1,22 @@ +package de.ozgcloud.apilib.vorgang.grpc; + +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; +import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse.Builder; +import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; + +public class GrpcFindVorgangResponseTestFactory { + + public static final GrpcVorgangHeader VORGANG_HEADER = GrpcVorgangHeaderTestFactory.create(); + public static final long TOTAL = (long) (Math.random() * 100); + + public static GrpcFindVorgangResponse create() { + return createBuilder().build(); + } + + public static Builder createBuilder() { + return GrpcFindVorgangResponse.newBuilder() + .setTotal(TOTAL) + .addVorgang(VORGANG_HEADER); + } + +} diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java index e93e6d54637aedffdbacb8ca12b010ceaa4253ab..f0c1f15a8f86933f369c8aece52900687a6536b2 100644 --- a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java +++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java @@ -4,6 +4,8 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.List; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -11,7 +13,11 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQueryTestFactory; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStubTestFactory; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; import de.ozgcloud.apilib.vorgang.Page; @@ -24,6 +30,7 @@ import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub class GrpcOzgCloudVorgangServiceTest { @InjectMocks + @Spy private GrpcOzgCloudVorgangService service; @Mock @@ -32,6 +39,8 @@ class GrpcOzgCloudVorgangServiceTest { private OzgCloudVorgangMapper mapper; @Mock private OzgCloudVorgangStubMapper stubMapper; + @Mock + private OzgCloudVorgangQueryMapper queryMapper; @Nested class TestGetById { @@ -150,4 +159,99 @@ class GrpcOzgCloudVorgangServiceTest { } } + + @Nested + class TestFind { + + private static final Page PAGE = Page.startPage(); + private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.create(); + private final GrpcFindVorgangRequest request = GrpcFindVorgangRequestTestFactory.create(); + private final GrpcFindVorgangResponse response = GrpcFindVorgangResponseTestFactory.create(); + + @Mock + private VorgangServiceBlockingStub stubWithInterceptor; + + @BeforeEach + void mock() { + doReturn(stubWithInterceptor).when(service).getVorgangServiceStub(); + doReturn(request).when(service).buildFindRequest(query, PAGE); + when(stubWithInterceptor.findVorgang(request)).thenReturn(response); + } + + @Test + void shouldGetVorgangServiceStub() { + callService(); + + verify(service).getVorgangServiceStub(); + } + + @Test + void shouldBuildFindRequest() { + callService(); + + verify(service).buildFindRequest(query, PAGE); + } + + @Test + void shouldFindVorgang() { + callService(); + + verify(stubWithInterceptor).findVorgang(request); + } + + @Test + void shouldMapResponse() { + callService(); + + verify(stubMapper).fromGrpc(GrpcFindVorgangResponseTestFactory.VORGANG_HEADER); + } + + @Test + void shouldReturnMappedVorgangStubs() { + var mappedVorgangStub = OzgCloudVorgangStubTestFactory.create(); + when(stubMapper.fromGrpc(GrpcFindVorgangResponseTestFactory.VORGANG_HEADER)).thenReturn(mappedVorgangStub); + + var vorgangStubs = callService(); + + assertThat(vorgangStubs).containsExactly(mappedVorgangStub); + } + + private List<OzgCloudVorgangStub> callService() { + return service.find(query, PAGE); + } + } + + @Nested + class TestBuildFindRequest { + + private final Page page = Page.builder() + .limit(GrpcFindVorgangRequestTestFactory.LIMIT) + .offset(GrpcFindVorgangRequestTestFactory.OFFSET) + .build(); + + private final OzgCloudVorgangQuery ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create(); + + @BeforeEach + void mockMapper() { + when(queryMapper.toGrpc(ozgCloudVorgangQuery)).thenReturn(GrpcFindVorgangRequestTestFactory.QUERY); + } + + @Test + void shouldMapToGrpcQuery() { + callService(); + + verify(queryMapper).toGrpc(ozgCloudVorgangQuery); + } + + @Test + void shouldReturnRequest() { + var request = callService(); + + assertThat(request).usingRecursiveComparison().isEqualTo(GrpcFindVorgangRequestTestFactory.create()); + } + + private GrpcFindVorgangRequest callService() { + return service.buildFindRequest(ozgCloudVorgangQuery, page); + } + } }