X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fdemo%2FHtmlControllerTest.java;h=96ac20ae926dee56fc39b022bdb0ef05169e583c;hb=a8d8724d2121865c96692a25fd29ecf0d266bf7e;hp=ceb14e486787409e442de9b046291b5de1b837e7;hpb=a59fd998f3909a11dcf0d5fe000174496628cb99;p=demos%2Ftesting diff --git a/src/test/java/de/juplo/demo/HtmlControllerTest.java b/src/test/java/de/juplo/demo/HtmlControllerTest.java index ceb14e4..96ac20a 100644 --- a/src/test/java/de/juplo/demo/HtmlControllerTest.java +++ b/src/test/java/de/juplo/demo/HtmlControllerTest.java @@ -6,13 +6,17 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; import org.mockito.ArgumentCaptor; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.ui.Model; +import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -47,8 +51,9 @@ public class HtmlControllerTest String result = controller.fetch(model, "foo"); - assertThat(result).isEqualTo("layout"); + assertThat(result).isEqualTo("home"); ArgumentCaptor> captor = ArgumentCaptor.forClass(Mono.class); + verify(model).addAttribute("path", "foo"); verify(model).addAttribute(eq("text"), captor.capture()); StepVerifier .create(captor.getValue()) @@ -56,4 +61,65 @@ public class HtmlControllerTest .expectComplete() .verify(); } + + @Test + @DisplayName("Data not found on remote-server") + void testNotFoud() + { + Mono mono = Mono.error(WebClientResponseException.create(404, "", null, null, null)); + when(service.getRemoteText("foo")).thenReturn(mono); + + String result = controller.fetch(model, "foo"); + + assertThat(result).isEqualTo("home"); + ArgumentCaptor> captor = ArgumentCaptor.forClass(Mono.class); + verify(model).addAttribute("path", "foo"); + verify(model).addAttribute(eq("text"), captor.capture()); + StepVerifier + .create(captor.getValue()) + .expectNext("404 ") + .expectComplete() + .verify(); + } + + /** + * Only the behavior on the common errors, as defined in {@link + * WebClientResponseException#create(int, String, org.springframework.http.HttpHeaders, byte[], java.nio.charset.Charset, org.springframework.http.HttpRequest) + * WebClientResponseException.create()} is tested. + */ + @DisplayName("Other error while fetching data from remote-server") + @ParameterizedTest(name = "{arguments} ==> HTTP-status={0}") + @EnumSource(value = HttpStatus.class, names = { + "BAD_REQUEST", + "UNAUTHORIZED", + "FORBIDDEN", + "METHOD_NOT_ALLOWED", + "NOT_ACCEPTABLE", + "CONFLICT", + "GONE", + "UNSUPPORTED_MEDIA_TYPE", + "TOO_MANY_REQUESTS", + "UNPROCESSABLE_ENTITY", + "INTERNAL_SERVER_ERROR", + "NOT_IMPLEMENTED", + "BAD_GATEWAY", + "SERVICE_UNAVAILABLE", + "GATEWAY_TIMEOUT" + }) + void testOtherError(HttpStatus status) + { + Mono mono = Mono.error(WebClientResponseException.create(status.value(), "", null, null, null)); + when(service.getRemoteText("foo")).thenReturn(mono); + + String result = controller.fetch(model, "foo"); + + assertThat(result).isEqualTo("home"); + ArgumentCaptor> captor = ArgumentCaptor.forClass(Mono.class); + verify(model).addAttribute(eq("text"), captor.capture()); + StepVerifier + .create(captor.getValue()) + .expectNextMatches(message -> message.startsWith(Integer.toString(status.value()))) + .expectComplete() + .verify(); + } }