Added a html-controller, that renders the fetched data
[demos/testing] / src / test / java / de / juplo / demo / HtmlControllerTest.java
diff --git a/src/test/java/de/juplo/demo/HtmlControllerTest.java b/src/test/java/de/juplo/demo/HtmlControllerTest.java
new file mode 100644 (file)
index 0000000..ceb14e4
--- /dev/null
@@ -0,0 +1,59 @@
+package de.juplo.demo;
+
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.ui.Model;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+
+/**
+ * Unit-Test for class {@link RemoteContentHtmlController}.
+ * @author Kai Moritz
+ */
+@ExtendWith(SpringExtension.class)
+public class HtmlControllerTest
+{
+  HtmlController controller;
+
+  @MockBean
+  RemoteContentService service;
+  @MockBean
+  Model model;
+
+
+  @BeforeEach
+  void setUp()
+  {
+    controller = new HtmlController(service);
+  }
+
+
+  @Test
+  @DisplayName("Data successfully fetched from remote-server")
+  void testOK()
+  {
+    when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
+
+    String result = controller.fetch(model, "foo");
+
+    assertThat(result).isEqualTo("layout");
+    ArgumentCaptor<Mono<String>> captor = ArgumentCaptor.forClass(Mono.class);
+    verify(model).addAttribute(eq("text"), captor.capture());
+    StepVerifier
+        .create(captor.getValue())
+        .expectNext("bar")
+        .expectComplete()
+        .verify();
+  }
+}