Missing path-parameter renders a page without remote-data (no 400)
[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 static org.mockito.Mockito.verify;
11 import static org.mockito.Mockito.when;
12 import org.springframework.beans.factory.annotation.Autowired;
13 import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
14 import org.springframework.boot.test.mock.mockito.MockBean;
15 import org.springframework.test.context.junit.jupiter.SpringExtension;
16 import org.springframework.test.web.reactive.server.WebTestClient;
17 import reactor.core.publisher.Mono;
18
19
20 /**
21  * Narrow Integration-Test for the {@link HtmlController}.
22  * @author Kai Moritz
23  */
24 @ExtendWith(SpringExtension.class)
25 @WebFluxTest()
26 public class HtmlControllerIT
27 {
28   @Autowired
29   WebTestClient webClient;
30   @MockBean
31   RemoteContentService service;
32
33
34   @Test
35   @DisplayName("Mapping for HtmlController: /?path=foo")
36   void testUriWithParameter()
37   {
38     when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
39     webClient
40         .get()
41         .uri("/?path=foo")
42         .exchange()
43         .expectStatus().isOk()
44         .expectBody(String.class).value(rendered ->
45         {
46           Document doc = Jsoup.parse(rendered);
47           assertThat(
48               doc.select("html > body > main > div > div > div > pre").text())
49               .isEqualTo("bar");
50         });
51     verify(service).getRemoteText("foo");
52   }
53
54   @Test
55   @DisplayName("Mapping for HtmlController: /")
56   void testUriWithoutParameter()
57   {
58     webClient
59         .get()
60         .uri("/")
61         .exchange()
62         .expectStatus().isOk()
63         .expectBody(String.class).value(rendered ->
64         {
65           Document doc = Jsoup.parse(rendered);
66           assertThat(
67               doc
68                   .select("html > body > main > div > div > div > pre")
69                   .isEmpty())
70               .isFalse();
71           assertThat(
72               doc
73                   .select("html > body > main > div > div > div > pre")
74                   .text())
75               .isEmpty();
76         });
77   }
78 }