From 1e25f7f846c725863a9a35878f315d5a9af5f67b Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 26 Feb 2024 17:35:05 +0100
Subject: [PATCH] OZG-4994 OZG-5068 Add more tests to VorgangControllerTest

---
 .../alfa/vorgang/VorgangControllerTest.java   | 153 +++++++++++-------
 1 file changed, 99 insertions(+), 54 deletions(-)

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 0490cbdc41..4c237346f0 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
@@ -30,10 +30,15 @@ import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
 
+import java.util.List;
+
 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.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.InjectMocks;
@@ -610,48 +615,67 @@ class VorgangControllerTest {
 		@Nested
 		class TestGetAllByUngeleseneNachrichten {
 
-			@Test
-			void shouldCallHandleGetAllRequest() {
-				doRequest();
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCallHandleGetAllRequest(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
 
 				verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class));
 			}
 
-			@DisplayName("build criteria")
-			@Nested
-			class TestBuildCriteria {
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCriteriaHavePage(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
 
-				@Test
-				void shouldHavePage() {
-					doRequest();
+				verify(controller).handleGetAllRequest(criteriaCaptor.capture());
+				assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE);
+			}
 
-					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE);
-				}
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCriteriaHaveLimit(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
+
+				verify(controller).handleGetAllRequest(criteriaCaptor.capture());
+				assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT);
+			}
+
+			static List<String> nachrichtenValues() {
+				return List.of(VorgangController.PARAM_NACHRICHTEN_UNGELESENE, "", "dummy");
+			}
+
+			@Nested
+			class WithParamNachrichtenUngelesene {
 
 				@Test
-				void shoulHaveLimit() {
-					doRequest();
+				void shouldCriteriaHaveHasUngeleseneNachrichtenTrue() {
+					doRequestWithNachrichtenParam(VorgangController.PARAM_NACHRICHTEN_UNGELESENE);
 
 					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT);
+					assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isTrue();
 				}
+			}
 
-				@Test
-				void shoulHaveHasUngeleseneNachrichten() {
-					doRequest();
+			@Nested
+			class WithoutParamNachrichtenUngelesene {
+
+				@ParameterizedTest
+				@ValueSource(strings = {"", "dummy"})
+				void shouldCriteriaHaveHasUngeleseneNachrichtenFalse(String nachrichtenValue) {
+					doRequestWithNachrichtenParam(nachrichtenValue);
 
 					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isTrue();
+					assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isFalse();
 				}
 			}
 
 			@SneakyThrows
-			private void doRequest() {
+			private void doRequestWithNachrichtenParam(String paramValue) {
 				mockMvc.perform(get(PATH)
 								.param(VorgangController.PARAM_PAGE, Integer.toString(PAGE))
 								.param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT))
-								.param(VorgangController.PARAM_NACHRICHTEN, VorgangController.PARAM_NACHRICHTEN_UNGELESENE))
+								.param(VorgangController.PARAM_NACHRICHTEN, paramValue))
 						.andExpect(status().isOk());
 			}
 		}
@@ -661,65 +685,86 @@ class VorgangControllerTest {
 
 			private static final UserId ASSIGNED_TO = UserProfileTestFactory.ID;
 
-			@Test
-			void shouldCallHandleGetAllRequest() {
-				doRequest();
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCallHandleGetAllRequest(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
 
 				verify(controller).handleGetAllRequest(any(FindVorgaengeHeaderRequestCriteria.class));
 			}
 
-			@DisplayName("build criteria")
-			@Nested
-			class TestBuildCriteria {
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCriteriaHavePage(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
 
-				@Test
-				void shouldHavePage() {
-					doRequest();
+				verify(controller).handleGetAllRequest(criteriaCaptor.capture());
+				assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE);
+			}
 
-					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getPage()).isEqualTo(PAGE);
-				}
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCriteriaHaveLimit(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
 
-				@Test
-				void shoulHaveLimit() {
-					doRequest();
+				verify(controller).handleGetAllRequest(criteriaCaptor.capture());
+				assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT);
+			}
 
-					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getLimit()).isEqualTo(LIMIT);
-				}
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldCriteriaHaveAssignedTo(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
 
-				@Test
-				void shoulHaveAssignedTo() {
-					doRequest();
+				verify(controller).handleGetAllRequest(criteriaCaptor.capture());
+				assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO);
+			}
 
-					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getFilterCriteria().getAssignedTo()).hasValue(ASSIGNED_TO);
-				}
+			@ParameterizedTest
+			@MethodSource("nachrichtenValues")
+			void shouldSetFilterByAssignedTo(String nachrichtenValue) {
+				doRequestWithNachrichtenParam(nachrichtenValue);
+
+				verify(controller).handleGetAllRequest(criteriaCaptor.capture());
+				assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue();
+			}
+
+			static List<String> nachrichtenValues() {
+				return List.of(VorgangController.PARAM_NACHRICHTEN_UNGELESENE, "", "dummy");
+			}
+
+			@Nested
+			class WithParamNachrichtenUngelesene {
 
 				@Test
-				void shouldSetFilterByAssignedTo() {
-					doRequest();
+				void shouldCriteriaHaveHasUngeleseneNachrichtenTrue() {
+					doRequestWithNachrichtenParam(VorgangController.PARAM_NACHRICHTEN_UNGELESENE);
 
 					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getFilterCriteria().isFilterByAssignedTo()).isTrue();
+					assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isTrue();
 				}
+			}
 
-				@Test
-				void shoulHaveHasUngeleseneNachrichten() {
-					doRequest();
+			@Nested
+			class WithoutParamNachrichtenUngelesene {
+
+				@ParameterizedTest
+				@ValueSource(strings = {"", "dummy"})
+				void shouldCriteriaHaveHasUngeleseneNachrichtenFalse(String nachrichtenValue) {
+					doRequestWithNachrichtenParam(nachrichtenValue);
 
 					verify(controller).handleGetAllRequest(criteriaCaptor.capture());
-					assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isTrue();
+					assertThat(criteriaCaptor.getValue().getFilterCriteria().isHasUngeleseneNachrichten()).isFalse();
 				}
 			}
 
 			@SneakyThrows
-			private void doRequest() {
+			private void doRequestWithNachrichtenParam(String paramValue) {
 				mockMvc.perform(get(PATH)
 								.param(VorgangController.PARAM_PAGE, Integer.toString(PAGE))
 								.param(VorgangController.PARAM_LIMIT, Integer.toString(LIMIT))
 								.param(VorgangController.PARAM_ASSIGNED_TO, ASSIGNED_TO.toString())
-								.param(VorgangController.PARAM_NACHRICHTEN, VorgangController.PARAM_NACHRICHTEN_UNGELESENE))
+								.param(VorgangController.PARAM_NACHRICHTEN, paramValue))
 						.andExpect(status().isOk());
 			}
 		}
-- 
GitLab