From d81d9ed45c20f47fdf44f741b6618ffbbd88c36f Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 16 Dec 2024 13:20:51 +0100 Subject: [PATCH] OZG-7350 mock zufi --- .../collaboration/CollaborationITCase.java | 82 ++++++++++++++----- .../FachstelleGrpcServiceMock.java | 51 ++++++++++++ .../OrganisationsEinheitGrpcServiceMock.java | 59 +++++++++++++ 3 files changed, 173 insertions(+), 19 deletions(-) create mode 100644 vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleGrpcServiceMock.java create mode 100644 vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/OrganisationsEinheitGrpcServiceMock.java diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java index 8c5abd19a..edbba9162 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java @@ -49,8 +49,11 @@ import org.mockito.Captor; import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Bean; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -70,6 +73,7 @@ import de.ozgcloud.collaboration.CollaborationRequest; import de.ozgcloud.collaboration.CollaborationService; import de.ozgcloud.collaboration.CollaborationServiceGrpc.CollaborationServiceBlockingStub; import de.ozgcloud.collaboration.GrpcGetFileContentRequest; +import de.ozgcloud.collaboration.fachstelle.Fachstelle.FachstelleType; import de.ozgcloud.collaboration.request.CollaborationRequestId; import de.ozgcloud.collaboration.request.CollaborationRequestServiceGrpc.CollaborationRequestServiceBlockingStub; import de.ozgcloud.collaboration.request.GrpcFindRequestsRequest; @@ -99,13 +103,17 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; import io.grpc.Status; import io.grpc.StatusRuntimeException; +import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration; import net.devh.boot.grpc.client.inject.GrpcClient; +import net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration; +import net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration; @SpringBootTest(properties = { "grpc.server.inProcessName=test", "grpc.client.vorgang-manager.address=in-process:test", "grpc.client.ozgcloud-command-manager.address=in-process:test", "grpc.client.file-manager.address=in-process:test", + "grpc.client.zufi-manager.address=in-process:test", "grpc.client.inProcess.address=in-process:test", "grpc.client.pluto.address=in-process:test" }) @@ -117,7 +125,7 @@ class CollaborationITCase { private static final String FIELD_COLLABORATION_VORGANG_ID = "collaborationVorgangId"; private static final String TITEL = "Collaboration Vorgang"; private static final String BESCHREIBUNG = "Beschreibung der Anfrage"; - private static final String MUK_POSTFACH_ID = UUID.randomUUID().toString(); + private static final String ZUFI_ID = UUID.randomUUID().toString(); @Autowired private CommandService commandService; @@ -218,6 +226,10 @@ class CollaborationITCase { } private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId, int collaborationLevel) { + return buildCreateCollaborationVorgangCommand(vorgangId, collaborationLevel, ZUFI_ID); + } + + private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId, int collaborationLevel, String zustaendigeStelleId) { return CreateCommandRequest.builder() .callContext(CallContext.builder().client("test").build()) .vorgangId(vorgangId) @@ -227,7 +239,7 @@ class CollaborationITCase { "titel", TITEL, "beschreibung", BESCHREIBUNG, "collaborationLevel", collaborationLevel, - "zustaendigeStelle", MUK_POSTFACH_ID)) + "zustaendigeStelle", zustaendigeStelleId)) .build(); } @@ -255,8 +267,7 @@ class CollaborationITCase { @Test void shouldSetCollaborationVorgangId() { - var command = commandService.createCommand( - buildCreateCollaborationVorgangCommand(vorgangId, CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL)); + var command = createCommand(); waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); @@ -267,9 +278,7 @@ class CollaborationITCase { @Test void shouldCreateCollaborationVorgang() { - var command = commandService.createCommand( - buildCreateCollaborationVorgangCommand(vorgangId, - CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL)); + var command = createCommand(); waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); @@ -277,10 +286,16 @@ class CollaborationITCase { assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getCollaborationLevel) .isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getOrganisationsEinheitId) - .isEqualTo(MUK_POSTFACH_ID); + .isEqualTo(OrganisationsEinheitGrpcServiceMock.ORGANISATIONS_EINHEIT_ID); assertThat(collaborationVorgang.getClientAttributes()).isEmpty(); } + private Command createCommand() { + return commandService.createCommand( + buildCreateCollaborationVorgangCommand(vorgangId, + CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL, OrganisationsEinheitGrpcServiceMock.ID)); + } + private Vorgang loadCollaborationVorgang(String sourceVorgangId) { var collaborationVorgangId = loadCollaborationRequest(sourceVorgangId).getFirst().getItem().get(FIELD_COLLABORATION_VORGANG_ID); return mongoOperations.findById(collaborationVorgangId, Vorgang.class); @@ -306,7 +321,7 @@ class CollaborationITCase { @Test void shouldCreateCollaborationRequest() { - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + var command = createCommand(); waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); @@ -317,19 +332,19 @@ class CollaborationITCase { @Test void shouldSendPostfachNachricht() { - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + var command = createCommand(); waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); verify(postfachRemoteService).sendMessage(postfachNachrichtCaptor.capture()); assertThat(postfachNachrichtCaptor.getValue().getPostfachAddress()).extracting(PostfachAddress::getIdentifier) - .hasToString(MUK_POSTFACH_ID); + .hasToString(FachstelleGrpcServiceMock.MUK_ID); } @Test void shouldDeleteCollaborationRequest() { doThrow(TechnicalException.class).when(postfachRemoteService).sendMessage(any()); - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + var command = createCommand(); waitUntilCommandHasStatus(command.getId(), CommandStatus.ERROR); @@ -340,13 +355,18 @@ class CollaborationITCase { @Test void shouldFailOnMissingFachstelle() { ReflectionTestUtils.setField(collaborationService, "urlProvider", Optional.empty()); - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + var command = createCommand(); waitUntilCommandHasStatus(command.getId(), CommandStatus.ERROR); command = mongoOperations.findById(command.getId(), Command.class); assertThat(command.getErrorMessage()).contains("Fachstelle not configured."); } + + private Command createCommand() { + return commandService + .createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL, FachstelleGrpcServiceMock.ZUFI_ID)); + } } @DisplayName("Collaboration requests") @@ -361,9 +381,12 @@ class CollaborationITCase { public static final String TITEL = LoremIpsum.getInstance().getWords(5); public static final String BESCHREIBUNG = LoremIpsum.getInstance().getWords(10); - public static final String ZUSTAENDIGE_STELLE = UUID.randomUUID().toString(); public static final String COLLABORATION_VORGANG_ID = UUID.randomUUID().toString(); - public static final int COLLABORATION_lEVEL = 1; + public static final int COLLABORATION_LEVEL = 1; + + private static final String TECHNICAL_ID = OrganisationsEinheitGrpcServiceMock.ID; + private static final String SUBJECT_ID = OrganisationsEinheitGrpcServiceMock.ORGANISATIONS_EINHEIT_ID; + private static final FachstelleType TYPE = FachstelleType.ORGANISATIONS_EINHEIT; private final Vorgang vorgang = VorgangTestFactory.create(); @@ -371,11 +394,14 @@ class CollaborationITCase { CollaborationRequest.PROPERTY_COMMAND_ID, CommandTestFactory.ID, CollaborationRequest.PROPERTY_VORGANG_ID, VorgangTestFactory.ID, CollaborationRequest.PROPERTY_COLLABORATION_VORGANG_ID, COLLABORATION_VORGANG_ID, - CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, String.valueOf(COLLABORATION_lEVEL), + CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, String.valueOf(COLLABORATION_LEVEL), CollaborationRequest.PROPERTY_CREATED_BY, CommandTestFactory.CREATED_BY, CollaborationRequest.PROPERTY_TITEL, TITEL, CollaborationRequest.PROPERTY_BESCHREIBUNG, BESCHREIBUNG, - CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, ZUSTAENDIGE_STELLE); + CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, Map.of( + de.ozgcloud.collaboration.fachstelle.Fachstelle.PROPERTY_TECHNICAL_ID, TECHNICAL_ID, + de.ozgcloud.collaboration.fachstelle.Fachstelle.PROPERTY_SUBJECT_ID, SUBJECT_ID, + de.ozgcloud.collaboration.fachstelle.Fachstelle.PROPERTY_TYPE, TYPE.name())); private final VorgangAttachedItem vorgangAttachedItem = VorgangAttachedItemTestFactory.createBuilder() .id(null) @@ -419,8 +445,8 @@ class CollaborationITCase { assertThat(grpcCollaborationRequest.getId()).isEqualTo(savedCollaborationRequest.getId()); assertThat(grpcCollaborationRequest.getTitel()).isEqualTo(TITEL); assertThat(grpcCollaborationRequest.getBeschreibung()).isEqualTo(BESCHREIBUNG); - assertThat(grpcCollaborationRequest.getZustaendigeStelle()).isEqualTo(ZUSTAENDIGE_STELLE); - assertThat(grpcCollaborationRequest.getCollaborationLevel()).isEqualTo(COLLABORATION_lEVEL); + assertThat(grpcCollaborationRequest.getZustaendigeStelle()).isEqualTo(TECHNICAL_ID); + assertThat(grpcCollaborationRequest.getCollaborationLevel()).isEqualTo(COLLABORATION_LEVEL); assertThat(grpcCollaborationRequest.getCreatedBy()).isEqualTo(CommandTestFactory.CREATED_BY); }); } @@ -470,4 +496,22 @@ class CollaborationITCase { return collaborationRequestStub.withInterceptors(new TestCallContextAttachingInterceptor()); } } + + @TestConfiguration + @ImportAutoConfiguration({ + GrpcServerAutoConfiguration.class, + GrpcServerFactoryAutoConfiguration.class, + GrpcClientAutoConfiguration.class }) + static class ZufiServerTestConfiguration { + + @Bean + FachstelleGrpcServiceMock fachstelleGrpcServiceMock() { + return new FachstelleGrpcServiceMock(); + } + + @Bean + OrganisationsEinheitGrpcServiceMock organisationsEinheitGrpcServiceMock() { + return new OrganisationsEinheitGrpcServiceMock(); + } + } } \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleGrpcServiceMock.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleGrpcServiceMock.java new file mode 100644 index 000000000..48ef451cb --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleGrpcServiceMock.java @@ -0,0 +1,51 @@ +package de.ozgcloud.vorgang.collaboration; + +import java.util.UUID; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.zufi.grpc.fachstelle.FachstelleServiceGrpc.FachstelleServiceImplBase; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelle; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetRequest; +import de.ozgcloud.zufi.grpc.fachstelle.GrpcFachstelleGetResponse; +import io.grpc.stub.StreamObserver; +import net.devh.boot.grpc.server.service.GrpcService; + +@GrpcService +class FachstelleGrpcServiceMock extends FachstelleServiceImplBase { + + static final String ZUFI_ID = UUID.randomUUID().toString(); + static final String MUK_ID = UUID.randomUUID().toString(); + public static final String FIRMEN_NAME = LoremIpsum.getInstance().getWords(2); + public static final String RECHTSFORM = LoremIpsum.getInstance().getWords(1); + public static final String RECHTSFORM_TEXT = LoremIpsum.getInstance().getWords(1); + public static final String REGISTER_NUMMER = UUID.randomUUID().toString(); + public static final String REGISTER_ART = LoremIpsum.getInstance().getWords(1); + public static final String EMAIL_ADRESSE = LoremIpsum.getInstance().getEmail(); + public static final String ANSCHRIFT = LoremIpsum.getInstance().getWords(5); + + @Override + public void getById(GrpcFachstelleGetRequest request, StreamObserver<GrpcFachstelleGetResponse> responseObserver) { + if (request.getId().equals(ZUFI_ID)) { + responseObserver.onNext(buildFachstelleGetResponse()); + responseObserver.onCompleted(); + } else { + throw new AssertionError("Expected zufiId %s. But actual zufiId was %s.".formatted(ZUFI_ID, request.getId())); + } + } + + GrpcFachstelleGetResponse buildFachstelleGetResponse() { + return GrpcFachstelleGetResponse.newBuilder() + .setFachstelle(GrpcFachstelle.newBuilder() + .setId(ZUFI_ID) + .setMukId(MUK_ID) + .setFirmenName(FIRMEN_NAME) + .setRechtsform(RECHTSFORM) + .setRechtsformText(RECHTSFORM_TEXT) + .setRegisterNummer(REGISTER_NUMMER) + .setRegisterArt(REGISTER_ART) + .setEmailAdresse(EMAIL_ADRESSE) + .setAnschrift(ANSCHRIFT)) + .build(); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/OrganisationsEinheitGrpcServiceMock.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/OrganisationsEinheitGrpcServiceMock.java new file mode 100644 index 000000000..113f42dea --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/OrganisationsEinheitGrpcServiceMock.java @@ -0,0 +1,59 @@ +package de.ozgcloud.vorgang.collaboration; + +import java.util.Random; +import java.util.UUID; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcAnschrift; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheit; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetRequest; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcOrganisationsEinheitGetResponse; +import de.ozgcloud.zufi.grpc.organisationseinheit.GrpcXzufiId; +import de.ozgcloud.zufi.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceImplBase; +import io.grpc.stub.StreamObserver; +import net.devh.boot.grpc.server.service.GrpcService; + +@GrpcService +public class OrganisationsEinheitGrpcServiceMock extends OrganisationsEinheitServiceImplBase { + public static final String ID = UUID.randomUUID().toString(); + public static final String ORGANISATIONS_EINHEIT_ID = UUID.randomUUID().toString(); + public static final String SCHEME_AGENCY_ID = UUID.randomUUID().toString(); + public static final GrpcXzufiId XZUFI_ID = GrpcXzufiId.newBuilder().setId(ORGANISATIONS_EINHEIT_ID).setSchemeAgencyId(SCHEME_AGENCY_ID).build(); + public static final String NAME = LoremIpsum.getInstance().getName(); + public static final String SYNONYME = LoremIpsum.getInstance().getWords(5); + public static final String PLZ = LoremIpsum.getInstance().getZipCode(); + public static final String ORT = LoremIpsum.getInstance().getCity(); + public static final String STRASSE = LoremIpsum.getInstance().getWords(2); + public static final String HAUSNUMMER = String.valueOf(new Random().nextInt()); + public static final GrpcAnschrift ANSCHRIFT = GrpcAnschrift.newBuilder() + .setStrasse(STRASSE) + .setHausnummer(HAUSNUMMER) + .setPlz(PLZ) + .setOrt(ORT) + .build(); + public static final String VORGANG_MANAGER_ADDRESS = LoremIpsum.getInstance().getUrl(); + + @Override + public void getById(GrpcOrganisationsEinheitGetRequest request, StreamObserver<GrpcOrganisationsEinheitGetResponse> responseObserver) { + + if (request.getId().equals(ID)) { + responseObserver.onNext(buildOrganisationsEinheitGetResponse()); + responseObserver.onCompleted(); + } else { + throw new AssertionError("Expected id %s. But actual id was %s.".formatted(ID, request.getId())); + } + } + + GrpcOrganisationsEinheitGetResponse buildOrganisationsEinheitGetResponse() { + return GrpcOrganisationsEinheitGetResponse.newBuilder().setOrganisationsEinheit( + GrpcOrganisationsEinheit.newBuilder() + .setId(ID) + .setName(NAME) + .setAnschrift(ANSCHRIFT) + .setVorgangManagerAddress(VORGANG_MANAGER_ADDRESS) + .setXzufiId(XZUFI_ID) + .build()) + .build(); + } +} -- GitLab