diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java index a8af53edb791331f6beb006f0b95bd89d8758f8d..6a832f1fd28a98913c5d632926df270dbf9c69de 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java @@ -72,7 +72,7 @@ class RootViewLinkHandler { private final SystemStatusService systemStatusService; private final List<VorgangStatus> statusList = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG, - VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN); + VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN, VorgangStatus.WEITERGELEITET); public void addViewLinks(EntityModel<Root> model, Optional<UserId> userId) { model.add(buildGetAllVorgaengeLink()); diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/LinkTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/LinkTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..011dd9db09c4aa8690dee42d024244373bebf9b5 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/LinkTestFactory.java @@ -0,0 +1,19 @@ +package de.ozgcloud.alfa; + +import java.util.List; +import java.util.stream.Stream; + +import org.springframework.hateoas.Link; + +import com.thedeanda.lorem.LoremIpsum; + +public class LinkTestFactory { + + public static Link create() { + return Link.of(LoremIpsum.getInstance().getUrl()); + } + + public static List<Link> createList(int size) { + return Stream.iterate(0, i -> i + 1).limit(size).map(i -> create()).toList(); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java index 6f0e2b655828b4283ba6947fbc81dedeb0783ffd..0b8fd47ccba6b395fc4df64c34026035646620d8 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -36,6 +37,7 @@ 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.EnumSource.Mode; +import org.mockito.AdditionalAnswers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -433,29 +435,66 @@ class RootViewLinkHandlerTest { class TestBuildVorgangStatusLinks { private final UserId userId = UserProfileTestFactory.ID; + private final List<VorgangStatus> statuses = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG, + VorgangStatus.BESCHIEDEN, + VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN, VorgangStatus.WEITERGELEITET); @Test void shouldCallBuildVorgangListByPageLink() { viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); - verify(viewLinkHandler, times(7)).buildGetAllVorgaengeByAssignedToAndStatus( - any(VorgangStatus.class), - eq(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE), - eq(userId)); + statuses.forEach(status -> verify(viewLinkHandler).buildGetAllVorgaengeByAssignedToAndStatus(status, + RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, userId)); } @Test - void shouldCallFormatLinkRelTemplate() { - viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); + void shouldReturnLinks() { + var expectedLinks = LinkTestFactory.createList(8); + doAnswer(AdditionalAnswers.returnsElementsOf(expectedLinks)).when(viewLinkHandler).buildGetAllVorgaengeByAssignedToAndStatus(any(), + any(), any()); + + var links = viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); - verify(viewLinkHandler, times(7)).formatLinkRelTemplate(eq(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE), any(VorgangStatus.class)); + assertThat(links).containsExactlyInAnyOrderElementsOf(expectedLinks); } + } - @Test - void shouldBuildLinks() { - var links = viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID); + @DisplayName("build get all vorgaenge by assignedTo and status") + @Nested + class TestBuildGetAllVorgaengeByAssignedToAndStatus { + + @ParameterizedTest + @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", + "ZU_LOESCHEN", "WEITERGELEITET" }) + void shouldCallFormatLinkRelTemplate(VorgangStatus status) { + viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, + UserProfileTestFactory.ID); + + verify(viewLinkHandler).formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, status); + } + + @ParameterizedTest + @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", + "ZU_LOESCHEN", "WEITERGELEITET" }) + void shouldAddByAssignedToAndStatus(VorgangStatus status) { + var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, + UserProfileTestFactory.ID); + + assertThat(link.getHref()).isEqualTo( + "/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID.toString() + "&status=" + status.toString()); + } + + @ParameterizedTest + @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", + "ZU_LOESCHEN", "WEITERGELEITET" }) + void shouldHaveFormattedRelation(VorgangStatus status) { + var expectedRelation = LoremIpsum.getInstance().getWords(1); + doReturn(expectedRelation).when(viewLinkHandler).formatLinkRelTemplate(any(), any()); + + var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, + UserProfileTestFactory.ID); - assertThat(links).hasSize(7); + assertThat(link.getRel()).isEqualTo(LinkRelation.of(expectedRelation)); } } @@ -465,7 +504,7 @@ class RootViewLinkHandlerTest { @ParameterizedTest @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) + "ZU_LOESCHEN", "WEITERGELEITET" }) void shouldCallFormatLinkRelTemplateWithAllVorgaengeTemplate(VorgangStatus status) { var linkRel = viewLinkHandler.formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, status); @@ -474,7 +513,7 @@ class RootViewLinkHandlerTest { @ParameterizedTest @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) + "ZU_LOESCHEN", "WEITERGELEITET" }) void shouldCallFormatLinkRelTemplateWithMyVorgaengeTemplate(VorgangStatus status) { var linkRel = viewLinkHandler.formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, status); @@ -483,7 +522,7 @@ class RootViewLinkHandlerTest { @ParameterizedTest @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) + "ZU_LOESCHEN", "WEITERGELEITET" }) void shouldCallFormatLinkRelTemplateWithUnassignedVorgaengeTemplate(VorgangStatus status) { var linkRel = viewLinkHandler.formatLinkRelTemplate(RootViewLinkHandler.VORGAENGE_UNASSIGNED_REL_TEMPLATE, status); @@ -497,7 +536,7 @@ class RootViewLinkHandlerTest { @ParameterizedTest @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) + "ZU_LOESCHEN", "WEITERGELEITET" }) void shouldAddByStatus(VorgangStatus status) { var link = viewLinkHandler.buildGetAllVorgaengeByStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE); @@ -506,29 +545,13 @@ class RootViewLinkHandlerTest { } - @DisplayName("build get all vorgaenge by assignedTo and status") - @Nested - class TestBuildGetAllVorgaengeByAssignedToAndStatus { - - @ParameterizedTest - @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) - void shouldAddByAssignedToAndStatus(VorgangStatus status) { - var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, - UserProfileTestFactory.ID); - - assertThat(link.getHref()).isEqualTo( - "/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID.toString() + "&status=" + status.toString()); - } - } - @DisplayName("build get all unassigned vorgaenge by status") @Nested class TestBuildGetAllUnassignedVorgaengeByStatus { @ParameterizedTest @EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN", - "ZU_LOESCHEN" }) + "ZU_LOESCHEN", "WEITERGELEITET" }) void shouldAddByUnassignedToAndStatus(VorgangStatus status) { var link = viewLinkHandler.buildGetAllVorgaengeByAssignedToAndStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE, UserId.empty());