diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java index c270239be1b72aae832ab8b95fd77a95f85377d5..cd93a4d4c15df7e7f57bcc02668076f4c2efdd15 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java @@ -10,6 +10,7 @@ import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.server.RepresentationModelProcessor; import org.springframework.stereotype.Component; +import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -19,9 +20,13 @@ import lombok.RequiredArgsConstructor; @Component class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - static final Predicate<VorgangWithEingang> IS_VORGANG_ABGESCHLOSSEN = vorgang -> vorgang.getStatus() == VorgangStatus.ABGESCHLOSSEN; + private final Predicate<VorgangWithEingang> isExportEnabled = vorgang -> isExportEnabled(); + private static final Predicate<VorgangWithEingang> IS_VORGANG_ABGESCHLOSSEN = vorgang -> vorgang.getStatus() == VorgangStatus.ABGESCHLOSSEN; + static final LinkRelation REL_EXPORT = LinkRelation.of("export"); + private final FeatureToggleProperties featureToggleProperties; + @Override public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { var vorgang = model.getContent(); @@ -31,9 +36,12 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel } return ModelBuilder.fromModel(model) - .ifMatch(IS_VORGANG_ABGESCHLOSSEN) + .ifMatch(isExportEnabled.and(IS_VORGANG_ABGESCHLOSSEN)) .addLink(linkTo(methodOn(ExportVorgangController.class).exportToXdomea(vorgang.getId())).withRel(REL_EXPORT)) .buildModel(); + } + private boolean isExportEnabled() { + return featureToggleProperties.isVorgangExport(); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java index 324ff42637595701d238a9abb7b591853de4b6c3..27ed62377f845026eb3265b2a23f0694188c2579 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java @@ -2,6 +2,7 @@ package de.ozgcloud.alfa.export; import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*; import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -10,9 +11,11 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.mockito.InjectMocks; +import org.mockito.Mock; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; +import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.UserProfileUrlProvider; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; @@ -24,6 +27,9 @@ class ExportVorgangProcessorTest { @InjectMocks private ExportVorgangProcessor processor; + @Mock + private FeatureToggleProperties featureToggleProperties; + private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); @Nested @@ -39,7 +45,8 @@ class ExportVorgangProcessorTest { } @Test - void shouldAddLink() { + void shouldAddLinkWhenExportIsEnabledAndVorgangIsAbgeschlossen() { + when(featureToggleProperties.isVorgangExport()).thenReturn(true); var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); var model = processor.process(EntityModel.of(vorgang)); @@ -50,7 +57,8 @@ class ExportVorgangProcessorTest { @ParameterizedTest @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ABGESCHLOSSEN") - void shouldNotAddLink(VorgangStatus status) { + void shouldNotAddLinkWhenVorgangIsNotAbgeschlossen(VorgangStatus status) { + when(featureToggleProperties.isVorgangExport()).thenReturn(true); var vorgang = vorgangInStatus(status); var model = processor.process(EntityModel.of(vorgang)); @@ -58,6 +66,16 @@ class ExportVorgangProcessorTest { assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); } + @Test + void shouldNotAddLinkWhenExportIsDisabled() { + when(featureToggleProperties.isVorgangExport()).thenReturn(false); + var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); + } + private VorgangWithEingang vorgangInStatus(VorgangStatus status) { return VorgangWithEingangTestFactory.createBuilder().status(status).build(); }