diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java index 8c570cff79bdad0796683d6ecaf92888c841138f..e8c8c90460ecdc6bff0e4336041362d8c4e10d0d 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java @@ -11,6 +11,7 @@ import org.springframework.hateoas.server.RepresentationModelProcessor; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.ModelBuilder; +import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import lombok.RequiredArgsConstructor; @@ -22,6 +23,9 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel private static final Predicate<VorgangWithEingang> IS_VORGANG_ABGESCHLOSSEN = vorgang -> vorgang.getStatus() == VorgangStatus.ABGESCHLOSSEN; static final LinkRelation REL_EXPORT = LinkRelation.of("export"); + static final LinkRelation REL_ARCHIVE = LinkRelation.of("archive"); + + private final DmsProperties dmsProperties; @Override public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { @@ -34,6 +38,13 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel return ModelBuilder.fromModel(model) .ifMatch(IS_VORGANG_ABGESCHLOSSEN) .addLink(linkTo(methodOn(ExportVorgangController.class).exportVorgang(vorgang.getId())).withRel(REL_EXPORT)) + .ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(isDmsEnabled())) + .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), + null)).withRel(REL_ARCHIVE)) .buildModel(); } + + private Predicate<VorgangWithEingang> isDmsEnabled() { + return vorgang -> dmsProperties.isEnabled(); + } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java index 1443f94482daadc8ab02a10a9ebeaa17a3045457..79cd503f5182830920e8f1d4f3f591a50d05aa59 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/ExportVorgangProcessorTest.java +++ b/alfa-service/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,10 +11,13 @@ 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 org.springframework.hateoas.UriTemplate; import de.ozgcloud.alfa.common.UserProfileUrlProvider; +import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -23,21 +27,23 @@ class ExportVorgangProcessorTest { @InjectMocks private ExportVorgangProcessor processor; + @Mock + private DmsProperties dmsProperties; private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); @Nested class TestProcess { + @BeforeEach + void init() { + initUserProfileUrlProvider(urlProvider); + } + @DisplayName("Export link") @Nested class TestExportLink { - @BeforeEach - void init() { - initUserProfileUrlProvider(urlProvider); - } - @Test void shouldAddLinkWhenVorgangIsAbgeschlossen() { var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); @@ -57,12 +63,54 @@ class ExportVorgangProcessorTest { assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); } + } + + @Nested + class TestArchiveLink { + + @Test + void shouldAddLink() { + givenDmsIsEnabled(); + var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isPresent().get().extracting(Link::getHref) + .isEqualTo(UriTemplate.of(CommandByRelationController.COMMAND_BY_RELATION_PATH) + .expand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString()); + } + + @ParameterizedTest + @EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ABGESCHLOSSEN") + void shouldNotAddLinkWhenVorgangIsNotAbgeschlossen(VorgangStatus status) { + var vorgang = vorgangInStatus(status); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); + } + + @Test + void shouldNotAddLinkWhenDmsIsNotEnabled() { + givenDmsIsNotEnabled(); + var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); - private VorgangWithEingang vorgangInStatus(VorgangStatus status) { - return VorgangWithEingangTestFactory.createBuilder().status(status).build(); + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); + } + + void givenDmsIsEnabled() { + when(dmsProperties.isEnabled()).thenReturn(true); + } + + void givenDmsIsNotEnabled() { + when(dmsProperties.isEnabled()).thenReturn(false); } } + private VorgangWithEingang vorgangInStatus(VorgangStatus status) { + return VorgangWithEingangTestFactory.createBuilder().status(status).build(); + } } - } \ No newline at end of file