aede07727b0daf7eba713855cd1210665af671e6
[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 org.springframework.web.reactive.function.client.WebClientResponseException;
17 import reactor.core.publisher.Mono;
18 import reactor.test.StepVerifier;
19
20
21 /**
22  * Unit-Test for class {@link RemoteContentHtmlController}.
23  * @author Kai Moritz
24  */
25 @ExtendWith(SpringExtension.class)
26 public class HtmlControllerTest
27 {
28   HtmlController controller;
29
30   @MockBean
31   RemoteContentService service;
32   @MockBean
33   Model model;
34
35
36   @BeforeEach
37   void setUp()
38   {
39     controller = new HtmlController(service);
40   }
41
42
43   @Test
44   @DisplayName("Data successfully fetched from remote-server")
45   void testOK()
46   {
47     when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
48
49     String result = controller.fetch(model, "foo");
50
51     assertThat(result).isEqualTo("home");
52     ArgumentCaptor<Mono<String>> captor = ArgumentCaptor.forClass(Mono.class);
53     verify(model).addAttribute(eq("text"), captor.capture());
54     StepVerifier
55         .create(captor.getValue())
56         .expectNext("bar")
57         .expectComplete()
58         .verify();
59   }
60
61   @Test
62   @DisplayName("Data not found on remote-server")
63   void testNotFoud()
64   {
65     Mono<String> mono = Mono.error(WebClientResponseException.create(404, "", null, null, null));
66     when(service.getRemoteText("foo")).thenReturn(mono);
67
68     String result = controller.fetch(model, "foo");
69
70     assertThat(result).isEqualTo("home");
71     ArgumentCaptor<Mono<String>> captor = ArgumentCaptor.forClass(Mono.class);
72     verify(model).addAttribute(eq("text"), captor.capture());
73     StepVerifier
74         .create(captor.getValue())
75         .expectNext("404 ")
76         .expectComplete()
77         .verify();
78   }
79 }