4 import org.junit.jupiter.api.DisplayName;
5 import org.junit.jupiter.api.Test;
6 import org.junit.jupiter.api.extension.ExtendWith;
7 import org.junit.jupiter.params.ParameterizedTest;
8 import org.junit.jupiter.params.provider.ValueSource;
9 import static org.mockito.Mockito.verify;
10 import static org.mockito.Mockito.when;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
13 import org.springframework.boot.test.mock.mockito.MockBean;
14 import org.springframework.http.MediaType;
15 import org.springframework.test.context.junit.jupiter.SpringExtension;
16 import org.springframework.test.web.reactive.server.WebTestClient;
17 import org.springframework.web.reactive.function.client.WebClientResponseException;
18 import reactor.core.publisher.Mono;
22 * Narrow Integration-Test for the {@link RestController}.
25 @ExtendWith(SpringExtension.class)
27 public class RestControllerIT
30 WebTestClient webClient;
32 RemoteContentService service;
35 @DisplayName("Valid mappings for RestController with parameter")
37 @ValueSource(strings = { "/?path=foo", "?path=foo" })
38 void testUriWithParameter(String uri)
40 when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
44 .header("Accept", MediaType.TEXT_PLAIN_VALUE)
46 .expectStatus().isOk()
47 .expectBody(String.class).isEqualTo("bar");
48 verify(service).getRemoteText("foo");
51 @DisplayName("Mappings for RestController without a parameter")
52 @ParameterizedTest(name = "{arguments} ==> uri={0}")
53 @ValueSource(strings = { "/", "", "?foo=bar", "/?foo=bar"})
54 void testUriWithoutParameter(String uri)
59 .header("Accept", MediaType.TEXT_PLAIN_VALUE)
61 .expectStatus().isBadRequest()
63 .jsonPath("status").isEqualTo(400)
64 .jsonPath("error").isEqualTo("Bad Request")
65 .jsonPath("message").isEqualTo("Required String parameter 'path' is not present")
66 .jsonPath("timestamp").exists();
69 @DisplayName("Remote-Server answers with 404: Not Found")
71 void testResponseNotFound()
73 when(service.getRemoteText("foo")).thenReturn(Mono.error(exception(404)));
77 .header("Accept", MediaType.TEXT_PLAIN_VALUE)
79 .expectStatus().isNotFound()
81 .jsonPath("status").isEqualTo(404)
82 .jsonPath("error").isEqualTo("Not Found")
83 .jsonPath("path").isEqualTo("/")
84 .jsonPath("timestamp").exists();
88 WebClientResponseException exception(int status)
90 return WebClientResponseException.create(status, "MESSAGE", null, null, null);