diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java index 365d7e268306e05d8025a8a9e7c6937186804d53..cae792c048fd93a58a532239cbb4270d0e58003c 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidModelAssembler.java @@ -23,12 +23,15 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc static final String REL_UPLOAD_ATTACHMENT = "uploadAttachment"; static final String REL_ATTACHMENTS = "attachments"; static final String REL_UPDATE = "update"; - static final String REL_CREATE_BESCHEID_DOCUMENT = "createBescheidDocument"; + static final String REL_CREATE_BESCHEID_DOCUMENT_AUTOMATICALLY = "createBescheidDocumentAutomatically"; + static final String REL_CREATE_BESCHEID_DOCUMENT_FROM_FILE = "createBescheidDocumentFromFile"; static final String REL_BESCHEID_DOCUMENT = "bescheidDocument"; static final String REL_SEND = "send"; private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> !bescheid.getAttachments().isEmpty(); + private final BescheidService bescheidService; + @Override public EntityModel<Bescheid> toModel(Bescheid bescheid) { var selfLink = linkTo(methodOn(BescheidController.class).getDraft(bescheid.getVorgangId())); @@ -49,7 +52,9 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc .ifMatch(HAS_ATTACHMENTS) .addLink(attachmentsLink.withRel(REL_ATTACHMENTS)) .addLink(createCommandLink.withRel(REL_UPDATE)) - .addLink(createCommandLink.withRel(REL_CREATE_BESCHEID_DOCUMENT)) + .ifMatch(bescheidService::canCreateBescheidDocumentAutomatically) + .addLink(createCommandLink.withRel(REL_CREATE_BESCHEID_DOCUMENT_AUTOMATICALLY)) + .addLink(createCommandLink.withRel(REL_CREATE_BESCHEID_DOCUMENT_FROM_FILE)) .addLink(createCommandLink.withRel(REL_SEND)) .buildModel(); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java index 78d288a3afb3324f1a9c60a9cc9ab07608f5e4df..c423e4b2d165b61a05c2fac8824b7164fdfb8151 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java @@ -2,6 +2,7 @@ package de.ozgcloud.alfa.bescheid; import static de.ozgcloud.alfa.bescheid.BescheidModelAssembler.*; import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import java.util.Collections; @@ -9,6 +10,8 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.Spy; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.IanaLinkRelations; @@ -22,8 +25,12 @@ import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; class BescheidModelAssemblerTest { @Spy + @InjectMocks private BescheidModelAssembler assembler; + @Mock + private BescheidService bescheidService; + @Nested class TestToModel { @@ -88,10 +95,29 @@ class BescheidModelAssemblerTest { } @Test - void shouldHaveCreateBescheidDocumentLink() { + void shouldHaveCreateBescheidDocumentAutomaticallyLink() { + when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true); + var model = callToModel(); - assertThat(model.getLink(REL_CREATE_BESCHEID_DOCUMENT)).isPresent().get().extracting(Link::getHref) + assertThat(model.getLink(REL_CREATE_BESCHEID_DOCUMENT_AUTOMATICALLY)).isPresent().get().extracting(Link::getHref) + .isEqualTo(createCommandLink()); + } + + @Test + void shoulNotdHaveCreateBescheidDocumentAutomaticallyLink() { + when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false); + + var model = callToModel(); + + assertThat(model.getLink(REL_CREATE_BESCHEID_DOCUMENT_AUTOMATICALLY)).isEmpty(); + } + + @Test + void shouldHaveCreateBescheidDocumentFromFileLink() { + var model = callToModel(); + + assertThat(model.getLink(REL_CREATE_BESCHEID_DOCUMENT_FROM_FILE)).isPresent().get().extracting(Link::getHref) .isEqualTo(createCommandLink()); } @@ -113,12 +139,21 @@ class BescheidModelAssemblerTest { @Test void shouldHaveOnlyExpectedLinks() { + when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true); + var model = callToModel(); assertThat(model.getLinks()).extracting(Link::getRel).containsExactlyInAnyOrder( - IanaLinkRelations.SELF, LinkRelation.of(REL_DELETE), LinkRelation.of(REL_UPLOAD_BESCHEID_FILE), - LinkRelation.of(REL_UPLOAD_ATTACHMENT), LinkRelation.of(REL_ATTACHMENTS), LinkRelation.of(REL_UPDATE), - LinkRelation.of(REL_CREATE_BESCHEID_DOCUMENT), LinkRelation.of(REL_BESCHEID_DOCUMENT), LinkRelation.of(REL_SEND)); + IanaLinkRelations.SELF, + LinkRelation.of(REL_DELETE), + LinkRelation.of(REL_UPLOAD_BESCHEID_FILE), + LinkRelation.of(REL_UPLOAD_ATTACHMENT), + LinkRelation.of(REL_ATTACHMENTS), + LinkRelation.of(REL_UPDATE), + LinkRelation.of(REL_CREATE_BESCHEID_DOCUMENT_AUTOMATICALLY), + LinkRelation.of(REL_CREATE_BESCHEID_DOCUMENT_FROM_FILE), + LinkRelation.of(REL_BESCHEID_DOCUMENT), + LinkRelation.of(REL_SEND)); } @Test