Skip to content
Snippets Groups Projects
Commit 40df4b8d authored by Felix Reichenbach's avatar Felix Reichenbach
Browse files

OZG-7572 OZG-7901 only add weitergeleitet status link if forward feature is...

OZG-7572 OZG-7901 only add weitergeleitet status link if forward feature is enabled and add missing unit tests
parent 2ce6e43d
Branches
Tags
1 merge request!21OZG-7572 Weiterleiten Filter
......@@ -27,12 +27,14 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.server.LinkBuilder;
import org.springframework.stereotype.Component;
import de.ozgcloud.alfa.common.FeatureToggleProperties;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserId;
import de.ozgcloud.alfa.common.user.UserRole;
......@@ -70,9 +72,7 @@ class RootViewLinkHandler {
private final CurrentUserService currentUserService;
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.WEITERGELEITET);
private final FeatureToggleProperties featureToggleProperties;
public void addViewLinks(EntityModel<Root> model, Optional<UserId> userId) {
model.add(buildGetAllVorgaengeLink());
......@@ -158,7 +158,7 @@ class RootViewLinkHandler {
}
void addVorgangStatusLinks(EntityModel<Root> model, String linkRelTemplate) {
statusList.forEach(status -> model.add(buildGetAllVorgaengeByStatus(status, linkRelTemplate)));
getVorgangStatusStream().forEach(status -> model.add(buildGetAllVorgaengeByStatus(status, linkRelTemplate)));
}
Link buildGetAllVorgaengeByStatus(VorgangStatus status, String linkRelTemplate) {
......@@ -175,7 +175,14 @@ class RootViewLinkHandler {
}
List<Link> buildVorgangStatusLinks(String linkRelTemplate, UserId userId) {
return statusList.stream().map(status -> buildGetAllVorgaengeByAssignedToAndStatus(status, linkRelTemplate, userId)).toList();
return getVorgangStatusStream().map(status -> buildGetAllVorgaengeByAssignedToAndStatus(status, linkRelTemplate, userId)).toList();
}
Stream<VorgangStatus> getVorgangStatusStream() {
return Stream
.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG, VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN,
VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN, VorgangStatus.WEITERGELEITET)
.filter(status -> status != VorgangStatus.WEITERGELEITET || featureToggleProperties.isForwardByOzgCloudEnabled());
}
Link buildGetAllVorgaengeByAssignedToAndStatus(VorgangStatus status, String linkRelTemplate, UserId userId) {
......@@ -214,4 +221,5 @@ class RootViewLinkHandler {
.getAllByAssignedToAndUngeleseneNachrichten(0, PAGE_SIZE, userId, VorgangController.PARAM_NACHRICHTEN_UNGELESENE))
.withRel(linkRel);
}
}
\ No newline at end of file
......@@ -47,6 +47,7 @@ import org.springframework.hateoas.LinkRelation;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.alfa.common.FeatureToggleProperties;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserId;
import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
......@@ -63,6 +64,8 @@ class RootViewLinkHandlerTest {
private CurrentUserService currentUserService;
@Mock
private SystemStatusService systemStatusService;
@Mock
private FeatureToggleProperties featureToggleProperties;
@DisplayName("Add view links")
@Nested
......@@ -213,7 +216,7 @@ class RootViewLinkHandlerTest {
}
@Test
void shouldCallAddVorgangStatusLinks() {
void shouldCallAddAllVorgangStatusLinks() {
viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
verify(viewLinkHandler).addAllVorgangStatusLinks(model);
......@@ -435,9 +438,19 @@ 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);
private final List<VorgangStatus> statuses = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN);
@BeforeEach
void mock() {
doReturn(statuses.stream()).when(viewLinkHandler).getVorgangStatusStream();
}
@Test
void shouldCallGetVorgangStatusStream() {
viewLinkHandler.buildVorgangStatusLinks(RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE, UserProfileTestFactory.ID);
verify(viewLinkHandler).getVorgangStatusStream();
}
@Test
void shouldCallBuildVorgangListByPageLink() {
......@@ -449,7 +462,7 @@ class RootViewLinkHandlerTest {
@Test
void shouldReturnLinks() {
var expectedLinks = LinkTestFactory.createList(8);
var expectedLinks = LinkTestFactory.createList(statuses.size());
doAnswer(AdditionalAnswers.returnsElementsOf(expectedLinks)).when(viewLinkHandler).buildGetAllVorgaengeByAssignedToAndStatus(any(),
any(), any());
......@@ -532,7 +545,7 @@ class RootViewLinkHandlerTest {
@DisplayName("build get all vorgaenge by status")
@Nested
class TestBuildGetAllByStatus {
class TestBuildGetAllVorgaengeByStatus {
@ParameterizedTest
@EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN",
......@@ -543,6 +556,27 @@ class RootViewLinkHandlerTest {
assertThat(link.getHref()).isEqualTo("/api/vorgangs?page=0&limit=100&status=" + status.toString());
}
@ParameterizedTest
@EnumSource(mode = Mode.INCLUDE, names = { "NEU", "ANGENOMMEN", "IN_BEARBEITUNG", "BESCHIEDEN", "ABGESCHLOSSEN", "VERWORFEN",
"ZU_LOESCHEN", "WEITERGELEITET" })
void shouldCallFormatLinkRelTemplate(VorgangStatus status) {
viewLinkHandler.buildGetAllVorgaengeByStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE);
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 shouldHaveFormattedRelation(VorgangStatus status) {
var expectedRelation = LoremIpsum.getInstance().getWords(1);
doReturn(expectedRelation).when(viewLinkHandler).formatLinkRelTemplate(any(), any());
var link = viewLinkHandler.buildGetAllVorgaengeByStatus(status, RootViewLinkHandler.VORGAENGE_MY_REL_TEMPLATE);
assertThat(link.getRel()).isEqualTo(LinkRelation.of(expectedRelation));
}
}
@DisplayName("build get all unassigned vorgaenge by status")
......@@ -729,4 +763,90 @@ class RootViewLinkHandlerTest {
}
}
@Nested
class TestAddVorgangStatusLinks {
private final EntityModel<Root> model = EntityModel.of(RootTestFactory.create());
private final List<VorgangStatus> vorgangStatuses = List.of(VorgangStatus.NEU, VorgangStatus.BESCHIEDEN);
private final List<Link> links = LinkTestFactory.createList(vorgangStatuses.size());
@BeforeEach
void mock() {
doReturn(vorgangStatuses.stream()).when(viewLinkHandler).getVorgangStatusStream();
doAnswer(AdditionalAnswers.returnsElementsOf(links)).when(viewLinkHandler).buildGetAllVorgaengeByStatus(any(), any());
}
@Test
void shouldCallGetVorgangStatusStream() {
viewLinkHandler.addVorgangStatusLinks(model, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE);
verify(viewLinkHandler).getVorgangStatusStream();
}
@Test
void shouldCallBuildGetAllVorgaengeByStatus() {
viewLinkHandler.addVorgangStatusLinks(model, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE);
vorgangStatuses
.forEach(status -> verify(viewLinkHandler).buildGetAllVorgaengeByStatus(status, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE));
}
@Test
void shouldAddLinksToModel() {
viewLinkHandler.addVorgangStatusLinks(model, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE);
assertThat(model.getLinks()).containsExactlyInAnyOrderElementsOf(links);
}
}
@Nested
class TestGetVorgangStatusStream {
@Test
void shouldCallFeatureToggleProperties() {
viewLinkHandler.getVorgangStatusStream();
verify(featureToggleProperties).isForwardByOzgCloudEnabled();
}
@Nested
class TestOnIsForwardByOzgCloudEnabled {
@BeforeEach
void mock() {
when(featureToggleProperties.isForwardByOzgCloudEnabled()).thenReturn(true);
}
@Test
void shouldReturnStream() {
var expectedStatuses = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG,
VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN,
VorgangStatus.WEITERGELEITET);
var stream = viewLinkHandler.getVorgangStatusStream();
assertThat(stream).containsExactlyInAnyOrderElementsOf(expectedStatuses);
}
}
@Nested
class TestOnIsNotForwardByOzgCloudEnabled {
@BeforeEach
void mock() {
when(featureToggleProperties.isForwardByOzgCloudEnabled()).thenReturn(false);
}
@Test
void shouldReturnStream() {
var expectedStatuses = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG,
VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN);
var stream = viewLinkHandler.getVorgangStatusStream();
assertThat(stream).containsExactlyInAnyOrderElementsOf(expectedStatuses);
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment