Skip to content
Snippets Groups Projects
Commit 21eda9ce authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-6867-organisationseinheit-management-sync' (#93) from...

Merge pull request 'OZG-6867-organisationseinheit-management-sync' (#93) from OZG-6867-organisationseinheit-management-sync into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/zufi-manager/pulls/93


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents ddcc6bcc ee88bb76
No related branches found
No related tags found
No related merge requests found
Showing
with 226 additions and 8 deletions
......@@ -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;
......
......@@ -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
......@@ -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);
}
......@@ -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);
}
}
}
......@@ -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();
}
}
......@@ -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);
......
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());
}
}
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);
}
}
......@@ -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);
}
}
}
......@@ -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 {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment