0334b04c65270fbef37ca8318c4bb055fa37dcaa
[demos/testing] / src / test / java / de / juplo / demo / RestControllerIT.java
1 package de.juplo.demo;
2
3
4 import org.junit.jupiter.api.DisplayName;
5 import org.junit.jupiter.api.extension.ExtendWith;
6 import org.junit.jupiter.params.ParameterizedTest;
7 import org.junit.jupiter.params.provider.ValueSource;
8 import static org.mockito.Mockito.verify;
9 import static org.mockito.Mockito.when;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
12 import org.springframework.boot.test.mock.mockito.MockBean;
13 import org.springframework.http.MediaType;
14 import org.springframework.test.context.junit.jupiter.SpringExtension;
15 import org.springframework.test.web.reactive.server.WebTestClient;
16 import reactor.core.publisher.Mono;
17
18
19 /**
20  * Narrow Integration-Test for the {@link RestController}.
21  * @author Kai Moritz
22  */
23 @ExtendWith(SpringExtension.class)
24 @WebFluxTest()
25 public class RestControllerIT
26 {
27   @Autowired
28   WebTestClient webClient;
29   @MockBean
30   RemoteContentService service;
31
32
33   @DisplayName("Valid mappings for RestController with parameter")
34   @ParameterizedTest()
35   @ValueSource(strings = { "/?path=foo", "?path=foo" })
36   void testUriWithParameter(String uri)
37   {
38     when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
39     webClient
40         .get()
41         .uri(uri)
42         .header("Accept", MediaType.TEXT_PLAIN_VALUE)
43         .exchange()
44         .expectStatus().isOk()
45         .expectBody(String.class).isEqualTo("bar");
46     verify(service).getRemoteText("foo");
47   }
48
49   @DisplayName("Mappings for RestController without a parameter")
50   @ParameterizedTest(name = "{arguments} ==> uri={0}")
51   @ValueSource(strings = { "/", "", "?foo=bar", "/?foo=bar"})
52   void testUriWithoutParameter(String uri)
53   {
54     webClient
55         .get()
56         .uri(uri)
57         .header("Accept", MediaType.TEXT_PLAIN_VALUE)
58         .exchange()
59         .expectStatus().isBadRequest()
60         .expectBody()
61         .jsonPath("status").isEqualTo(400)
62         .jsonPath("error").isEqualTo("Bad Request")
63         .jsonPath("message").isEqualTo("Required String parameter 'path' is not present")
64         .jsonPath("timestamp").exists();
65   }
66 }