diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeatures.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeatures.java new file mode 100644 index 0000000000000000000000000000000000000000..faa236351bc915c2f540681ab2fc95de14ee205a --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeatures.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +class BescheidManagerFeatures { + + private boolean canCreateBescheidDocument; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..6d2414f5c901c9b544393c7d85ea6684645371a8 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapper.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.document.bescheid.GrpcBescheidManagerFeatures; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +interface BescheidManagerFeaturesMapper { + + BescheidManagerFeatures fromGrpc(GrpcBescheidManagerFeatures grpcBescheidManagerFeatures); +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java index 5890398e4c8f312ef8b2a092477ba147963570fa..d3abd51e1b51c33463a08dfc920ad21581534e44 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java @@ -46,6 +46,8 @@ class BescheidRemoteService { private BescheidServiceBlockingStub bescheidServiceStub; @Autowired private BescheidMapper bescheidMapper; + @Autowired + private BescheidManagerFeaturesMapper bescheidManagerFeaturesMapper; public Optional<Bescheid> getBescheidDraft(String vorgangId) { var request = buildGetBescheidDraftRequest(vorgangId); @@ -83,9 +85,8 @@ class BescheidRemoteService { return GrpcGetAllBescheidRequest.newBuilder().setVorgangId(vorgangId).build(); } - // TODO Logik in den Service verschieben - public boolean canCreateBescheidDocument() { + public Optional<BescheidManagerFeatures> getBescheidManagerFeatures() { var response = bescheidServiceStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build()); - return response.hasFeatures() && response.getFeatures().getCanCreateBescheidDocument(); + return response.hasFeatures() ? Optional.of(bescheidManagerFeaturesMapper.fromGrpc(response.getFeatures())) : Optional.empty(); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java index 8ebaf02e9e285f73ebc5fb881d03dd701753b728..df312594f141d23efcb3a5dfaab0c63bb54d3de2 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java @@ -59,7 +59,7 @@ public class BescheidService { } public boolean canCreateBescheidDocumentAutomatically() { - return remoteService.canCreateBescheidDocument(); + return remoteService.getBescheidManagerFeatures().map(BescheidManagerFeatures::isCanCreateBescheidDocument).orElse(false); } public boolean existsBescheid(String vorgangId) { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1691e2fe04f4107080f40ac09c888c5a3daf43db --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidManagerFeaturesMapperTest.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.alfa.bescheid; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mapstruct.factory.Mappers; + +import de.ozgcloud.document.bescheid.GrpcBescheidManagerFeatures; + +class BescheidManagerFeaturesMapperTest { + + private final BescheidManagerFeaturesMapper mapper = Mappers.getMapper(BescheidManagerFeaturesMapper.class); + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void shouldMapCanCreateBescheidDocument(boolean canCreate) { + var grpcFeatures = GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(canCreate).build(); + + var features = mapper.fromGrpc(grpcFeatures); + + assertThat(features.isCanCreateBescheidDocument()).isEqualTo(canCreate); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java index 84d5208e2ca34eb32e6edbc42a196496152bbd5b..e5aae0f2f5e0d79ec00e80e0086b3d31ccf95691 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java @@ -57,6 +57,8 @@ class BescheidRemoteServiceTest { private BescheidServiceBlockingStub bescheidServiceStub; @Mock private BescheidMapper bescheidMapper; + @Mock + private BescheidManagerFeaturesMapper featuresMapper; @Nested class TestGetBescheidDraft { @@ -206,51 +208,68 @@ class BescheidRemoteServiceTest { } @Nested - class TestCanCreateBescheidDocument { + class TestGetBescheidManagerFeatures { private final GrpcBescheidManagerConfigRequest request = GrpcBescheidManagerConfigRequestTestFactory.create(); private final GrpcBescheidManagerConfigResponse respone = GrpcBescheidManagerConfigResponseTestFactory.create(); - @BeforeEach - void setUp() { + @Test + void shouldCallGrpcService() { when(bescheidServiceStub.getConfig(request)).thenReturn(respone); - } + when(featuresMapper.fromGrpc(any())).thenReturn(BescheidManagerFeatures.builder().build()); - @Test - void shouldCallRemoteService() { - service.canCreateBescheidDocument(); + service.getBescheidManagerFeatures(); verify(bescheidServiceStub).getConfig(request); } - @Test - void shouldReturnTrue() { - var canCreate = service.canCreateBescheidDocument(); + @Nested + class OnFeaturesArePresent { - assertThat(canCreate).isTrue(); - } + private final BescheidManagerFeatures mappedFeatures = BescheidManagerFeatures.builder().build(); - @Test - void shouldReturnFalseIfNoFeaturesAvailable() { - when(bescheidServiceStub.getConfig(request)).thenReturn(GrpcBescheidManagerConfigResponse.newBuilder().build()); + @BeforeEach + void setUp() { + when(bescheidServiceStub.getConfig(request)).thenReturn(respone); + when(featuresMapper.fromGrpc(any())).thenReturn(mappedFeatures); + } + + @Test + void shouldCallMapper() { + service.getBescheidManagerFeatures(); + + verify(featuresMapper).fromGrpc(GrpcBescheidManagerFeaturesTestFactory.create()); + } - var canCreate = service.canCreateBescheidDocument(); + @Test + void shouldReturnMappedFeatures() { + var features = service.getBescheidManagerFeatures(); - assertThat(canCreate).isFalse(); + assertThat(features).isNotEmpty().get().isSameAs(mappedFeatures); + } } - @Test - void shouldReturnFalseIfFeatureDisabled() { - var respones = GrpcBescheidManagerConfigResponseTestFactory.createBuilder() - .setFeatures(GrpcBescheidManagerFeaturesTestFactory.createBuilder() - .setCanCreateBescheidDocument(false) - .build()) - .build(); - when(bescheidServiceStub.getConfig(request)).thenReturn(respones); + @Nested + class OnFeaturesAreAbsent { + + @BeforeEach + void init() { + when(bescheidServiceStub.getConfig(request)).thenReturn(GrpcBescheidManagerConfigResponse.newBuilder().build()); + } + + @Test + void shouldNotCallMapper() { + service.getBescheidManagerFeatures(); + + verify(featuresMapper, never()).fromGrpc(any()); + } - var canCreate = service.canCreateBescheidDocument(); + @Test + void shouldReturnEmpty() { + var features = service.getBescheidManagerFeatures(); - assertThat(canCreate).isFalse(); + assertThat(features).isEmpty(); + } } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java index 16e9efb603bc76a00195db4e95abc49334472c53..95914f9d613d54b55aecc4d4e578397f3fd654cc 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java @@ -168,19 +168,31 @@ class BescheidServiceTest { @Test void shouldCallRemoteService() { + when(remoteService.getBescheidManagerFeatures()).thenReturn(Optional.of(BescheidManagerFeatures.builder().build())); + service.canCreateBescheidDocumentAutomatically(); - verify(remoteService).canCreateBescheidDocument(); + verify(remoteService).getBescheidManagerFeatures(); + } + + @Test + void shouldReturnFalseIfFeaturesAreEmpty() { + when(remoteService.getBescheidManagerFeatures()).thenReturn(Optional.empty()); + + var canCreate = service.canCreateBescheidDocumentAutomatically(); + + assertThat(canCreate).isFalse(); } @ParameterizedTest @ValueSource(booleans = { true, false }) - void shouldRetrun(boolean canCreateBescheidDocument) { - when(remoteService.canCreateBescheidDocument()).thenReturn(canCreateBescheidDocument); + void shouldReturnFeatureValue(boolean featureValue) { + when(remoteService.getBescheidManagerFeatures()).thenReturn( + Optional.of(BescheidManagerFeatures.builder().canCreateBescheidDocument(featureValue).build())); - var canCreateAutomatically = service.canCreateBescheidDocumentAutomatically(); + var canCreate = service.canCreateBescheidDocumentAutomatically(); - assertThat(canCreateAutomatically).isEqualTo(canCreateBescheidDocument); + assertThat(canCreate).isEqualTo(featureValue); } }