Added an integration-test for HtmlController
[demos/testing] / src / test / java / de / juplo / demo / HtmlControllerIT.java
diff --git a/src/test/java/de/juplo/demo/HtmlControllerIT.java b/src/test/java/de/juplo/demo/HtmlControllerIT.java
new file mode 100644 (file)
index 0000000..bcf037c
--- /dev/null
@@ -0,0 +1,53 @@
+package de.juplo.demo;
+
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.web.reactive.server.WebTestClient;
+import reactor.core.publisher.Mono;
+
+
+/**
+ * Narrow Integration-Test for the {@link HtmlController}.
+ * @author Kai Moritz
+ */
+@ExtendWith(SpringExtension.class)
+@WebFluxTest()
+public class HtmlControllerIT
+{
+  @Autowired
+  WebTestClient webClient;
+  @MockBean
+  RemoteContentService service;
+
+
+  @Test
+  @DisplayName("Mapping for HtmlController: /?path=foo")
+  void testUriWithParameter()
+  {
+    when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
+    webClient
+        .get()
+        .uri("/?path=foo")
+        .exchange()
+        .expectStatus().isOk()
+        .expectBody(String.class).value(rendered ->
+        {
+          Document doc = Jsoup.parse(rendered);
+          assertThat(
+              doc.select("html > body > main > div > div > div > pre").text())
+              .isEqualTo("bar");
+        });
+    verify(service).getRemoteText("foo");
+  }
+}