diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java index ca8dc1cdf6f7497f3111933394d02cb3ae52299d..8de875f0fae7795526b3f0b7ec0dd996a2a38d79 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java @@ -45,7 +45,6 @@ import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; import de.ozgcloud.alfa.postfach.PostfachMail.Direction; import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandByVorgangController; import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHead; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -79,6 +78,7 @@ class PostfachMailModelAssembler implements RepresentationModelAssembler<Postfac .map(createdBy -> !createdBy.toString().startsWith(SYSTEM_USER_IDENTIFIER)).orElse(false); private final UserManagerUrlProvider userManagerUrlProvider; + private final VorgangController vorgangController; public RepresentationModel<EntityModel<PostfachSettings>> toCollectionModel(Stream<PostfachMail> postfachMails, VorgangWithEingang vorgang, PostfachSettings postfachSettings) { @@ -107,7 +107,7 @@ class PostfachMailModelAssembler implements RepresentationModelAssembler<Postfac void addPostfachNachrichtLinks(RepresentationModel<EntityModel<PostfachSettings>> model, VorgangWithEingang vorgang) { var vorgangId = vorgang.getId(); - if (vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN) { + if (vorgangController.isEditable(vorgang)) { model.add(linkTo(methodOn(PostfachMailCommandByVorgangController.class).sendPostfachMail(vorgangId, null)) .withRel(REL_SEND_POSTFACH_MAIL)); } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java index 538bc3b6fdc7e5b1c5a8943a5408436de316011b..ae555e7fbcf0b33a7cb0c6ee926ae307efe29edd 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java @@ -29,7 +29,6 @@ import java.util.Optional; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; import org.springframework.hateoas.RepresentationModel; @@ -44,10 +43,11 @@ import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserId; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.statistic.Statistic; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController; +import lombok.RequiredArgsConstructor; @Component +@RequiredArgsConstructor class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, EntityModel<Vorgang>> { static final String REL_NEXT = "next"; @@ -56,8 +56,8 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent static final String REL_WIEDERVORLAGEN = "wiedervorlagen"; static final String REL_VORGANG_ASSIGN = "assign"; - @Autowired - private CurrentUserService userService; + private final CurrentUserService userService; + private final VorgangService vorgangService; public RepresentationModel<EntityModel<EnhancedVorgang>> toCollectionModel(Stream<VorgangHeader> entities, VorgaengeHeaderResponse response, FindVorgaengeHeaderRequestCriteria requestCriteria, Statistic statistic) { @@ -148,6 +148,13 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent boolean isAssigneable(Vorgang vorgang) { return (userService.hasRole(UserRole.VERWALTUNG_USER) || userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) - && vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN; + && isEditable(vorgang); + } + + boolean isEditable(Vorgang vorgang) { + var vorgangWithEingang = vorgang instanceof VorgangWithEingang ? + (VorgangWithEingang) vorgang : + vorgangService.findVorgangWithEingang(vorgang.getId()); + return vorgangService.isEditable(vorgangWithEingang); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java index c77857e911bb8f7db60932f23b9b20c8da6204cd..2a94ca0fcd0a618ed77ae80988c4b61821489e70 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssembler.java @@ -37,7 +37,6 @@ import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.CollectionModelBuilder; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.wiedervorlage.WiedervorlageCommandController.WiedervorlageCommandByVorgangController; @@ -75,7 +74,7 @@ class WiedervorlageModelAssembler implements RepresentationModelAssembler<Wieder methodOn(WiedervorlageCommandController.class).updateWiedervorlage(null, wiedervorlage.getId(), wiedervorlage.getVersion())); return ModelBuilder.fromEntity(wiedervorlage).addLink(selfLink.withSelfRel()) - .ifMatch(() -> isEditable(vorgang)) + .ifMatch(() -> vorgangController.isEditable(vorgang)) .addLink(commandLink.withRel(REL_EDIT)) .ifMatch(ALLOW_ERLEDIGEN).addLink(commandLink.withRel(REL_ERLEDIGEN)) .ifMatch(ALLOW_WIEDEREROEFFNEN).addLink(commandLink.withRel(REL_WIEDEREROEFFNEN)) @@ -89,15 +88,11 @@ class WiedervorlageModelAssembler implements RepresentationModelAssembler<Wieder return CollectionModelBuilder.fromEntities(entities.map(wiedervorlage -> buildModel(wiedervorlage, vorgang))) .addLink(linkTo(WiedervorlageController.class).withSelfRel()) - .ifMatch(wiedervorlagenModel -> isEditable(vorgang)) + .ifMatch(wiedervorlagenModel -> vorgangController.isEditable(vorgang)) .addLink(linkTo(methodOn(WiedervorlageCommandByVorgangController.class).createWiedervorlage(null, vorgangId)) .withRel(REL_CREATE)) .addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash(WIEDERVORLAGE_ATTACHMENT_PATH).slash(FILE_PATH) .withRel(REL_UPLOAD_FILE)) .buildModel(); } - - private boolean isEditable(VorgangWithEingang vorgang) { - return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN; - } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java index 5011984faff86f2dd409e0237238bf754014e606..5c8e2874053681408887e2b97e6157456e3c714c 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssemblerTest.java @@ -53,7 +53,7 @@ import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; import de.ozgcloud.alfa.postfach.PostfachMail.Direction; import de.ozgcloud.alfa.postfach.PostfachMailController.PostfachMailCommandByVorgangController; import de.ozgcloud.alfa.vorgang.ServiceKontoTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHeadTestFactory; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -67,6 +67,8 @@ class PostfachMailModelAssemblerTest { private PostfachMailModelAssembler modelAssembler; @Mock private UserManagerUrlProvider userManagerUrlProvider; + @Mock + private VorgangController vorgangController; @Nested class TestToModel { @@ -455,10 +457,20 @@ class PostfachMailModelAssemblerTest { class SendPostfachMailLink { private final String sendPostfachMailLinkRel = PostfachMailModelAssembler.REL_SEND_POSTFACH_MAIL; + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + + @Test + void shouldCheckIfVorgangIsEditable() { + callModelAssembler(vorgang); + + verify(vorgangController).isEditable(vorgang); + } @Test void shouldExist() { - callModelAssembler(VorgangWithEingangTestFactory.create()); + when(vorgangController.isEditable(vorgang)).thenReturn(true); + + callModelAssembler(vorgang); var link = model.getLink(sendPostfachMailLinkRel); assertThat(link).get().extracting(Link::getHref) @@ -466,8 +478,10 @@ class PostfachMailModelAssemblerTest { } @Test - void shouldNotExistOnStatusZuLoeschen() { - callModelAssembler(VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build()); + void shouldNotExistWhenVorgangIsNotEditable() { + when(vorgangController.isEditable(vorgang)).thenReturn(false); + + callModelAssembler(vorgang); var link = model.getLink(sendPostfachMailLinkRel); assertThat(link).isEmpty(); diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java index ce086063abdabff1414092f6fb2dfbb43eb01241..3a8b5c7335a1c2caa7886678b9e21cc7fde36055 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangModelAssemblerTest.java @@ -37,6 +37,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -49,7 +51,6 @@ import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserProfileTestFactory; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.statistic.StatisticTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; class VorgangModelAssemblerTest { @@ -58,6 +59,8 @@ class VorgangModelAssemblerTest { private VorgangModelAssembler modelAssembler; @Mock private CurrentUserService userService; + @Mock + private VorgangService vorgangService; private UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); @@ -317,6 +320,7 @@ class VorgangModelAssemblerTest { class TestLinksOnModel { private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); @BeforeEach void beforeEach() { @@ -337,82 +341,39 @@ class VorgangModelAssemblerTest { assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(VorgangController.PATH + "/" + VorgangHeaderTestFactory.ID); } - @DisplayName("Without any roles") - @Nested - class WithoutRoles { - - @Test - void shouldNotHaveWiedervorlagenLink() { - var link = toModel().getLink(VorgangModelAssembler.REL_WIEDERVORLAGEN); + @Test + void shouldHaveAssignLink() { + doReturn(true).when(modelAssembler).isAssigneable(vorgang); - assertThat(link).isEmpty(); - } + var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); - @DisplayName("Should not have Vorgang-assign-links") - @Test - void shouldNotHaveAssignLink() { - var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); - - assertThat(link).isEmpty(); - } + assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(buildCommandLink()); } - @Nested - class ForRoleVerwaltungPoststelle { - - @Test - void shouldHaveAssignLink() { - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - - var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(buildCommandLink()); - } - - @Test - void shouldNotHaveAssignLink() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build(); - doReturn(false).when(modelAssembler).isAssigneable(vorgang); - - var model = modelAssembler.toModel(vorgang); - var link = model.getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); + @Test + void shouldNotHaveAssignLink() { + doReturn(false).when(modelAssembler).isAssigneable(vorgang); - assertThat(link).isEmpty(); - } + var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); + assertThat(link).isEmpty(); } - @Nested - class ForRoleVerwaltungUser { - - @BeforeEach - void mockUserService() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - } - - @Test - void shouldHaveWiedervorlagenLink() { - var link = toModel().getLink(VorgangModelAssembler.REL_WIEDERVORLAGEN); - - assertThat(link).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/wiedervorlages?vorgangId=" + VorgangHeaderTestFactory.ID); - } + @Test + void shouldHaveWiedervorlagenLink() { + when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - @Test - void shouldHaveAssignLink() { - var link = toModel().getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); + var link = toModel().getLink(VorgangModelAssembler.REL_WIEDERVORLAGEN); - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo(buildCommandLink()); - } + assertThat(link).isPresent().get().extracting(Link::getHref) + .isEqualTo("/api/wiedervorlages?vorgangId=" + VorgangHeaderTestFactory.ID); + } - @Test - void shouldNotHaveAssignLink() { - var model = modelAssembler.toModel(VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build()); - var link = model.getLink(VorgangModelAssembler.REL_VORGANG_ASSIGN); + @Test + void shouldNotHaveWiedervorlagenLink() { + var link = toModel().getLink(VorgangModelAssembler.REL_WIEDERVORLAGEN); - assertThat(link).isEmpty(); - } + assertThat(link).isEmpty(); } private String buildCommandLink() { @@ -421,62 +382,155 @@ class VorgangModelAssemblerTest { } private EntityModel<Vorgang> toModel() { - return modelAssembler.toModel(VorgangWithEingangTestFactory.create()); + return modelAssembler.toModel(vorgang); } } @Nested class TestIsAssigneable { + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + @Test - void shouldReturnTrueForVerwaltungUser() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(VorgangStatus.NEU); + void shoudCheckIfVorgangIsEditable() { + givenVerwaltungUser(); + + modelAssembler.isAssigneable(vorgang); - assertThat(modelAssembler.isAssigneable(vorgang.build())).isTrue(); + verify(modelAssembler).isEditable(vorgang); } @Test - void shouldReturnFalseForVerwaltungUser() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(VorgangStatus.NEU); + void shouldReturnTrueForVerwaltungUser() { + givenVerwaltungUser(); + givenVorgangIsEditable(); - assertThat(modelAssembler.isAssigneable(vorgang.build())).isFalse(); + assertThat(modelAssembler.isAssigneable(vorgang)).isTrue(); } @Test - void shouldReturnFalseForVerwatlugnUserAndVorgangZuLoeschen() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN); + void shouldReturnTrueForPoststelleUser() { + givenNotVerwaltungUser(); + givenPoststelleUser(); + givenVorgangIsEditable(); - assertThat(modelAssembler.isAssigneable(vorgang.build())).isFalse(); + assertThat(modelAssembler.isAssigneable(vorgang)).isTrue(); } @Test - void shouldReturnTrueForPoststelleUser() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(VorgangStatus.NEU); + void shouldReturnFalseForNotPoststelleUser() { + givenNotVerwaltungUser(); + givenNotPoststelleUser(); - assertThat(modelAssembler.isAssigneable(vorgang.build())).isTrue(); + assertThat(modelAssembler.isAssigneable(vorgang)).isFalse(); } @Test - void shouldReturnFalseForPoststelleUser() { - when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); - when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(VorgangStatus.NEU); + void shouldReturnFalseForVerwaltungUserAndVorgangNotEditable() { + givenVerwaltungUser(); + givenVorgangIsNotEditable(); + + var assignable = modelAssembler.isAssigneable(vorgang); - assertThat(modelAssembler.isAssigneable(vorgang.build())).isFalse(); + assertThat(assignable).isFalse(); } @Test - void shouldReturnFalseForPoststelleUserAndVorgangZuLoeschen() { + void shouldReturnFalseForPoststelleUserAndVorgangNotEditable() { + givenNotVerwaltungUser(); + givenPoststelleUser(); + givenVorgangIsNotEditable(); + + var assignable = modelAssembler.isAssigneable(vorgang); + + assertThat(assignable).isFalse(); + } + + private void givenVerwaltungUser() { + when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true); + } + + private void givenNotVerwaltungUser() { when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(false); + } + + private void givenPoststelleUser() { when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true); - var vorgang = VorgangHeaderTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN); + } + + private void givenNotPoststelleUser() { + when(userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false); + } + + private void givenVorgangIsEditable() { + doReturn(true).when(modelAssembler).isEditable(vorgang); + } + + private void givenVorgangIsNotEditable() { + doReturn(false).when(modelAssembler).isEditable(vorgang); + } + } + + @Nested + class IsEditable { + + @Nested + class OnIsVorgangWithEingang { + + private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); + + @Test + void shouldCheckIfVorgangIsEditable() { + modelAssembler.isEditable(vorgangWithEingang); - assertThat(modelAssembler.isAssigneable(vorgang.build())).isFalse(); + verify(vorgangService).isEditable(vorgangWithEingang); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnCheckResult(boolean checkResult) { + when(vorgangService.isEditable(vorgangWithEingang)).thenReturn(checkResult); + + var editable = modelAssembler.isEditable(vorgangWithEingang); + + assertThat(editable).isEqualTo(checkResult); + } + } + + @Nested + class OnIsNotVorgangWithEingang { + + private final Vorgang vorgang = VorgangHeaderTestFactory.create(); + private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); + + @BeforeEach + void init() { + when(vorgangService.findVorgangWithEingang(VorgangHeaderTestFactory.ID)).thenReturn(vorgangWithEingang); + } + + @Test + void shouldFindVorgangWithEingang() { + modelAssembler.isEditable(vorgang); + + verify(vorgangService).findVorgangWithEingang(VorgangHeaderTestFactory.ID); + } + + @Test + void shouldCheckIfVorgangIsEditable() { + modelAssembler.isEditable(vorgang); + + verify(vorgangService).isEditable(vorgangWithEingang); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnCheckResult(boolean checkResult) { + when(vorgangService.isEditable(vorgangWithEingang)).thenReturn(checkResult); + + var editable = modelAssembler.isEditable(vorgang); + + assertThat(editable).isEqualTo(checkResult); + } } } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java index b442bcaa6eb72d576947b6497eb0d742401d00b9..01cbb98f06ab930c917ae0bff08a2afd6d90e7aa 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/wiedervorlage/WiedervorlageModelAssemblerTest.java @@ -44,9 +44,9 @@ import org.springframework.hateoas.server.EntityLinks; import de.ozgcloud.alfa.common.UserProfileUrlProvider; import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; class WiedervorlageModelAssemblerTest { @@ -103,6 +103,8 @@ class WiedervorlageModelAssemblerTest { .replace("{wiedervorlageId}", WiedervorlageTestFactory.ID) .replace("{wiedervorlageVersion}", String.valueOf(WiedervorlageTestFactory.VERSION)); + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + @Test void shouldHaveSelfLink() { var link = buildModel().getLink(IanaLinkRelations.SELF); @@ -113,6 +115,8 @@ class WiedervorlageModelAssemblerTest { @Test void shouldHaveEditLink() { + when(vorgangController.isEditable(vorgang)).thenReturn(true); + var link = buildModel().getLink(WiedervorlageModelAssembler.REL_EDIT); assertThat(link).isPresent(); @@ -121,9 +125,9 @@ class WiedervorlageModelAssemblerTest { @Test void shouldNotHaveEditLink() { - var model = modelAssembler.buildModel(WiedervorlageTestFactory.createBuilder().done(true).build(), - VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build()); - var link = model.getLink(WiedervorlageModelAssembler.REL_EDIT); + when(vorgangController.isEditable(vorgang)).thenReturn(false); + + var link = buildModel().getLink(WiedervorlageModelAssembler.REL_EDIT); assertThat(link).isEmpty(); } @@ -201,23 +205,23 @@ class WiedervorlageModelAssemblerTest { } private EntityModel<Wiedervorlage> buildModel() { - return modelAssembler.buildModel(WiedervorlageTestFactory.create(), VorgangWithEingangTestFactory.create()); + return modelAssembler.buildModel(WiedervorlageTestFactory.create(), vorgang); } } @Nested class TestLinksOnCollectionModel { + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + @BeforeEach void beforeEach() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create()); + when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); } @Test void shouldBuildModel() { var wiedervorlage = WiedervorlageTestFactory.create(); - var vorgang = VorgangWithEingangTestFactory.create(); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); modelAssembler.toCollectionModel(Stream.of(wiedervorlage), VorgangHeaderTestFactory.ID); @@ -226,9 +230,10 @@ class WiedervorlageModelAssemblerTest { @Test void shouldHaveCreateWiedervorlageLink() { + when(vorgangController.isEditable(vorgang)).thenReturn(true); + var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(WiedervorlageTestFactory.create()).stream(), VorgangHeaderTestFactory.ID); - var link = collectionModel.getLink(WiedervorlageModelAssembler.REL_CREATE); assertThat(link).isPresent(); @@ -237,12 +242,10 @@ class WiedervorlageModelAssemblerTest { @Test void shouldNotHaveCreateWiedervorlageLink() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build(); - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); + when(vorgangController.isEditable(vorgang)).thenReturn(false); var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(WiedervorlageTestFactory.create()).stream(), VorgangHeaderTestFactory.ID); - var link = collectionModel.getLink(WiedervorlageModelAssembler.REL_CREATE); assertThat(link).isEmpty();