5 import java.nio.charset.Charset;
6 import java.time.ZonedDateTime;
8 import java.util.function.Consumer;
9 import java.util.function.Function;
10 import org.junit.jupiter.api.BeforeEach;
11 import org.junit.jupiter.api.Test;
12 import org.junit.jupiter.api.extension.ExtendWith;
13 import static org.mockito.ArgumentMatchers.eq;
14 import static org.mockito.Mockito.when;
15 import org.reactivestreams.Publisher;
16 import org.springframework.boot.test.mock.mockito.MockBean;
17 import org.springframework.core.ParameterizedTypeReference;
18 import org.springframework.http.HttpHeaders;
19 import org.springframework.http.HttpMethod;
20 import org.springframework.http.MediaType;
21 import org.springframework.http.client.reactive.ClientHttpRequest;
22 import org.springframework.test.context.junit.jupiter.SpringExtension;
23 import org.springframework.util.MultiValueMap;
24 import org.springframework.web.reactive.function.BodyInserter;
25 import org.springframework.web.reactive.function.client.ClientResponse;
26 import org.springframework.web.reactive.function.client.WebClient;
27 import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec;
28 import org.springframework.web.reactive.function.client.WebClient.RequestHeadersUriSpec;
29 import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
30 import org.springframework.web.util.UriBuilder;
31 import reactor.core.publisher.Mono;
32 import reactor.test.StepVerifier;
36 * Unit-Test for class {@link RemoteContentService}.
39 @ExtendWith(SpringExtension.class)
40 public class RemoteContentServiceTest
42 RemoteContentService service;
46 @MockBean(name = "uriSpec")
47 RequestHeadersUriSpec uriSpec;
48 @MockBean(name = "headersSpec")
49 RequestHeadersSpec headersSpec;
50 @MockBean(name = "responseSpec")
51 ResponseSpec responseSpec;
57 service = new RemoteContentService(webClient);
64 when(webClient.get()).thenReturn(uriSpec);
65 when(uriSpec.uri(eq("/foo"))).thenReturn(headersSpec);
66 when(headersSpec.retrieve()).thenReturn(responseSpec);
67 when(responseSpec.bodyToMono(String.class)).thenReturn(Mono.just("bar"));
69 Mono<String> result = service.getRemoteText("/foo");
78 static class WebClientStub implements WebClient
80 final static WebClientStub WEB_CLIENT = new WebClientStub();
81 final static RequestHeadersUriSpecStub URI_SPEC = new RequestHeadersUriSpecStub();
82 final static RequestBodySpecStub BODY_SPEC = new RequestBodySpecStub();
85 private WebClientStub() {}
89 public RequestHeadersUriSpec<?> get()
95 public RequestHeadersUriSpec<?> head()
101 public RequestBodyUriSpec post()
107 public RequestBodyUriSpec put()
113 public RequestBodyUriSpec patch()
119 public RequestHeadersUriSpec<?> delete()
125 public RequestHeadersUriSpec<?> options()
131 public RequestBodyUriSpec method(HttpMethod hm)
137 public Builder mutate()
139 throw new UnsupportedOperationException("Stub is immutable!");
143 static class RequestHeadersUriSpecStub implements RequestHeadersUriSpec
145 private RequestHeadersUriSpecStub() {}
149 public RequestHeadersSpec uri(URI uri)
155 public RequestHeadersSpec uri(String string, Object... os)
161 public RequestHeadersSpec uri(String string, Map map)
167 public RequestHeadersSpec uri(String string, Function fnctn)
173 public RequestHeadersSpec uri(Function fnctn)
179 public RequestHeadersSpec accept(MediaType... mts)
185 public RequestHeadersSpec acceptCharset(Charset... chrsts)
191 public RequestHeadersSpec cookie(String string, String string1)
197 public RequestHeadersSpec cookies(Consumer cnsmr)
203 public RequestHeadersSpec ifModifiedSince(ZonedDateTime zdt)
209 public RequestHeadersSpec ifNoneMatch(String... strings)
215 public RequestHeadersSpec header(String string, String... strings)
221 public RequestHeadersSpec headers(Consumer cnsmr)
227 public RequestHeadersSpec attribute(String string, Object o)
233 public RequestHeadersSpec attributes(Consumer cnsmr)
239 public ResponseSpec retrieve()
244 public Mono exchange()
249 static class RequestBodySpecStub implements RequestBodyUriSpec
251 private RequestBodySpecStub() {}
255 public RequestBodySpec contentLength(long l)
261 public RequestBodySpec contentType(MediaType mt)
267 public RequestHeadersSpec<?> bodyValue(Object o)
273 public <T, P extends Publisher<T>> RequestHeadersSpec<?> body(P p, Class<T> type)
279 public <T, P extends Publisher<T>> RequestHeadersSpec<?> body(P p, ParameterizedTypeReference<T> ptr)
285 public RequestHeadersSpec<?> body(Object o, Class<?> type)
291 public RequestHeadersSpec<?> body(Object o, ParameterizedTypeReference<?> ptr)
297 public RequestHeadersSpec<?> body( BodyInserter<?, ? super ClientHttpRequest> bi)
303 public RequestHeadersSpec<?> syncBody(Object o)
309 public RequestBodySpec accept(MediaType... mts)
315 public RequestBodySpec acceptCharset(Charset... chrsts)
321 public RequestBodySpec cookie(String string, String string1)
327 public RequestBodySpec cookies(Consumer<MultiValueMap<String, String>> cnsmr)
333 public RequestBodySpec ifModifiedSince(ZonedDateTime zdt)
339 public RequestBodySpec ifNoneMatch(String... strings)
345 public RequestBodySpec header(String string, String... strings)
351 public RequestBodySpec headers(Consumer<HttpHeaders> cnsmr)
357 public RequestBodySpec attribute(String string, Object o)
363 public RequestBodySpec attributes(Consumer<Map<String, Object>> cnsmr)
369 public ResponseSpec retrieve()
371 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
375 public Mono<ClientResponse> exchange()
377 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
381 public RequestBodySpec uri(URI uri)
387 public RequestBodySpec uri(String string, Object... os)
393 public RequestBodySpec uri(String string, Map<String, ?> map)
399 public RequestBodySpec uri(String string, Function<UriBuilder, URI> fnctn)
405 public RequestBodySpec uri(Function<UriBuilder, URI> fnctn)