Further simplification: using the real WebClient with an ExchangeFunction
[demos/testing] / src / test / java / de / juplo / demo / RemoteContentServiceTest.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.Test;
7 import org.junit.jupiter.api.extension.ExtendWith;
8 import static org.mockito.Mockito.when;
9 import org.springframework.boot.test.mock.mockito.MockBean;
10 import org.springframework.test.context.junit.jupiter.SpringExtension;
11 import org.springframework.web.reactive.function.client.ClientResponse;
12 import org.springframework.web.reactive.function.client.ExchangeFunction;
13 import org.springframework.web.reactive.function.client.WebClient;
14 import reactor.core.publisher.Mono;
15
16
17 /**
18  * Unit-Test for class {@link RemoteContentService}.
19  * @author Kai Moritz
20  */
21 @ExtendWith(SpringExtension.class)
22 public class RemoteContentServiceTest
23 {
24   RemoteContentService service;
25
26   @MockBean
27   ExchangeFunction exchangeFunction;
28   @MockBean
29   ClientResponse clientResponse;
30
31
32   @BeforeEach
33   void setUp()
34   {
35     service =
36         new RemoteContentService(
37             WebClient
38                 .builder()
39                 .exchangeFunction(request -> Mono.just(clientResponse))
40                 .build());
41   }
42
43
44   @Test
45   void test()
46   {
47     Mono<String> mono = Mono.just("bar");
48     when(clientResponse.bodyToMono(String.class)).thenReturn(mono);
49
50     Mono<String> result = service.getRemoteText("/foo");
51
52     assertThat(result.block()).isEqualTo("bar");
53   }
54 }