diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java index 25e5daeeda18211fe04c4ad6c22d1ce1b3cfd142..fa60bb0b188ac33e509a84ba4cf3e6e90051cef2 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.ModelBuilder; -import de.ozgcloud.alfa.common.command.CommandController; +import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import lombok.RequiredArgsConstructor; @@ -21,8 +21,9 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { - static final String REL_DRAFT = "bescheidDraft"; + static final LinkRelation REL_DRAFT = LinkRelation.of("bescheidDraft"); static final LinkRelation REL_CREATE_BESCHEID_DRAFT = LinkRelation.of("createBescheidDraft"); + static final LinkRelation REL_UEBERSPRINGEN_UND_ABSCHLIESSEN = LinkRelation.of("ueberspringen_und_abschliessen"); private final FeatureToggleProperties featureToggleProperties; private final BescheidService bescheidService; @@ -36,20 +37,23 @@ class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityMod } return ModelBuilder.fromModel(model) - .ifMatch(shouldAddLinkToDraft(vorgang)) + .ifMatch(isRetrievingDraftAllowed(vorgang)) .addLink(linkTo(methodOn(BescheidController.class).getDraft(vorgang.getId(), BescheidController.REQUEST_PARAM_STATUS_DRAFT)).withRel( REL_DRAFT)) - .ifMatch(shouldAddLinkToCreateDraft(vorgang)) - .addLink(linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), + .ifMatch(isCreatingDraftAllowed(vorgang)) + .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null)).withRel(REL_CREATE_BESCHEID_DRAFT)) + .ifMatch(isCreatingDraftAllowed(vorgang)) + .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), + vorgang.getId(), vorgang.getVersion(), null)).withRel(REL_UEBERSPRINGEN_UND_ABSCHLIESSEN)) .buildModel(); } - BooleanSupplier shouldAddLinkToDraft(Vorgang vorgang) { + BooleanSupplier isRetrievingDraftAllowed(Vorgang vorgang) { return () -> featureToggleProperties.isBescheidWizard() && isVorgangInBearbeitung(vorgang) && draftExists(vorgang); } - BooleanSupplier shouldAddLinkToCreateDraft(Vorgang vorgang) { + BooleanSupplier isCreatingDraftAllowed(Vorgang vorgang) { return () -> featureToggleProperties.isBescheidWizard() && isVorgangInBearbeitung(vorgang); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java index e535a2a8a1e894837959ce2cf87ada9ee7f33c37..69f2e7690b0a0a4911875a7ad402b4219d22752a 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java @@ -17,9 +17,11 @@ import org.mockito.Mock; import org.mockito.Spy; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; +import org.springframework.web.util.UriTemplate; import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.UserProfileUrlProvider; +import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -60,7 +62,7 @@ class BescheidVorgangProcessorTest { @Test void shouldNotHaveLinkToDraft() { - givenLinkToDraftShouldBeAdded(false); + givenRetrievingDraftIsAllowed(false); var model = callProcess(); @@ -69,7 +71,7 @@ class BescheidVorgangProcessorTest { @Test void shouldHaveLinkToDraft() { - givenLinkToDraftShouldBeAdded(true); + givenRetrievingDraftIsAllowed(true); var model = callProcess(); @@ -80,7 +82,7 @@ class BescheidVorgangProcessorTest { @Test void shouldHaveLinkToCreateBescheidDraft() { - givenLinkToCrateDraftShouldBeAdded(true); + givenCreatingDraftIsAllowed(true); var model = callProcess(); @@ -92,19 +94,39 @@ class BescheidVorgangProcessorTest { @Test void shouldNotHaveLinkToCreateBescheidDraft() { - givenLinkToCrateDraftShouldBeAdded(false); + givenCreatingDraftIsAllowed(false); var model = callProcess(); assertThat(model.getLink(BescheidVorgangProcessor.REL_CREATE_BESCHEID_DRAFT)).isEmpty(); } - private void givenLinkToDraftShouldBeAdded(boolean shouldBeAdded) { - doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).shouldAddLinkToDraft(vorgang); + @Test + void shouldNotHaveLinkToBescheidUeberspringenUndVorgangAbschliessen() { + givenCreatingDraftIsAllowed(false); + + var model = callProcess(); + + assertThat(model.getLink(BescheidVorgangProcessor.REL_UEBERSPRINGEN_UND_ABSCHLIESSEN)).isEmpty(); + } + + @Test + void shouldHaveLinkToBescheidUeberspringenUndVorgangAbschliessen() { + givenCreatingDraftIsAllowed(true); + + var model = callProcess(); + + assertThat(model.getLink(BescheidVorgangProcessor.REL_UEBERSPRINGEN_UND_ABSCHLIESSEN)).isPresent().map(Link::getHref) + .hasValue(new UriTemplate(CommandByRelationController.COMMAND_BY_RELATION_PATH).expand(VorgangHeaderTestFactory.ID, + VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString()); + } + + private void givenRetrievingDraftIsAllowed(boolean shouldBeAdded) { + doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).isRetrievingDraftAllowed(vorgang); } - private void givenLinkToCrateDraftShouldBeAdded(boolean shouldBeAdded) { - doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).shouldAddLinkToCreateDraft(vorgang); + private void givenCreatingDraftIsAllowed(boolean shouldBeAdded) { + doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).isCreatingDraftAllowed(vorgang); } private EntityModel<? extends Vorgang> callProcess() { @@ -119,7 +141,7 @@ class BescheidVorgangProcessorTest { } @Nested - class TestShouldAddLinkToDraft { + class TestIsRetrievingDraftAllowed { @Test void shouldReturnTrue() { @@ -167,12 +189,12 @@ class BescheidVorgangProcessorTest { } private BooleanSupplier callMethod() { - return processor.shouldAddLinkToDraft(vorgang); + return processor.isRetrievingDraftAllowed(vorgang); } } @Nested - class TestShouldAddLinkToCreateDraft { + class TestIsCreatingDraftAllowed { @Test void shouldReturnTrue() { @@ -204,7 +226,7 @@ class BescheidVorgangProcessorTest { } private BooleanSupplier callMethod() { - return processor.shouldAddLinkToCreateDraft(vorgang); + return processor.isCreatingDraftAllowed(vorgang); } }