Added a html-controller, that renders the fetched data
[demos/testing] / src / test / java / de / juplo / demo / HtmlControllerTest.java
1 package de.juplo.demo;
2
3
4 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
5 import org.junit.jupiter.api.BeforeEach;
6 import org.junit.jupiter.api.DisplayName;
7 import org.junit.jupiter.api.Test;
8 import org.junit.jupiter.api.extension.ExtendWith;
9 import org.mockito.ArgumentCaptor;
10 import static org.mockito.ArgumentMatchers.eq;
11 import static org.mockito.Mockito.verify;
12 import static org.mockito.Mockito.when;
13 import org.springframework.boot.test.mock.mockito.MockBean;
14 import org.springframework.test.context.junit.jupiter.SpringExtension;
15 import org.springframework.ui.Model;
16 import reactor.core.publisher.Mono;
17 import reactor.test.StepVerifier;
18
19
20 /**
21  * Unit-Test for class {@link RemoteContentHtmlController}.
22  * @author Kai Moritz
23  */
24 @ExtendWith(SpringExtension.class)
25 public class HtmlControllerTest
26 {
27   HtmlController controller;
28
29   @MockBean
30   RemoteContentService service;
31   @MockBean
32   Model model;
33
34
35   @BeforeEach
36   void setUp()
37   {
38     controller = new HtmlController(service);
39   }
40
41
42   @Test
43   @DisplayName("Data successfully fetched from remote-server")
44   void testOK()
45   {
46     when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
47
48     String result = controller.fetch(model, "foo");
49
50     assertThat(result).isEqualTo("layout");
51     ArgumentCaptor<Mono<String>> captor = ArgumentCaptor.forClass(Mono.class);
52     verify(model).addAttribute(eq("text"), captor.capture());
53     StepVerifier
54         .create(captor.getValue())
55         .expectNext("bar")
56         .expectComplete()
57         .verify();
58   }
59 }