diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java index e25e5262112fa8d243bc9019d499ceae874db313..cdcc60be022212764463013dd956efa906508806 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java @@ -39,6 +39,7 @@ import de.ozgcloud.alfa.common.CollectionModelBuilder; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.command.CommandController; import de.ozgcloud.alfa.vorgang.VorgangController; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import lombok.RequiredArgsConstructor; @Component @@ -59,19 +60,19 @@ class CollaborationModelAssembler implements RepresentationModelAssembler<Collab } public CollectionModel<EntityModel<Collaboration>> toCollectionModel(Stream<? extends Collaboration> entities, String vorgangId) { + var vorgang = vorgangController.getVorgang(vorgangId); var entityModels = entities.map(this::toModel).toList(); var selfLink = linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgangId)).withSelfRel(); return CollectionModelBuilder.fromEntities(entityModels) .addLink(selfLink) - .ifMatch(entityModels::isEmpty) - .addLink(() -> buildCreateCollaborationRequestLink(vorgangId)) + .ifMatch(() -> entityModels.isEmpty() && vorgangController.isEditable(vorgang)) + .addLink(() -> buildCreateCollaborationRequestLink(vorgang)) .buildModel(); } - Link buildCreateCollaborationRequestLink(String vorgangId) { - var vorgang = vorgangController.getVorgang(vorgangId); + Link buildCreateCollaborationRequestLink(VorgangWithEingang vorgang) { return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null)).withRel(REL_CREATE_COLLABORATION_REQUEST); } 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 389f6d3d74d1b1d7e270809fabbe1f167e14fff3..33e5c38b351cb727281233dd7b9e9a26d88acc55 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 @@ -36,6 +36,7 @@ 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.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import lombok.RequiredArgsConstructor; @@ -49,6 +50,7 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel static final LinkRelation REL_ARCHIVE = LinkRelation.of("archive"); private final DmsProperties dmsProperties; + private final VorgangController vorgangController; @Override public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { @@ -59,9 +61,9 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel } return ModelBuilder.fromModel(model) - .ifMatch(IS_VORGANG_ABGESCHLOSSEN) + .ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(vorgangController::isEditable)) .addLink(linkTo(methodOn(ExportVorgangController.class).exportVorgang(vorgang.getId())).withRel(REL_EXPORT)) - .ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(isDmsEnabled())) + .ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(isDmsEnabled()).and(vorgangController::isEditable)) .addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null)).withRel(REL_ARCHIVE)) .buildModel(); diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java index 61bc5ec641fa9e92ccd5bc15af397a8835ef5864..5281c140049b6c730996d7243ae76b3e0a3ec408 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; import org.springframework.hateoas.LinkRelation; @@ -43,8 +42,11 @@ import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderungController.LoeschAnforderungByVorgangController; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import de.ozgcloud.alfa.vorgang.VorgangController; +import lombok.RequiredArgsConstructor; @Component +@RequiredArgsConstructor class LoeschAnforderungVorgangProcessor implements RepresentationModelProcessor<EntityModel<? extends Vorgang>> { static final LinkRelation REL_LOESCHEN_ANFORDERN = LinkRelation.of("loeschen_anfordern"); @@ -53,11 +55,9 @@ class LoeschAnforderungVorgangProcessor implements RepresentationModelProcessor< static final List<String> USER_ROLES_ALLOWED_TO_LOESCHEN_ANFORDERN = List.of(UserRole.VERWALTUNG_USER, UserRole.EINHEITLICHER_ANSPRECHPARTNER); static final List<VorgangStatus> VORGANG_STATUSES_ALLOWED_TO_LOESCHEN_ANFORDERN = List.of(VorgangStatus.VERWORFEN, VorgangStatus.ABGESCHLOSSEN); - @Autowired - private LoeschAnforderungService service; - - @Autowired - private CurrentUserService currentUserService; + private final LoeschAnforderungService service; + private final CurrentUserService currentUserService; + private final VorgangController vorgangController; @Override public EntityModel<? extends Vorgang> process(EntityModel<? extends Vorgang> model) { @@ -77,7 +77,7 @@ class LoeschAnforderungVorgangProcessor implements RepresentationModelProcessor< } boolean isLoeschenAnfordernAllowed(Vorgang vorgang) { - return isAllowedStatus(vorgang) && isAllowedUserRole(); + return isAllowedStatus(vorgang) && isAllowedUserRole() && vorgangController.isEditable(vorgang); } private boolean isAllowedStatus(Vorgang vorgang) { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java index 92b0c1d2f7d251bdcb0f6dc657074a9128757794..3b6facda1bdca1ad3dd53fa54f250e4df2cbda93 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java @@ -214,7 +214,7 @@ public class VorgangController { return handleGetAllRequest(requestCriteria); } - public boolean isEditable(VorgangWithEingang vorgang) { - return vorgangService.isEditable(vorgang); + public boolean isEditable(Vorgang vorgang) { + return vorgangService.isVorgangEditable(vorgang); } } \ No newline at end of file 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 ae555e7fbcf0b33a7cb0c6ee926ae307efe29edd..47c76b1574946937db404c0342d93411f029cc6d 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 @@ -148,13 +148,6 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent boolean isAssigneable(Vorgang vorgang) { return (userService.hasRole(UserRole.VERWALTUNG_USER) || userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) - && isEditable(vorgang); - } - - boolean isEditable(Vorgang vorgang) { - var vorgangWithEingang = vorgang instanceof VorgangWithEingang ? - (VorgangWithEingang) vorgang : - vorgangService.findVorgangWithEingang(vorgang.getId()); - return vorgangService.isEditable(vorgangWithEingang); + && vorgangService.isVorgangEditable(vorgang); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java index caa2b0ac44c99fd6b904a3f7f8d940e70a651788..cb9bb12fbd8121227543a03eb95a7b38b4b2e0e0 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java @@ -98,7 +98,14 @@ class VorgangService { return userService.getUser().getOrganisationseinheitIds(); } - public boolean isEditable(VorgangWithEingang vorgang) { + public boolean isVorgangEditable(Vorgang vorgang) { + var vorgangWithEingang = vorgang instanceof VorgangWithEingang ? + (VorgangWithEingang) vorgang : + findVorgangWithEingang(vorgang.getId()); + return isVorgangWithEingangEditable(vorgangWithEingang); + } + + boolean isVorgangWithEingangEditable(VorgangWithEingang vorgang) { return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN && (vorgang.getHeader() == null || !vorgang.getHeader().isLocked()); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java index 0689b7860ea757b8901c4297d75425a15d4a5178..75b537da45bf69aaafece14961ba5db974837cfd 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessor.java @@ -27,7 +27,6 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; import java.util.Objects; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.server.RepresentationModelProcessor; @@ -38,8 +37,11 @@ import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import de.ozgcloud.alfa.vorgang.VorgangController; +import lombok.RequiredArgsConstructor; @Component +@RequiredArgsConstructor class VorgangCommandProcessor implements RepresentationModelProcessor<EntityModel<? extends Vorgang>> { static final LinkRelation REL_VORGANG_ANNEHMEN = LinkRelation.of("annehmen"); @@ -51,14 +53,14 @@ class VorgangCommandProcessor implements RepresentationModelProcessor<EntityMode static final LinkRelation REL_VORGANG_ABSCHLIESSEN = LinkRelation.of("abschliessen"); static final LinkRelation REL_VORGANG_WIEDEREROEFFNEN = LinkRelation.of("wiedereroeffnen"); - @Autowired - private CurrentUserService userService; + private final CurrentUserService userService; + private final VorgangController vorgangController; @Override public EntityModel<? extends Vorgang> process(EntityModel<? extends Vorgang> model) { var vorgang = model.getContent(); - if (Objects.isNull(vorgang)) { + if (Objects.isNull(vorgang) || !vorgangController.isEditable(vorgang)) { return model; } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java index 42136dd1f808fbbdbacf43e24f51a9072597f712..3f4db275292b754887a4287662e537e5fba55284 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java @@ -115,11 +115,25 @@ class CollaborationModelAssemblerTest { @Nested class TestToCollectionModel { + private final Collaboration collaboration = FachstelleCollaborationTestFactory.create(); + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + + @BeforeEach + void mockVorgangController() { + when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); + } @Nested class OnNonEmptyCollaborationList { + @Test + void shouldGetVorgang() { + callAssembler(); + + verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); + } + @Test void shouldCallToModel() { callAssembler(); @@ -160,12 +174,11 @@ class CollaborationModelAssemblerTest { @Nested class OnEmptyCollaborationList { - @Mock - private Link createCollaborationRequestLink; + @Test + void shouldGetVorgang() { + callAssembler(); - @BeforeEach - void mock() { - doReturn(createCollaborationRequestLink).when(assembler).buildCreateCollaborationRequestLink(VorgangHeaderTestFactory.ID); + verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); } @Test @@ -183,11 +196,40 @@ class CollaborationModelAssemblerTest { .isEqualTo(CollaborationByVorgangController.PATH + "/" + VorgangHeaderTestFactory.ID + "/collaborations"); } - @Test - void shouldHaveCreateCollaborationRequestLink() { - var collectionModel = callAssembler(); + @Nested + class OnVorgangIsEditable { + + @Mock + private Link createCollaborationRequestLink; - assertThat(collectionModel.getLinks()).contains(createCollaborationRequestLink); + @BeforeEach + void mock() { + when(vorgangController.isEditable(vorgang)).thenReturn(true); + doReturn(createCollaborationRequestLink).when(assembler).buildCreateCollaborationRequestLink(vorgang); + } + + @Test + void shouldHaveCreateCollaborationRequestLink() { + var collectionModel = callAssembler(); + + assertThat(collectionModel.getLinks()).contains(createCollaborationRequestLink); + } + } + + @Nested + class OnVorgangIsNotEditable { + + @BeforeEach + void mock() { + when(vorgangController.isEditable(vorgang)).thenReturn(false); + } + + @Test + void shouldNotHaveCreateCollaborationRequestLink() { + var collectionModel = callAssembler(); + + assertThat(collectionModel.getLink(CollaborationModelAssembler.REL_CREATE_COLLABORATION_REQUEST)).isEmpty(); + } } private CollectionModel<EntityModel<Collaboration>> callAssembler() { @@ -201,18 +243,6 @@ class CollaborationModelAssemblerTest { private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - @BeforeEach - void mockVorgangController() { - when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); - } - - @Test - void shouldCallVorgangController() { - callAssembler(); - - verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID); - } - @Test void shouldHaveHrefToCreateCommand() { var expectedHref = UriTemplate.of(CommandByRelationController.COMMAND_BY_RELATION_PATH) @@ -231,7 +261,7 @@ class CollaborationModelAssemblerTest { } private Link callAssembler() { - return assembler.buildCreateCollaborationRequestLink(VorgangHeaderTestFactory.ID); + return assembler.buildCreateCollaborationRequestLink(vorgang); } } } 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 ec98e12ec747bf427defdd422de446e66cbc9c01..756653dc959487e3fcc444bc110304ca08477e4e 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 @@ -42,6 +42,7 @@ 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.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; @@ -52,6 +53,8 @@ class ExportVorgangProcessorTest { private ExportVorgangProcessor processor; @Mock private DmsProperties dmsProperties; + @Mock + private VorgangController vorgangController; private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider(); @@ -68,8 +71,9 @@ class ExportVorgangProcessorTest { class TestExportLink { @Test - void shouldAddLinkWhenVorgangIsAbgeschlossen() { + void shouldAddLink() { var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); + givenVorgangIsEditable(vorgang); var model = processor.process(EntityModel.of(vorgang)); @@ -86,6 +90,16 @@ class ExportVorgangProcessorTest { assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); } + + @Test + void shouldNotAddLinkWhenVorgangIsNotEditable() { + var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); + givenVorgangIsNotEditable(vorgang); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty(); + } } @Nested @@ -95,6 +109,7 @@ class ExportVorgangProcessorTest { void shouldAddLink() { givenDmsIsEnabled(); var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); + givenVorgangIsEditable(vorgang); var model = processor.process(EntityModel.of(vorgang)); @@ -123,6 +138,17 @@ class ExportVorgangProcessorTest { assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); } + @Test + void shouldNotAddLinkWhenVorgangIsNotEditable() { + givenDmsIsEnabled(); + var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN); + givenVorgangIsNotEditable(vorgang); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty(); + } + void givenDmsIsEnabled() { when(dmsProperties.isEnabled()).thenReturn(true); } @@ -132,6 +158,14 @@ class ExportVorgangProcessorTest { } } + void givenVorgangIsEditable(VorgangWithEingang vorgang) { + when(vorgangController.isEditable(vorgang)).thenReturn(true); + } + + void givenVorgangIsNotEditable(VorgangWithEingang vorgang) { + when(vorgangController.isEditable(vorgang)).thenReturn(false); + } + private VorgangWithEingang vorgangInStatus(VorgangStatus status) { return VorgangWithEingangTestFactory.createBuilder().status(status).build(); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java index 67652e83e4e54afb151fe34d79815b55c50a9f61..ba6f94d6a7ba3f5518b8b371b8a1d346161afb94 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java @@ -905,19 +905,19 @@ class VorgangControllerTest { @Nested class TestIsEditable { - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final Vorgang vorgang = VorgangWithEingangTestFactory.create(); @Test void shouldCallService() { controller.isEditable(vorgang); - verify(vorgangService).isEditable(vorgang); + verify(vorgangService).isVorgangEditable(vorgang); } @ParameterizedTest @ValueSource(booleans = {true, false}) void shouldReturnServiceResult(boolean serviceResult) { - when(vorgangService.isEditable(vorgang)).thenReturn(serviceResult); + when(vorgangService.isVorgangEditable(vorgang)).thenReturn(serviceResult); var editable = controller.isEditable(vorgang); 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 3a8b5c7335a1c2caa7886678b9e21cc7fde36055..94ae793fbbe99920ac5cb16dc8551675ecd9b93d 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,8 +37,6 @@ 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; @@ -397,7 +395,7 @@ class VorgangModelAssemblerTest { modelAssembler.isAssigneable(vorgang); - verify(modelAssembler).isEditable(vorgang); + verify(vorgangService).isVorgangEditable(vorgang); } @Test @@ -463,74 +461,11 @@ class VorgangModelAssemblerTest { } private void givenVorgangIsEditable() { - doReturn(true).when(modelAssembler).isEditable(vorgang); + doReturn(true).when(vorgangService).isVorgangEditable(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); - - 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); - } + doReturn(false).when(vorgangService).isVorgangEditable(vorgang); } } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java index d2ecbd722e0e28c1d628366d7a1f6a1c57466107..fa26b153010675a2873b292c5ae8716e90ce3f98 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java @@ -35,6 +35,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -336,7 +337,70 @@ class VorgangServiceTest { } @Nested - class TestIsEditable { + class TestIsVorgangEditable { + + @Nested + class OnIsVorgangWithEingang { + + private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); + + @Test + void shouldCheckIfVorgangIsEditable() { + service.isVorgangEditable(vorgangWithEingang); + + verify(service).isVorgangWithEingangEditable(vorgangWithEingang); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnCheckResult(boolean checkResult) { + when(service.isVorgangWithEingangEditable(vorgangWithEingang)).thenReturn(checkResult); + + var editable = service.isVorgangEditable(vorgangWithEingang); + + assertThat(editable).isEqualTo(checkResult); + } + } + + @Nested + class OnIsNotVorgangWithEingang { + + private final Vorgang vorgang = VorgangHeaderTestFactory.create(); + private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); + + @BeforeEach + void init() { + doReturn(vorgangWithEingang).when(service).findVorgangWithEingang(VorgangHeaderTestFactory.ID); + } + + @Test + void shouldFindVorgangWithEingang() { + service.isVorgangEditable(vorgang); + + verify(service).findVorgangWithEingang(VorgangHeaderTestFactory.ID); + } + + @Test + void shouldCheckIfVorgangIsEditable() { + service.isVorgangEditable(vorgang); + + verify(service).isVorgangWithEingangEditable(vorgangWithEingang); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnCheckResult(boolean checkResult) { + when(service.isVorgangWithEingangEditable(vorgangWithEingang)).thenReturn(checkResult); + + var editable = service.isVorgangEditable(vorgang); + + assertThat(editable).isEqualTo(checkResult); + } + } + } + + @Nested + class TestIsVorgangWithEingangEditable { @ParameterizedTest @EnumSource @@ -346,7 +410,7 @@ class VorgangServiceTest { .status(status) .build(); - var editable = service.isEditable(vorgang); + var editable = service.isVorgangWithEingangEditable(vorgang); assertThat(editable).isFalse(); } @@ -358,7 +422,7 @@ class VorgangServiceTest { .status(VorgangStatus.ZU_LOESCHEN) .build(); - var editable = service.isEditable(vorgang); + var editable = service.isVorgangWithEingangEditable(vorgang); assertThat(editable).isFalse(); } @@ -371,7 +435,7 @@ class VorgangServiceTest { .status(status) .build(); - var editable = service.isEditable(vorgang); + var editable = service.isVorgangWithEingangEditable(vorgang); assertThat(editable).isTrue(); } @@ -384,7 +448,7 @@ class VorgangServiceTest { .status(status) .build(); - var editable = service.isEditable(vorgang); + var editable = service.isVorgangWithEingangEditable(vorgang); assertThat(editable).isTrue(); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java index 299e8f6e5576fd74aa31370e9a1abfcdb73ec6fc..f06e3e333ce0da60213ca90f8c8af8f808a36117 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangCommandProcessorTest.java @@ -46,6 +46,7 @@ import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; class VorgangCommandProcessorTest { @@ -59,6 +60,14 @@ class VorgangCommandProcessorTest { private VorgangCommandProcessor processor; @Mock private CurrentUserService userService; + @Mock + private VorgangController vorgangController; + + @BeforeEach + void init() { + // TODO: refactor + when(vorgangController.isEditable(any())).thenReturn(true); + } @Nested @DisplayName("add 'annehmen' link") @@ -366,5 +375,4 @@ class VorgangCommandProcessorTest { private EntityModel<Vorgang> buildVorgangInStatus(VorgangStatus status) { return EntityModel.of(VorgangHeaderTestFactory.createBuilder().status(status).build()); } - } \ No newline at end of file