Verified, that RestController throws NotFound, if remote-data does not exist
[demos/testing] / src / test / java / de / juplo / demo / RestControllerTest.java
1 package de.juplo.demo;
2
3
4 import org.junit.jupiter.api.BeforeEach;
5 import org.junit.jupiter.api.DisplayName;
6 import org.junit.jupiter.api.Test;
7 import org.mockito.Mockito;
8 import static org.mockito.Mockito.when;
9 import org.springframework.web.reactive.function.client.WebClientResponseException;
10 import org.springframework.web.reactive.function.client.WebClientResponseException.NotFound;
11 import reactor.core.publisher.Mono;
12 import reactor.test.StepVerifier;
13
14
15 /**
16  * Unit-Test for class {@link RestController}.
17  * @author Kai Moritz
18  */
19 public class RestControllerTest
20 {
21   RestController controller;
22   RemoteContentService service;
23
24
25   @BeforeEach
26   void setUp()
27   {
28     service = Mockito.mock(RemoteContentService.class);
29     controller = new RestController(service);
30   }
31
32
33   @Test
34   @DisplayName("Data successfully fetched from remote-server")
35   void testResponseOK()
36   {
37     when(service.getRemoteText("foo")).thenReturn(Mono.just("bar"));
38
39     Mono<String> result = controller.fetch("foo");
40
41     StepVerifier
42         .create(result)
43         .expectNext("bar")
44         .expectComplete()
45         .verify();
46   }
47
48   @Test
49   @DisplayName("Data not found on remote-server")
50   void testResponseNotFoud()
51   {
52     when(service.getRemoteText("foo")).thenReturn(Mono.error(exception(404)));
53
54     Mono<String> result = controller.fetch("foo");
55
56     StepVerifier
57         .create(result)
58         .expectError(NotFound.class)
59         .verify();
60   }
61
62
63   WebClientResponseException exception(int status)
64   {
65     return WebClientResponseException.create(status, "", null, null, null);
66   }
67 }