diff --git a/zufi-manager-interface/src/main/protobuf/organisationseinheit.model.proto b/zufi-manager-interface/src/main/protobuf/organisationseinheit.model.proto index 576888a3c60f61321f7e05dccd71a584a447c22d..01eb49d57010bca80ccd6b855b41eafbc0dd71f6 100644 --- a/zufi-manager-interface/src/main/protobuf/organisationseinheit.model.proto +++ b/zufi-manager-interface/src/main/protobuf/organisationseinheit.model.proto @@ -23,6 +23,14 @@ message GrpcOrganisationsEinheitSearchResponse { repeated GrpcOrganisationsEinheit organisationsEinheiten = 1; } +message GrpcGetByOrganisationsEinheitIdRequest { + string organisationsEinheitId = 1; +} + +message GrpcGetByOrganisationsEinheitIdResponse { + repeated GrpcOrganisationsEinheit organisationsEinheiten = 1; +} + message GrpcOrganisationsEinheit { string id = 1; string name = 2; diff --git a/zufi-manager-interface/src/main/protobuf/organisationseinheit.proto b/zufi-manager-interface/src/main/protobuf/organisationseinheit.proto index 4e3f7d0e2f0ad413d1c37711eb65189f878823a0..37beb2f7e953effd18c3f667d2d74f800802366f 100644 --- a/zufi-manager-interface/src/main/protobuf/organisationseinheit.proto +++ b/zufi-manager-interface/src/main/protobuf/organisationseinheit.proto @@ -12,4 +12,6 @@ service OrganisationsEinheitService { rpc Search(GrpcOrganisationsEinheitSearchRequest) returns (GrpcOrganisationsEinheitSearchResponse); rpc GetById(GrpcOrganisationsEinheitGetRequest) returns (GrpcOrganisationsEinheitGetResponse); + + rpc GetByOrganisationsEinheitId(GrpcGetByOrganisationsEinheitIdRequest) returns (GrpcGetByOrganisationsEinheitIdResponse); } \ No newline at end of file diff --git a/zufi-manager-model/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepository.java b/zufi-manager-model/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepository.java index ffbe6e8ed7e1ab1e65a4cde9ed1efe5977845f13..d955223267a4081db86584a8015db72f599fc6fa 100644 --- a/zufi-manager-model/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepository.java +++ b/zufi-manager-model/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepository.java @@ -28,6 +28,7 @@ import java.util.Optional; import org.springframework.data.mongodb.core.query.TextCriteria; import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; import org.springframework.stereotype.Repository; @Repository @@ -54,4 +55,9 @@ interface OrganisationsEinheitRepository extends MongoRepository<OrganisationsEi default TextCriteria buildTextCriteria(String text) { return TextCriteria.forDefaultLanguage().matching(text); } + + @Query("{ 'xzufiId._id': ?0 }") + List<OrganisationsEinheit> findByOrganisationsEinheitId(String organisationsEinheitId); } + + diff --git a/zufi-manager-model/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepositoryITCase.java b/zufi-manager-model/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepositoryITCase.java index 144dbecb9fe0837c883a73860a3baa5898a260ae..911827bd834ef0ce054265dd9766c63d066608c0 100644 --- a/zufi-manager-model/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepositoryITCase.java +++ b/zufi-manager-model/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitRepositoryITCase.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*; import java.util.Optional; import java.util.Set; +import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -241,4 +242,37 @@ class OrganisationsEinheitRepositoryITCase { .containsExactly(organisationsEinheit1, organisationsEinheit3, organisationsEinheit2); } } + + @Nested + class TestFindByOrganisationsEinheitId { + + public static final String ORGANISATIONS_EINHEIT_ID = OrganisationsEinheitTestFactory.XZUFI_ID.getId(); + + private final OrganisationsEinheit organisationsEinheit1 = OrganisationsEinheitTestFactory.createBuilder() + .id(null) + .xzufiId(XzufiId.builder().id(ORGANISATIONS_EINHEIT_ID).schemeAgencyId(UUID.randomUUID().toString()).build()) + .build(); + private final OrganisationsEinheit organisationsEinheit2 = OrganisationsEinheitTestFactory.createBuilder() + .id(null) + .xzufiId(XzufiId.builder().id(UUID.randomUUID().toString()).schemeAgencyId(UUID.randomUUID().toString()).build()) + .build(); + private final OrganisationsEinheit organisationsEinheit3 = OrganisationsEinheitTestFactory.createBuilder() + .id(null) + .xzufiId(XzufiId.builder().id(ORGANISATIONS_EINHEIT_ID).schemeAgencyId(UUID.randomUUID().toString()).build()) + .build(); + + @BeforeEach + void initDatabase() { + repository.save(organisationsEinheit1); + repository.save(organisationsEinheit2); + repository.save(organisationsEinheit3); + } + + @Test + void shouldFindAllOrganisationsEinheitenWithId() { + var result = repository.findByOrganisationsEinheitId(ORGANISATIONS_EINHEIT_ID); + + assertThat(result).usingRecursiveFieldByFieldElementComparatorIgnoringFields("id").containsExactlyInAnyOrder(organisationsEinheit1, organisationsEinheit3); + } + } } diff --git a/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcService.java b/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcService.java index 6d096f3bd1cbef4391c96ae310ec61560639175c..c643f4030ab13d55dddda127dca62a1a6ea93b5d 100644 --- a/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcService.java +++ b/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcService.java @@ -2,6 +2,8 @@ package de.ozgcloud.zufi.organisationseinheit; import java.util.List; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdRequest; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdResponse; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitSearchRequest; @@ -48,4 +50,19 @@ class OrganisationsEinheitGrpcService extends OrganisationsEinheitServiceImplBas return responseBuilder.build(); } + @Override + public void getByOrganisationsEinheitId(GrpcGetByOrganisationsEinheitIdRequest request, + StreamObserver<GrpcGetByOrganisationsEinheitIdResponse> responseObserver) { + var organisationsEinheiten = searchService.getByOrganisationsEinheitId(request.getOrganisationsEinheitId()); + responseObserver.onNext(buildGetByOrganisationsEinheitIdResponse(organisationsEinheiten)); + responseObserver.onCompleted(); + } + + GrpcGetByOrganisationsEinheitIdResponse buildGetByOrganisationsEinheitIdResponse(List<OrganisationsEinheit> organisationsEinheiten) { + var responseBuilder = GrpcGetByOrganisationsEinheitIdResponse.newBuilder(); + organisationsEinheiten.stream() + .map(mapper::fromOrganisationsEinheit) + .forEach(responseBuilder::addOrganisationsEinheiten);; + return responseBuilder.build(); + } } diff --git a/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchService.java b/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchService.java index 0825f1ff8c723fcea19d6b01aa97a5975534581c..8651e615fe388a490d11bdf82627b296c8d88ce1 100644 --- a/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchService.java +++ b/zufi-manager-server/src/main/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchService.java @@ -17,6 +17,10 @@ class OrganisationsEinheitSearchService { return repository.findById(id).orElseThrow(() -> new OrganisationsEinheitNotFoundException(id)); } + public List<OrganisationsEinheit> getByOrganisationsEinheitId(String organisationsEinheitId) { + return repository.findByOrganisationsEinheitId(organisationsEinheitId); + } + public List<OrganisationsEinheit> search(String text, String ars) { if (StringUtils.isEmpty(ars)) { return repository.findAllContaining(text); diff --git a/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/GrpcGetByOrganisationsEinheitIdRequestTestFactory.java b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/GrpcGetByOrganisationsEinheitIdRequestTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..d049be7d727033b767de25c862c0afbe3e7ade51 --- /dev/null +++ b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/GrpcGetByOrganisationsEinheitIdRequestTestFactory.java @@ -0,0 +1,15 @@ +package de.ozgcloud.zufi.organisationseinheit; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdRequest; + +class GrpcGetByOrganisationsEinheitIdRequestTestFactory { + + public static GrpcGetByOrganisationsEinheitIdRequest create() { + return createBuilder().build(); + } + + public static GrpcGetByOrganisationsEinheitIdRequest.Builder createBuilder() { + return GrpcGetByOrganisationsEinheitIdRequest.newBuilder() + .setOrganisationsEinheitId(OrganisationsEinheitTestFactory.XZUFI_ID.getId()); + } +} diff --git a/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/GrpcGetByOrganisationsEinheitIdResponseTestFactory.java b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/GrpcGetByOrganisationsEinheitIdResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f47342ab59431f755e574916f23755f1344710d9 --- /dev/null +++ b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/GrpcGetByOrganisationsEinheitIdResponseTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.zufi.organisationseinheit; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdResponse; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; + +class GrpcGetByOrganisationsEinheitIdResponseTestFactory { + + public static final GrpcOrganisationsEinheit GRPC_ORGANISATIONS_EINHEIT = GrpcOrganisationsEinheitTestFactory.create(); + + public static GrpcGetByOrganisationsEinheitIdResponse create() { + return createBuilder().build(); + } + + public static GrpcGetByOrganisationsEinheitIdResponse.Builder createBuilder() { + return GrpcGetByOrganisationsEinheitIdResponse.newBuilder() + .addOrganisationsEinheiten(GRPC_ORGANISATIONS_EINHEIT); + } +} diff --git a/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcServiceTest.java b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcServiceTest.java index fe61176d657b985cc322e1d99082e004a5730ca5..8a5b62e561687319d9fe7cadda583ecd428aa39e 100644 --- a/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcServiceTest.java +++ b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitGrpcServiceTest.java @@ -14,6 +14,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcGetByOrganisationsEinheitIdResponse; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; @@ -26,7 +27,7 @@ class OrganisationsEinheitGrpcServiceTest { @InjectMocks private OrganisationsEinheitGrpcService service; @Mock - private OrganisationsEinheitSearchService organisationsEinheitSearchService; + private OrganisationsEinheitSearchService searchService; @Mock private GrpcOrganisationsEinheitMapper mapper; @@ -52,7 +53,7 @@ class OrganisationsEinheitGrpcServiceTest { @BeforeEach void setUpMocks() { - when(organisationsEinheitSearchService.search(request.getSearchBy(), request.getArs())).thenReturn(organisationsEinheiten); + when(searchService.search(request.getSearchBy(), request.getArs())).thenReturn(organisationsEinheiten); when(mapper.fromOrganisationsEinheit(organisationsEinheit)).thenReturn(grpcOrganisationsEinheit); when(mapper.fromOrganisationsEinheit(organisationsEinheit2)).thenReturn(grpcOrganisationsEinheit2); } @@ -61,11 +62,11 @@ class OrganisationsEinheitGrpcServiceTest { void shouldCallService() { callService(); - verify(organisationsEinheitSearchService).search(request.getSearchBy(), request.getArs()); + verify(searchService).search(request.getSearchBy(), request.getArs()); } @Test - void shouldCreateResponse() { + void shouldBuildResponse() { callService(); verify(service).buildOrganisationsEinheitSearchResponse(organisationsEinheiten); @@ -93,7 +94,7 @@ class OrganisationsEinheitGrpcServiceTest { @BeforeEach void setUpMocks() { - when(organisationsEinheitSearchService.search(request.getSearchBy(), request.getArs())).thenReturn(organisationsEinheiten); + when(searchService.search(request.getSearchBy(), request.getArs())).thenReturn(organisationsEinheiten); when(mapper.fromOrganisationsEinheit(organisationsEinheit)).thenReturn(grpcOrganisationsEinheit); when(mapper.fromOrganisationsEinheit(organisationsEinheit2)).thenReturn(grpcOrganisationsEinheit2); } @@ -139,7 +140,7 @@ class OrganisationsEinheitGrpcServiceTest { @BeforeEach void setUpMocks() { - when(organisationsEinheitSearchService.getById(organisationsEinheitId)).thenReturn(organisationsEinheit); + when(searchService.getById(organisationsEinheitId)).thenReturn(organisationsEinheit); when(mapper.fromOrganisationsEinheit(organisationsEinheit)).thenReturn(grpcOrganisationsEinheit); } @@ -147,11 +148,11 @@ class OrganisationsEinheitGrpcServiceTest { void shouldCallService() { callService(); - verify(organisationsEinheitSearchService).getById(organisationsEinheitId); + verify(searchService).getById(organisationsEinheitId); } @Test - void shouldCreateResponse() { + void shouldBuildResponse() { callService(); verify(service).buildOrganisationsEinheitGetResponse(organisationsEinheit); @@ -206,4 +207,86 @@ class OrganisationsEinheitGrpcServiceTest { } + @Nested + class TestGetByOrganisationsEinheitId { + + public static final String ORGANISATIONS_EINHEIT_ID = OrganisationsEinheitTestFactory.XZUFI_ID.getId(); + + private final List<OrganisationsEinheit> organisationsEinheiten = List.of(organisationsEinheit); + private final GrpcGetByOrganisationsEinheitIdResponse response = GrpcGetByOrganisationsEinheitIdResponseTestFactory.create(); + + @Mock + private StreamObserver<GrpcGetByOrganisationsEinheitIdResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcGetByOrganisationsEinheitIdResponse> responseCaptor; + + @BeforeEach + void init() { + when(searchService.getByOrganisationsEinheitId(ORGANISATIONS_EINHEIT_ID)).thenReturn(organisationsEinheiten); + doReturn(response).when(service).buildGetByOrganisationsEinheitIdResponse(organisationsEinheiten); + } + + @Test + void shouldCallService() { + callService(); + + verify(searchService).getByOrganisationsEinheitId(ORGANISATIONS_EINHEIT_ID); + } + + @Test + void shouldBuildResponse() { + callService(); + + verify(service).buildGetByOrganisationsEinheitIdResponse(organisationsEinheiten); + } + + @Test + void shouldReturnResponse() { + callService(); + + verify(responseObserver).onNext(responseCaptor.capture()); + assertThat(responseCaptor.getValue()).isEqualTo(response); + } + + @Test + void shouldCompleteResponse() { + callService(); + + verify(responseObserver).onCompleted(); + } + + private void callService() { + service.getByOrganisationsEinheitId(GrpcGetByOrganisationsEinheitIdRequestTestFactory.create(), responseObserver); + } + } + + @Nested + class TestBuildGetByOrganisationsEinheitIdResponse { + + private final List<OrganisationsEinheit> organisationsEinheiten = List.of(organisationsEinheit); + + @BeforeEach + void setup() { + when(mapper.fromOrganisationsEinheit(organisationsEinheit)).thenReturn(grpcOrganisationsEinheit); + } + + @Test + void shouldMapOrganisationsEinheit() { + callService(); + + verify(mapper).fromOrganisationsEinheit(organisationsEinheit); + } + + @Test + void shouldReturnResponse() { + var result = callService(); + + assertThat(result.getOrganisationsEinheitenList()).containsExactly(GrpcGetByOrganisationsEinheitIdResponseTestFactory.GRPC_ORGANISATIONS_EINHEIT); + } + + private GrpcGetByOrganisationsEinheitIdResponse callService() { + return service.buildGetByOrganisationsEinheitIdResponse(organisationsEinheiten); + } + } } diff --git a/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchServiceTest.java b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchServiceTest.java index 3f4fd40e966c48c3556feb9791b5552be2a520d0..5d3561ced2b0d58a566643488ce3bb5f0a6a7030 100644 --- a/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchServiceTest.java +++ b/zufi-manager-server/src/test/java/de/ozgcloud/zufi/organisationseinheit/OrganisationsEinheitSearchServiceTest.java @@ -64,6 +64,37 @@ class OrganisationsEinheitSearchServiceTest { } } + @Nested + class TestGetByOrganisationsEinheitId { + + public static final String ORGANISATIONS_EINHEIT_ID = OrganisationsEinheitTestFactory.XZUFI_ID.getId(); + + private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create(); + + @BeforeEach + void init() { + when(repository.findByOrganisationsEinheitId(ORGANISATIONS_EINHEIT_ID)).thenReturn(List.of(organisationsEinheit)); + } + + @Test + void shouldFindByOrganisationsEinheitId() { + callService(); + + verify(repository).findByOrganisationsEinheitId(ORGANISATIONS_EINHEIT_ID); + } + + @Test + void shouldReturnOrganisationsEinheiten() { + var result = callService(); + + assertThat(result).containsExactly(organisationsEinheit); + } + + private List<OrganisationsEinheit> callService() { + return service.getByOrganisationsEinheitId(ORGANISATIONS_EINHEIT_ID); + } + } + @Nested class TestSearch {