33ee7825175240efdb19206d77e994f0d4ef1acd
[demos/testing] / src / test / java / de / juplo / demo / HtmlControllerIT.java
1 package de.juplo.demo;
2
3
4 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
5 import org.jsoup.Jsoup;
6 import org.jsoup.nodes.Document;
7 import org.junit.jupiter.api.DisplayName;
8 import org.junit.jupiter.api.Test;
9 import org.junit.jupiter.api.extension.ExtendWith;
10 import org.junit.jupiter.params.ParameterizedTest;
11 import org.junit.jupiter.params.provider.ValueSource;
12 import static org.mockito.Mockito.verify;
13 import static org.mockito.Mockito.when;
14 import org.springframework.beans.factory.annotation.Autowired;
15 import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
16 import org.springframework.boot.test.mock.mockito.MockBean;
17 import org.springframework.test.context.junit.jupiter.SpringExtension;
18 import org.springframework.test.web.reactive.server.WebTestClient;
19 import reactor.core.publisher.Mono;
20
21
22 /**
23  * Narrow Integration-Test for the {@link HtmlController}.
24  * @author Kai Moritz
25  */
26 @ExtendWith(SpringExtension.class)
27 @WebFluxTest()
28 public class HtmlControllerIT
29 {
30   @Autowired
31   WebTestClient webClient;
32   @MockBean
33   RemoteContentService service;
34
35
36   @Test
37   @DisplayName("Mapping for HtmlController with a parameter: /?path=foo")
38   void testUriWithParameter()
39   {
40     when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
41     webClient
42         .get()
43         .uri("/?path=foo")
44         .exchange()
45         .expectStatus().isOk()
46         .expectBody(String.class).value(rendered ->
47         {
48           Document doc = Jsoup.parse(rendered);
49           assertThat(
50               doc.select("html > body > main > div > div > div > pre").text())
51               .isEqualTo("bar");
52         });
53     verify(service).getRemoteText("foo");
54   }
55
56   @DisplayName("Mappings for HtmlController without a parameter")
57   @ParameterizedTest(name = "{arguments} ==> uri={0}")
58   @ValueSource(strings = { "/", "", "?foo=bar", "/?foo=bar"})
59   void testUriWithoutParameter(String uri)
60   {
61     webClient
62         .get()
63         .uri(uri)
64         .exchange()
65         .expectStatus().isOk()
66         .expectBody(String.class).value(rendered ->
67         {
68           Document doc = Jsoup.parse(rendered);
69           assertThat(
70               doc
71                   .select("html > body > main > div > div > div > pre")
72                   .isEmpty())
73               .isFalse();
74           assertThat(
75               doc
76                   .select("html > body > main > div > div > div > pre")
77                   .text())
78               .isEmpty();
79         });
80   }
81 }