From 82b1d7d92a440c9d82f20dbafdd944279f399c03 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Fri, 26 Jul 2024 15:33:47 +0200 Subject: [PATCH] OZG-6179 adjust proto file; set accessible --- .../src/main/protobuf/antragraum.model.proto | 34 ++- nachrichten-manager-server/pom.xml | 2 +- .../antragraum/AntragraumGrpcService.java | 19 +- .../antragraum/AntragraumNachrichtMapper.java | 10 +- .../antragraum/AntragraumService.java | 37 ++- .../nachrichten/antragraum/Rueckfrage.java | 8 +- .../antragraum/RueckfrageMapper.java | 15 +- .../antragraum/AntragraumGrpcServiceTest.java | 42 ++- .../AntragraumNachrichtMapperTest.java | 16 +- .../antragraum/AntragraumServiceTest.java | 256 ++++++++++++++---- ...rpcFindRueckfragenResponseTestFactory.java | 12 + .../GrpcRueckfrageHeadTestFactory.java | 12 + .../antragraum/GrpcRueckfrageTestFactory.java | 5 +- .../antragraum/RueckfrageMapperTest.java | 14 - .../antragraum/RueckfrageTestFactory.java | 4 +- 15 files changed, 334 insertions(+), 152 deletions(-) create mode 100644 nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfragenResponseTestFactory.java create mode 100644 nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageHeadTestFactory.java diff --git a/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto b/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto index 7efeb87..3450413 100644 --- a/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto +++ b/nachrichten-manager-interface/src/main/protobuf/antragraum.model.proto @@ -37,22 +37,36 @@ message GrpcFindRueckfragenRequest { } message GrpcFindRueckfragenResponse { - repeated GrpcRueckfrage rueckfrage = 1; + repeated GrpcRueckfrageHead rueckfrageHead = 1; +} + +message GrpcRueckfrageHead { + string id = 1; + string vorgangId = 2; + string vorgangName = 3; + string vorgangNummer = 4; + string sentAt = 5; + string answeredAt = 6; + string status = 7; + string trustLevel = 8; + bool accessible = 9; } message GrpcRueckfrage { string id = 1; string vorgangId = 2; string vorgangName = 3; - string sentAt = 4; - string answeredAt = 5; - string status = 6; - string text = 7; - repeated string attachmentFileId = 8; - repeated GrpcRueckfrageAnswer answers = 9; - string vorgangNummer = 10; - string trustLevel = 11; - string accessible = 12; + string vorgangNummer = 4; + string sentAt = 5; + string answeredAt = 6; + string status = 7; + string trustLevel = 8; + bool accessible = 9; + + string text = 10; + + repeated string attachmentFileId = 11; + repeated GrpcRueckfrageAnswer answers = 12; } message GrpcSendRueckfrageAnswerRequest { diff --git a/nachrichten-manager-server/pom.xml b/nachrichten-manager-server/pom.xml index b4f9d89..2f9c3f0 100644 --- a/nachrichten-manager-server/pom.xml +++ b/nachrichten-manager-server/pom.xml @@ -45,7 +45,7 @@ <jaxb-maven-plugin.version>3.0.1</jaxb-maven-plugin.version> <ozg-info-manager-interface.version>0.1.0-SNAPSHOT</ozg-info-manager-interface.version> <bayernid-proxy-interface.version>0.1.0</bayernid-proxy-interface.version> - <vorgang-manager.version>2.8.0</vorgang-manager.version> + <vorgang-manager.version>2.11.0-SNAPSHOT</vorgang-manager.version> <muk-postfach.version>0.1.0-SNAPSHOT</muk-postfach.version> <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> </properties> diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java index b7509fe..8d5a6cf 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java @@ -49,24 +49,14 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB @Override public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) { - var rueckfragen = service.findRueckfragen(request.getSamlToken()) - .map(mapper::toGrpc) - .map(rueckfrage -> addAnswers(request.getSamlToken(), rueckfrage)); + var rueckfragen = service.findRueckfragen(request.getSamlToken()).map(mapper::toGrpc); streamObserver.onNext(buildFindRueckfragenResponse(rueckfragen)); streamObserver.onCompleted(); } - private GrpcRueckfrage addAnswers(String samlToken, GrpcRueckfrage rueckfrage) { - return rueckfrage.toBuilder().addAllAnswers(findRueckfrageAnswers(samlToken, rueckfrage.getId())).build(); - } - - List<GrpcRueckfrageAnswer> findRueckfrageAnswers(String samlToken, String rueckfrageId) { - return service.findAnswers(samlToken, rueckfrageId).map(mapper::toRueckfrageAnswer).toList(); - } - - private GrpcFindRueckfragenResponse buildFindRueckfragenResponse(Stream<GrpcRueckfrage> rueckfragen) { - return GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen.toList()).build(); + private GrpcFindRueckfragenResponse buildFindRueckfragenResponse(Stream<GrpcRueckfrageHead> rueckfragen) { + return GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrageHead(rueckfragen.toList()).build(); } @Override @@ -112,7 +102,8 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB var answers = service.findAnswers(samlToken, rueckfrage.getId()).toList(); var firstAnswerSentAt = service.getFirstSentAt(answers.stream()); - return addAnswers(rueckfrageMapper.toRueckfrage(firstAnswerSentAt, vorgang, rueckfrage), answers); + var rueckfrageWithAnswer = addAnswers(rueckfrageMapper.toRueckfrage(firstAnswerSentAt, vorgang, rueckfrage), answers); + return rueckfrageWithAnswer.toBuilder().setAccessible(service.isAccessible(samlToken, vorgang.getTrustLevel())).build(); } GrpcRueckfrage addAnswers(GrpcRueckfrage rueckfrage, List<PostfachNachricht> answers) { diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java index f0c9540..5bc0818 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java @@ -37,27 +37,23 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht; @Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) interface AntragraumNachrichtMapper { + @Mapping(target = "trustLevelBytes", ignore = true) + @Mapping(target = "vorgangNummerBytes", ignore = true) @Mapping(target = "mergeFrom", ignore = true) @Mapping(target = "clearField", ignore = true) @Mapping(target = "clearOneof", ignore = true) @Mapping(target = "mergeUnknownFields", ignore = true) - @Mapping(target = "removeAnswers", ignore = true) @Mapping(target = "answeredAt", ignore = true) @Mapping(target = "answeredAtBytes", ignore = true) @Mapping(target = "idBytes", ignore = true) @Mapping(target = "sentAtBytes", ignore = true) @Mapping(target = "statusBytes", ignore = true) - @Mapping(target = "textBytes", ignore = true) @Mapping(target = "unknownFields", ignore = true) @Mapping(target = "vorgangIdBytes", ignore = true) @Mapping(target = "vorgangNameBytes", ignore = true) @Mapping(target = "allFields", ignore = true) - @Mapping(target = "answersBuilderList", ignore = true) - @Mapping(target = "answersList", ignore = true) - @Mapping(target = "answersOrBuilderList", ignore = true) @Mapping(target = "sentAt", source = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss") - @Mapping(target = "attachmentFileIdList", source = "attachments") - GrpcRueckfrage toGrpc(Rueckfrage rueckfrage); + GrpcRueckfrageHead toGrpc(Rueckfrage rueckfrage); @Mapping(target = "referencedNachricht", ignore = true) @Mapping(target = "mailBody", source = "answerText") diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java index d6a76af..8d43506 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java @@ -34,6 +34,8 @@ import java.util.stream.Stream; import jakarta.annotation.PostConstruct; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.opensaml.saml.saml2.core.Response; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; @@ -105,7 +107,7 @@ public class AntragraumService { var rueckfragen = postfachNachrichtService.findRueckfragen(BAYERN_ID_SERVICE_KONTO_TYPE, getPostfachId(samlToken)) .map(rueckfrageMapper::fromPostfachNachricht) .map(rueckfrage -> enrichByAnswers(rueckfrage, samlToken)).toList(); - return enrichRueckfragen(rueckfragen); + return enrichRueckfragen(rueckfragen, samlToken); } Rueckfrage enrichByAnswers(Rueckfrage rueckfrage, String samlToken) { @@ -121,20 +123,27 @@ public class AntragraumService { return answers.sorted(Comparator.comparing(PostfachNachricht::getSentAt)).map(PostfachNachricht::getSentAt).findFirst(); } - Stream<Rueckfrage> enrichRueckfragen(List<Rueckfrage> rueckfragen) { + Stream<Rueckfrage> enrichRueckfragen(List<Rueckfrage> rueckfragen, String samlToken) { if (rueckfragen.isEmpty()) { return Stream.empty(); } - return addVorgangData(rueckfragen, rueckfragen.getFirst().getVorgangId()); + var vorgang = vorgangService.getVorgang(rueckfragen.getFirst().getVorgangId()); + + return rueckfragen.stream() + .map(rueckfrage -> addVorgangData(rueckfrage, vorgang)) + .map(rueckfrage -> addAccessible(rueckfrage, samlToken)); } - Stream<Rueckfrage> addVorgangData(List<Rueckfrage> rueckfragen, String vorgangId) { - var vorgang = vorgangService.getVorgang(vorgangId); - return rueckfragen.stream().map(rueckfrage -> addVorgangData(rueckfrage, vorgang)); + Rueckfrage addAccessible(Rueckfrage rueckfrage, String samlToken) { + return rueckfrage.toBuilder().accessible(isAccessible(samlToken, rueckfrage.getTrustLevel())).build(); } - private Rueckfrage addVorgangData(Rueckfrage rueckfrage, Vorgang vorgang) { - return rueckfrage.toBuilder().vorgangName(vorgang.getName()).vorgangNummer(vorgang.getNummer()).build(); + Rueckfrage addVorgangData(Rueckfrage rueckfrage, Vorgang vorgang) { + return rueckfrage.toBuilder() + .vorgangName(vorgang.getName()) + .vorgangNummer(vorgang.getNummer()) + .trustLevel(vorgang.getTrustLevel()) + .build(); } public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) { @@ -165,4 +174,16 @@ public class AntragraumService { throw new SecurityException("SAML Token verification failed. Errors: %s".formatted(errors)); } } + + public boolean isAccessible(String samlToken, String trustLevel) { + return StringUtils.equals(getTrustLevel(samlToken), trustLevel); + } + + String getTrustLevel(String samlToken) { + return decrypter.decryptTrustLevel(parseSamlToken(samlToken)); + } + + Response parseSamlToken(String samlToken) { + return parser.parse(samlToken); + } } \ No newline at end of file diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java index acc18d8..a398a46 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/Rueckfrage.java @@ -1,8 +1,6 @@ package de.ozgcloud.nachrichten.antragraum; import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; import de.ozgcloud.nachrichten.postfach.PostfachAddress; import lombok.Builder; @@ -23,9 +21,7 @@ class Rueckfrage { @Builder.Default private RueckfrageStatus status = RueckfrageStatus.NEW; - private String text; - - @Builder.Default - private List<String> attachments = Collections.emptyList(); + private String trustLevel; + private boolean accessible; } \ No newline at end of file diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java index 0b725a4..f2f7634 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapper.java @@ -21,9 +21,11 @@ interface RueckfrageMapper { final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX"); + @Mapping(target = "accessible", ignore = true) + @Mapping(target = "trustLevel", ignore = true) + @Mapping(target = "vorgangNummer", ignore = true) @Mapping(target = "answeredAt", ignore = true) @Mapping(target = "status", ignore = true) - @Mapping(target = "text", source = "mailBody") @Mapping(target = "vorgangName", ignore = true) Rueckfrage fromPostfachNachricht(PostfachNachricht postfachNachricht); @@ -32,23 +34,22 @@ interface RueckfrageMapper { @Mapping(target = "clearOneof", ignore = true) @Mapping(target = "mergeUnknownFields", ignore = true) @Mapping(target = "removeAnswers", ignore = true) - @Mapping(target = "accessible", ignore = true) // TODO - @Mapping(target = "accessibleBytes", ignore = true) @Mapping(target = "answeredAt", expression = "java(setAnsweredAt(firstAnswerSentAt))") @Mapping(target = "answeredAtBytes", ignore = true) @Mapping(target = "idBytes", ignore = true) @Mapping(target = "sentAtBytes", ignore = true) - @Mapping(target = "status", expression = "java(setStatus(firstAnswerSentAt))") @Mapping(target = "statusBytes", ignore = true) + @Mapping(target = "trustLevelBytes", ignore = true) + @Mapping(target = "vorgangIdBytes", ignore = true) + @Mapping(target = "vorgangNummerBytes", ignore = true) + @Mapping(target = "accessible", ignore = true) + @Mapping(target = "status", expression = "java(setStatus(firstAnswerSentAt))") @Mapping(target = "textBytes", ignore = true) @Mapping(target = "trustLevel", source = "vorgang.trustLevel") - @Mapping(target = "trustLevelBytes", ignore = true) @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "vorgangIdBytes", ignore = true) @Mapping(target = "vorgangName", source = "vorgang.name") @Mapping(target = "vorgangNameBytes", ignore = true) @Mapping(target = "vorgangNummer", source = "vorgang.nummer") - @Mapping(target = "vorgangNummerBytes", ignore = true) @Mapping(target = "allFields", ignore = true) @Mapping(target = "answersBuilderList", ignore = true) @Mapping(target = "answersList", ignore = true) diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java index 80bbb26..5d6c596 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java @@ -42,6 +42,7 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.nachrichten.common.vorgang.GrpcServiceKontoTestFactory; import de.ozgcloud.nachrichten.common.vorgang.Vorgang; import de.ozgcloud.nachrichten.common.vorgang.VorgangService; import de.ozgcloud.nachrichten.common.vorgang.VorgangTestFactory; @@ -65,30 +66,38 @@ class AntragraumGrpcServiceTest { @Mock private VorgangService vorgangService; + @DisplayName("Find rueckfragen") @Nested class TestFindRueckfragen { + @Captor + private ArgumentCaptor<GrpcFindRueckfragenResponse> responseCaptor; @Mock private StreamObserver<GrpcFindRueckfragenResponse> streamObserver; + private final Rueckfrage rueckfrage = RueckfrageTestFactory.create(); + + private final GrpcRueckfrageHead grpcRueckfrageHead = GrpcRueckfrageHeadTestFactory.create(); + @BeforeEach void setup() { - when(service.findRueckfragen(any())).thenReturn(Stream.of(RueckfrageTestFactory.create())); - when(nachrichtMapper.toGrpc(any(Rueckfrage.class))).thenReturn(GrpcRueckfrageTestFactory.create()); + when(service.findRueckfragen(any())).thenReturn(Stream.of(rueckfrage)); + when(nachrichtMapper.toGrpc(any())).thenReturn(grpcRueckfrageHead); } @Test void shouldCallMapper() { grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - verify(nachrichtMapper).toGrpc(any(Rueckfrage.class)); + verify(nachrichtMapper).toGrpc(rueckfrage); } @Test void shouldCallOnNext() { grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - verify(streamObserver).onNext(any(GrpcFindRueckfragenResponse.class)); + verify(streamObserver).onNext(responseCaptor.capture()); + assertThat(responseCaptor.getValue().getRueckfrageHeadList()).containsExactly(grpcRueckfrageHead); } @Test @@ -97,13 +106,6 @@ class AntragraumGrpcServiceTest { verify(streamObserver).onCompleted(); } - - @Test - void shouldLoadAnswers() { - grpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver); - - verify(service).findAnswers(GrpcFindRueckfrageRequestTestFactory.SAML_TOKEN, PostfachNachrichtTestFactory.ID); - } } @DisplayName("Send rueckfrage answer") @@ -310,7 +312,7 @@ class AntragraumGrpcServiceTest { @DisplayName("Enhance rueckfrage") @Nested - class TestBuildRueckfrage { + class TestEnhanceRueckfrage { @Captor private ArgumentCaptor<Stream<PostfachNachricht>> answersStreamCaptor; @@ -335,6 +337,8 @@ class AntragraumGrpcServiceTest { when(service.getFirstSentAt(any())).thenReturn(sentAt); when(vorgangService.getVorgang(any())).thenReturn(vorgang); when(rueckfrageMapper.toRueckfrage(any(), any(), any())).thenReturn(grpcRueckfrage); + when(service.isAccessible(any(), any())).thenReturn(true); + doReturn(grpcRueckfrage).when(grpcService).addAnswers(any(), any()); } @@ -375,6 +379,20 @@ class AntragraumGrpcServiceTest { assertThat(answersListCaptor.getValue().get(0)).isEqualTo(answer); } + @Test + void shouldCallIsAccessable() { + enhanceRueckfrage(); + + verify(service).isAccessible(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN, GrpcServiceKontoTestFactory.TRUST_LEVEL); + } + + @Test + void shouldSetAccessible() { + var rueckfrage = enhanceRueckfrage(); + + assertThat(rueckfrage.getAccessible()).isTrue(); + } + @Test void shouldReturnRueckfrage() { var buildedRueckfrage = enhanceRueckfrage(); diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java index 528286a..8ac6a1e 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java @@ -78,21 +78,7 @@ class AntragraumNachrichtMapperTest { assertThat(result.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); } - @Test - void shouldMapText() { - var result = map(); - - assertThat(result.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } - - @Test - void shouldMapAttachments() { - var result = map(); - - assertThat(result.getAttachmentFileIdList()).hasSize(1).first().isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0)); - } - - private GrpcRueckfrage map() { + private GrpcRueckfrageHead map() { return mapper.toGrpc(RueckfrageTestFactory.create()); } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java index 2188ed9..ae98c89 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java @@ -22,6 +22,8 @@ import org.mockito.Spy; import org.opensaml.saml.saml2.core.Response; import de.ozgcloud.nachrichten.NachrichtenManagerProperties; +import de.ozgcloud.nachrichten.common.vorgang.GrpcServiceKontoTestFactory; +import de.ozgcloud.nachrichten.common.vorgang.Vorgang; import de.ozgcloud.nachrichten.common.vorgang.VorgangService; import de.ozgcloud.nachrichten.common.vorgang.VorgangTestFactory; import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; @@ -88,65 +90,64 @@ class AntragraumServiceTest { when(rueckfrageMapper.fromPostfachNachricht(any())).thenReturn(rueckfrage); doReturn(rueckfrage).when(service).enrichByAnswers(any(), any()); - doReturn(Stream.of(rueckfrage)).when(service).enrichRueckfragen(any()); + doReturn(Stream.of(rueckfrage)).when(service).enrichRueckfragen(any(), any()); doReturn(POSTFACH_ID).when(service).getPostfachId(any()); + + doNothing().when(service).verifyToken(any()); } @Test void shouldCallVerify() { - service.findRueckfragen(SAML_TOKEN).toList(); + findRueckfragen(); verify(service).verifyToken(SAML_TOKEN); } - @Test - void shouldCallVerifier() { - service.findRueckfragen(SAML_TOKEN).toList(); - - verify(verifier).verify(anyString()); - } - @Test void shouldGetPostfachId() { - service.findRueckfragen(SAML_TOKEN).toList(); + findRueckfragen(); verify(service).getPostfachId(SAML_TOKEN); } @Test void shouldCallPostfachService() { - service.findRueckfragen(SAML_TOKEN).toList(); + findRueckfragen(); verify(postfachNachrichtService).findRueckfragen(AntragraumService.BAYERN_ID_SERVICE_KONTO_TYPE, POSTFACH_ID); } @Test void shouldCallMapper() { - service.findRueckfragen(SAML_TOKEN).toList(); + findRueckfragen(); verify(rueckfrageMapper).fromPostfachNachricht(postfachNachricht); } @Test void shouldCallEnrichByAnswers() { - service.findRueckfragen(SAML_TOKEN).toList(); + findRueckfragen(); verify(service).enrichByAnswers(rueckfrage, SAML_TOKEN); } @Test void shouldCallEnrichRueckfragen() { - service.findRueckfragen(SAML_TOKEN).toList(); + findRueckfragen(); - verify(service).enrichRueckfragen(any()); + verify(service).enrichRueckfragen(any(), eq(SAML_TOKEN)); } @Test void shouldReturnFullFilledValue() { - var rueckfragen = service.findRueckfragen(SAML_TOKEN).toList(); + var rueckfragen = findRueckfragen(); assertThat(rueckfragen).containsExactly(rueckfrage); } + + private List<Rueckfrage> findRueckfragen() { + return service.findRueckfragen(SAML_TOKEN).toList(); + } } @DisplayName("Enrich by answers") @@ -198,69 +199,122 @@ class AntragraumServiceTest { } } - @DisplayName("Enrich rueckfrage") + @DisplayName("Enrich rueckfragen") @Nested - class TestEnrichRueckgabe { + class TestEnrichRueckfragen { - private final Rueckfrage rueckfrageWithoutVorgangName = RueckfrageTestFactory.createBuilder().vorgangName(null).build(); - private final List<Rueckfrage> rueckfragen = Collections.singletonList(rueckfrageWithoutVorgangName); + private final Rueckfrage rueckfrage = RueckfrageTestFactory.create(); + private final List<Rueckfrage> rueckfragen = Collections.singletonList(rueckfrage); - @BeforeEach - void mock() { - doReturn(Stream.of(RueckfrageTestFactory.create())).when(service).addVorgangData(any(), any()); - } + private final Vorgang vorgang = VorgangTestFactory.create(); + @DisplayName("should return an empty stream is no rueckfragen exists") @Test - void shouldCallAddVorgangDataIfRueckfragenExists() { - service.enrichRueckfragen(rueckfragen); + void shouldReturnEmptyStream() { + var rueckfragen = service.enrichRueckfragen(Collections.emptyList(), GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN).toList(); - verify(service).addVorgangData(Collections.singletonList(rueckfrageWithoutVorgangName), RueckfrageTestFactory.VORGANG_ID); + assertThat(rueckfragen).isEmpty(); } - @Test - void shouldReturnValue() { - var enrichedRueckfragen = service.enrichRueckfragen(rueckfragen); + @DisplayName("on existing rueckfragen") + @Nested + class TestOnExistingRueckfragen { + + @BeforeEach + void mock() { + when(vorgangService.getVorgang(any())).thenReturn(vorgang); - assertThat(enrichedRueckfragen.findFirst()).get().extracting(Rueckfrage::getVorgangName).isEqualTo(RueckfrageTestFactory.VORGANG_NAME); + doReturn(rueckfrage).when(service).addVorgangData(any(), any()); + doReturn(rueckfrage).when(service).addAccessible(any(), any()); + } + + @Test + void shouldCallVorgangService() { + enrichRueckfragen(); + + verify(vorgangService).getVorgang(RueckfrageTestFactory.VORGANG_ID); + } + + @Test + void shouldAddVorgangData() { + enrichRueckfragen(); + + verify(service).addVorgangData(rueckfrage, vorgang); + } + + @Test + void shouldAddAccessible() { + enrichRueckfragen(); + + verify(service).addAccessible(rueckfrage, GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + } + + @Test + void shouldReturnEnrichedRueckfragen() { + var enrichedRueckfragen = enrichRueckfragen(); + + assertThat(enrichedRueckfragen).containsExactly(rueckfrage); + } + } + + private List<Rueckfrage> enrichRueckfragen() { + return service.enrichRueckfragen(rueckfragen, GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN).toList(); } } - @DisplayName("Add vorgang data") + @DisplayName("Add accessible") @Nested - class TestAddVorgangData { + class TestAddAccessible { - private final Rueckfrage rueckfrage = RueckfrageTestFactory.createBuilder() - .vorgangName(null) - .build(); + private final Rueckfrage rueckfrage = RueckfrageTestFactory.createBuilder().accessible(false).build(); @BeforeEach void mock() { - when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create()); + doReturn(true).when(service).isAccessible(any(), any()); } @Test - void shouldCallGetVorgang() { - addVorgangData().toList(); + void shouldCallIsAccessible() { + service.addAccessible(rueckfrage, GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); - verify(vorgangService).getVorgang(RueckfrageTestFactory.VORGANG_ID); + verify(service).isAccessible(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN, GrpcServiceKontoTestFactory.TRUST_LEVEL); } + @Test + void shouldSetAccessible() { + var rueckfrageWithAccessible = service.addAccessible(rueckfrage, GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + + assertThat(rueckfrageWithAccessible.isAccessible()).isTrue(); + } + } + + @DisplayName("Add vorgang data") + @Nested + class TestAddVorgangData { + @Test void shouldSetVorgangName() { - var rueckfragenWithVorgangData = addVorgangData().toList(); + var rueckfragenWithVorgangData = addVorgangData(); - assertThat(rueckfragenWithVorgangData.getFirst().getVorgangName()).isEqualTo(VorgangTestFactory.NAME); + assertThat(rueckfragenWithVorgangData.getVorgangName()).isEqualTo(VorgangTestFactory.NAME); } @Test void shouldSetVorgangNummer() { - var rueckfragenWithVorgangData = addVorgangData().toList(); + var rueckfragenWithVorgangData = addVorgangData(); - assertThat(rueckfragenWithVorgangData.getFirst().getVorgangNummer()).isEqualTo(VorgangTestFactory.NUMMER); + assertThat(rueckfragenWithVorgangData.getVorgangNummer()).isEqualTo(VorgangTestFactory.NUMMER); } - private Stream<Rueckfrage> addVorgangData() { - return service.addVorgangData(Collections.singletonList(rueckfrage), RueckfrageTestFactory.VORGANG_ID); + @Test + void shouldSetTrustLevel() { + var rueckfragenWithVorgangData = addVorgangData(); + + assertThat(rueckfragenWithVorgangData.getTrustLevel()).isEqualTo(GrpcServiceKontoTestFactory.TRUST_LEVEL); + } + + private Rueckfrage addVorgangData() { + return service.addVorgangData(Rueckfrage.builder().build(), VorgangTestFactory.create()); } } @@ -282,31 +336,30 @@ class AntragraumServiceTest { } } + @DisplayName("Send rueckfragen answers") @Nested class TestSendRueckfragenAnswers { static final String SAML_TOKEN = "TOKEN"; static final String RUECKFRAGE_ID = UUID.randomUUID().toString(); static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create(); - @Test - void shouldCallVerify() { - service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - - verify(service).verifyToken(SAML_TOKEN); + @BeforeEach + void mock() { + doNothing().when(service).verifyToken(any()); } @Test - void shouldCallVerifier() { - service.findRueckfragen(SAML_TOKEN); + void shouldCallVerifyToken() { + service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - verify(verifier).verify(anyString()); + verify(service).verifyToken(SAML_TOKEN); } @Test void shouldCallPostfachService() { service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT); - verify(postfachNachrichtService).persistAnswer(eq(RUECKFRAGE_ID), any(PostfachNachricht.class)); + verify(postfachNachrichtService).persistAnswer(RUECKFRAGE_ID, NACHRICHT); } } @@ -416,4 +469,97 @@ class AntragraumServiceTest { return service.getRueckfrage(samlToken, RueckfrageTestFactory.ID); } } + + @DisplayName("Is accessible") + @Nested + class TestIsAccessible { + + @Test + void shouldCallGetTrustLevel() { + service.isAccessible(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN, GrpcServiceKontoTestFactory.TRUST_LEVEL); + + verify(service).getTrustLevel(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + } + + @Test + void shouldReturnTrueIfTrustLevelMatches() { + doReturn(GrpcServiceKontoTestFactory.TRUST_LEVEL).when(service).getTrustLevel(any()); + + var trustLevel = service.isAccessible(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN, GrpcServiceKontoTestFactory.TRUST_LEVEL); + + assertThat(trustLevel).isTrue(); + } + + @Test + void shouldReturnFalseIfTrustLevelNotMatches() { + doReturn("qutasch").when(service).getTrustLevel(any()); + + var trustLevel = service.isAccessible(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN, GrpcServiceKontoTestFactory.TRUST_LEVEL); + + assertThat(trustLevel).isFalse(); + } + } + + @DisplayName("Get trustLevel") + @Nested + class TestGetTrustLevel { + + @Mock + private Response response; + + @BeforeEach + void mock() { + doReturn(response).when(service).parseSamlToken(any()); + + when(decrypter.decryptTrustLevel(any())).thenReturn(GrpcServiceKontoTestFactory.TRUST_LEVEL); + } + + @Test + void shouldCallParseSamlToken() { + service.getTrustLevel(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + + verify(service).parseSamlToken(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + } + + @Test + void shouldCallDecrypter() { + service.getTrustLevel(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + + verify(decrypter).decryptTrustLevel(response); + } + + @Test + void shouldReturnValue() { + var trustLevel = service.getTrustLevel(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + + assertThat(trustLevel).isEqualTo(GrpcServiceKontoTestFactory.TRUST_LEVEL); + } + } + + @DisplayName("Parse saml token") + @Nested + class TestParseSamlToken { + + @Mock + private Response response; + + @BeforeEach + void mock() { + when(parser.parse(any())).thenReturn(response); + } + + @Test + void shouldCallParser() { + service.parseSamlToken(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + + verify(parser).parse(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + } + + @Test + void shouldReturnValue() { + var parseResponse = service.parseSamlToken(GrpcGetRueckfrageRequestTestFactory.SAML_TOKEN); + + assertThat(parseResponse).isEqualTo(response); + } + } } \ No newline at end of file diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfragenResponseTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfragenResponseTestFactory.java new file mode 100644 index 0000000..053337a --- /dev/null +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfragenResponseTestFactory.java @@ -0,0 +1,12 @@ +package de.ozgcloud.nachrichten.antragraum; + +public class GrpcFindRueckfragenResponseTestFactory { + + public static GrpcFindRueckfragenResponse create() { + return createBuilder().build(); + } + + public static GrpcFindRueckfragenResponse.Builder createBuilder() { + return GrpcFindRueckfragenResponse.newBuilder(); + } +} diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageHeadTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageHeadTestFactory.java new file mode 100644 index 0000000..68e54b5 --- /dev/null +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageHeadTestFactory.java @@ -0,0 +1,12 @@ +package de.ozgcloud.nachrichten.antragraum; + +public class GrpcRueckfrageHeadTestFactory { + + public static GrpcRueckfrageHead create() { + return createBuilder().build(); + } + + public static GrpcRueckfrageHead.Builder createBuilder() { + return GrpcRueckfrageHead.newBuilder(); + } +} \ No newline at end of file diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java index 829463f..f053390 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java @@ -4,6 +4,8 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; public class GrpcRueckfrageTestFactory { + private final static boolean ACCESSIBLE = true; + public static GrpcRueckfrage create() { return createBuilder().build(); } @@ -13,7 +15,8 @@ public class GrpcRueckfrageTestFactory { .setId(PostfachNachrichtTestFactory.ID) .setText(PostfachNachrichtTestFactory.MAIL_BODY) .setSentAt(PostfachNachrichtTestFactory.SENT_AT_STR) - .addAllAttachmentFileId(PostfachNachrichtTestFactory.ATTACHMENTS); + .addAllAttachmentFileId(PostfachNachrichtTestFactory.ATTACHMENTS) + .setAccessible(ACCESSIBLE); } } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java index 74e0717..11f099d 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageMapperTest.java @@ -54,20 +54,6 @@ class RueckfrageMapperTest { assertThat(mapped.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT); } - @Test - void shouldMapText() { - var mapped = mapFromPostfachNachricht(); - - assertThat(mapped.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } - - @Test - void shouldMapAttachments() { - var mapped = mapFromPostfachNachricht(); - - assertThat(mapped.getAttachments()).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS); - } - @Test void shouldHaveDefaultStatus() { var mapped = mapFromPostfachNachricht(); diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java index 3a60a8a..884770c 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/RueckfrageTestFactory.java @@ -4,6 +4,7 @@ import java.util.UUID; import com.thedeanda.lorem.LoremIpsum; +import de.ozgcloud.nachrichten.common.vorgang.GrpcServiceKontoTestFactory; import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; @@ -24,7 +25,6 @@ public class RueckfrageTestFactory { .vorgangName(VORGANG_NAME) .postfachAddress(PostfachAddressTestFactory.create()) .sentAt(PostfachNachrichtTestFactory.SENT_AT) - .text(PostfachNachrichtTestFactory.MAIL_BODY) - .attachments(PostfachNachrichtTestFactory.ATTACHMENTS); + .trustLevel(GrpcServiceKontoTestFactory.TRUST_LEVEL); } } -- GitLab