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 a0113b5e929ecb32b24e7777200a696628da7d24..25e5daeeda18211fe04c4ad6c22d1ce1b3cfd142 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 @@ -6,25 +6,29 @@ import java.util.Objects; import java.util.function.BooleanSupplier; import org.springframework.hateoas.EntityModel; +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.common.command.CommandController; import de.ozgcloud.alfa.vorgang.Vorgang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import lombok.RequiredArgsConstructor; @Component @RequiredArgsConstructor -class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityModel<? extends Vorgang>> { +class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { static final String REL_DRAFT = "bescheidDraft"; + static final LinkRelation REL_CREATE_BESCHEID_DRAFT = LinkRelation.of("createBescheidDraft"); private final FeatureToggleProperties featureToggleProperties; private final BescheidService bescheidService; @Override - public EntityModel<? extends Vorgang> process(EntityModel<? extends Vorgang> model) { + public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { var vorgang = model.getContent(); if (Objects.isNull(vorgang)) { @@ -35,6 +39,9 @@ class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityMod .ifMatch(shouldAddLinkToDraft(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(), + null)).withRel(REL_CREATE_BESCHEID_DRAFT)) .buildModel(); } @@ -42,6 +49,10 @@ class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityMod return () -> featureToggleProperties.isBescheidWizard() && isVorgangInBearbeitung(vorgang) && draftExists(vorgang); } + BooleanSupplier shouldAddLinkToCreateDraft(Vorgang vorgang) { + return () -> featureToggleProperties.isBescheidWizard() && isVorgangInBearbeitung(vorgang); + } + boolean isVorgangInBearbeitung(Vorgang vorgang) { return Vorgang.VorgangStatus.IN_BEARBEITUNG.equals(vorgang.getStatus()); } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java index 11514b26ef8ecf1720ade6d75e859a7db5239c25..78b09e77437d01710618ee0351819412a198a274 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java @@ -62,7 +62,6 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity static final LinkRelation REL_VORGANG_FORWARDING = LinkRelation.of("forwarding"); static final LinkRelation REL_HISTORIE = LinkRelation.of("historie"); static final LinkRelation REL_BESCHEID = LinkRelation.of("createBescheid"); - static final LinkRelation REL_CREATE_BESCHEID_DRAFT = LinkRelation.of("createBescheidDraft"); static final LinkRelation REL_PROCESS_VORGANG = LinkRelation.of("processVorgang"); static final String REL_SEARCH_USER = "search-user-profiles"; @@ -116,9 +115,6 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity .ifMatch(() -> isCreateBescheidEnabled(vorgang)) .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null)).withRel(REL_BESCHEID)) - .ifMatch(() -> featureToggleProperties.isBescheidWizard()) - .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), - null)).withRel(REL_CREATE_BESCHEID_DRAFT)) .ifMatch(this::isProcessable) .addLink( () -> linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), 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 229f25f7dc8900c850f7a1a5d1b79bcedeb1fe6a..e535a2a8a1e894837959ce2cf87ada9ee7f33c37 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 @@ -28,6 +28,8 @@ import lombok.NoArgsConstructor; class BescheidVorgangProcessorTest { + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + @Mock private FeatureToggleProperties featureToggleProperties; @Mock @@ -51,16 +53,14 @@ class BescheidVorgangProcessorTest { @Nested class TestLinks { - private final Vorgang vorgang = VorgangHeaderTestFactory.create(); - @BeforeEach void init() { initUserProfileUrlProvider(new UserProfileUrlProvider()); } @Test - void shouldNotHaveDraftLink() { - givenDraftLinkShouldBeAdded(false); + void shouldNotHaveLinkToDraft() { + givenLinkToDraftShouldBeAdded(false); var model = callProcess(); @@ -68,8 +68,8 @@ class BescheidVorgangProcessorTest { } @Test - void shouldHaveDraftLink() { - givenDraftLinkShouldBeAdded(true); + void shouldHaveLinkToDraft() { + givenLinkToDraftShouldBeAdded(true); var model = callProcess(); @@ -78,17 +78,42 @@ class BescheidVorgangProcessorTest { + BescheidController.REQUEST_PARAM_STATUS_DRAFT); } - private void givenDraftLinkShouldBeAdded(boolean shouldBeAdded) { + @Test + void shouldHaveLinkToCreateBescheidDraft() { + givenLinkToCrateDraftShouldBeAdded(true); + + var model = callProcess(); + + assertThat(model.getLink(BescheidVorgangProcessor.REL_CREATE_BESCHEID_DRAFT)).isPresent().get() + .extracting(Link::getHref) + .isEqualTo("/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/relations/" + VorgangHeaderTestFactory.ID + "/" + + VorgangHeaderTestFactory.VERSION + "/commands"); + } + + @Test + void shouldNotHaveLinkToCreateBescheidDraft() { + givenLinkToCrateDraftShouldBeAdded(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); } + private void givenLinkToCrateDraftShouldBeAdded(boolean shouldBeAdded) { + doReturn((BooleanSupplier) () -> shouldBeAdded).when(processor).shouldAddLinkToCreateDraft(vorgang); + } + private EntityModel<? extends Vorgang> callProcess() { return processor.process(EntityModel.of(vorgang)); } } @NoArgsConstructor - private static class NullableEntityModel extends EntityModel<Vorgang> { + private static class NullableEntityModel extends EntityModel<VorgangWithEingang> { } } @@ -96,8 +121,6 @@ class BescheidVorgangProcessorTest { @Nested class TestShouldAddLinkToDraft { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - @Test void shouldReturnTrue() { givenFeatureToggleEnabled(true); @@ -139,10 +162,6 @@ class BescheidVorgangProcessorTest { assertThat(booleanSupplier.getAsBoolean()).isFalse(); } - private void givenVorgangInBearbeitung(boolean inBearbeitung) { - doReturn(inBearbeitung).when(processor).isVorgangInBearbeitung(vorgang); - } - private void givenDraftExists(boolean exists) { doReturn(exists).when(processor).draftExists(vorgang); } @@ -152,6 +171,43 @@ class BescheidVorgangProcessorTest { } } + @Nested + class TestShouldAddLinkToCreateDraft { + + @Test + void shouldReturnTrue() { + givenFeatureToggleEnabled(true); + givenVorgangInBearbeitung(true); + + var booleanSupplier = callMethod(); + + assertThat(booleanSupplier.getAsBoolean()).isTrue(); + } + + @Test + void shouldReturnFalseIfFeatureToggleIsDisabled() { + givenFeatureToggleEnabled(false); + + var booleanSupplier = callMethod(); + + assertThat(booleanSupplier.getAsBoolean()).isFalse(); + } + + @Test + void shouldReturnFalseIfVorgangNotInBearbeitung() { + givenFeatureToggleEnabled(true); + givenVorgangInBearbeitung(false); + + var booleanSupplier = callMethod(); + + assertThat(booleanSupplier.getAsBoolean()).isFalse(); + } + + private BooleanSupplier callMethod() { + return processor.shouldAddLinkToCreateDraft(vorgang); + } + } + @Nested class TestIsVorgangInBearbeitung { @@ -178,8 +234,6 @@ class BescheidVorgangProcessorTest { @Nested class TestDraftExists { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - @Test void shouldCallBescheidService() { processor.draftExists(vorgang); @@ -210,4 +264,7 @@ class BescheidVorgangProcessorTest { when(featureToggleProperties.isBescheidWizard()).thenReturn(enabled); } + private void givenVorgangInBearbeitung(boolean inBearbeitung) { + doReturn(inBearbeitung).when(processor).isVorgangInBearbeitung(vorgang); + } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java index bbe3a84215e725c40c4d99d621f290fdf19af694..1022eb3a27b1e8dfc262aafc25ab99b4d80883c0 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java @@ -569,38 +569,4 @@ class VorgangWithEingangProcessorTest { } } } - - @Nested - class TestCreateBescheidDraftLink { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final EntityModel<VorgangWithEingang> vorgangEntityModel = EntityModel.of(vorgang); - - @BeforeEach - void activateFeature() { - initUserProfileUrlProvider(urlProvider); - } - - @Test - void shouldHaveCreateBescheidDraftLink() { - when(featureToggleProperties.isBescheidWizard()).thenReturn(true); - - var model = processor.process(vorgangEntityModel); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_CREATE_BESCHEID_DRAFT)).isPresent().get() - .extracting(Link::getHref) - .isEqualTo("/api/vorgangs/" + VorgangHeaderTestFactory.ID + "/relations/" + VorgangHeaderTestFactory.ID + "/" - + VorgangHeaderTestFactory.VERSION + "/commands"); - } - - @Test - void shouldNotHaveCreateBescheidDraftLink() { - when(featureToggleProperties.isBescheidWizard()).thenReturn(false); - - var model = processor.process(vorgangEntityModel); - - assertThat(model.getLink(VorgangWithEingangProcessor.REL_CREATE_BESCHEID_DRAFT)).isEmpty(); - } - } - } \ No newline at end of file