5 import java.nio.charset.Charset;
6 import java.time.ZonedDateTime;
9 import java.util.function.Consumer;
10 import java.util.function.Function;
11 import java.util.function.IntPredicate;
12 import java.util.function.Predicate;
13 import java.util.function.Supplier;
14 import org.reactivestreams.Publisher;
15 import org.springframework.core.ParameterizedTypeReference;
16 import org.springframework.http.HttpHeaders;
17 import org.springframework.http.HttpMethod;
18 import org.springframework.http.HttpStatus;
19 import org.springframework.http.MediaType;
20 import org.springframework.http.ResponseEntity;
21 import org.springframework.http.client.reactive.ClientHttpRequest;
22 import org.springframework.util.MultiValueMap;
23 import org.springframework.web.reactive.function.BodyInserter;
24 import org.springframework.web.reactive.function.client.ClientResponse;
25 import org.springframework.web.reactive.function.client.WebClient;
26 import org.springframework.web.util.UriBuilder;
27 import reactor.core.publisher.Flux;
28 import reactor.core.publisher.Mono;
32 * A stub for {@link WebClient}, that can be used for mocking.
35 public class WebClientStub implements WebClient
37 public final static WebClientStub WEB_CLIENT = new WebClientStub();
38 public final static RequestHeadersUriSpecStub HEADERS_SPEC = new RequestHeadersUriSpecStub();
39 public final static RequestBodySpecStub REQUEST_BODY_SPEC = new RequestBodySpecStub();
40 public final static ResponseSpecStub RESPONSE_SPEC = new ResponseSpecStub();
42 private static Supplier<Mono<?>> TO_MONO = () -> null;
43 private static Supplier<Flux<?>> TO_FLUX = () -> null;
46 public static void expect(Mono<?> mono) { TO_MONO = () -> mono; }
47 public static void expect(Flux<?> flux) { TO_FLUX = () -> flux; }
50 private WebClientStub() {}
54 public WebClient.RequestHeadersUriSpec<?> get()
60 public WebClient.RequestHeadersUriSpec<?> head()
66 public WebClient.RequestBodyUriSpec post()
68 return REQUEST_BODY_SPEC;
72 public WebClient.RequestBodyUriSpec put()
74 return REQUEST_BODY_SPEC;
78 public WebClient.RequestBodyUriSpec patch()
80 return REQUEST_BODY_SPEC;
84 public WebClient.RequestHeadersUriSpec<?> delete()
90 public WebClient.RequestHeadersUriSpec<?> options()
96 public WebClient.RequestBodyUriSpec method(HttpMethod hm)
98 return REQUEST_BODY_SPEC;
102 public WebClient.Builder mutate()
104 throw new UnsupportedOperationException("Stub is immutable!");
108 public static class RequestHeadersUriSpecStub implements WebClient.RequestHeadersUriSpec
110 private RequestHeadersUriSpecStub() {}
114 public WebClient.RequestHeadersSpec uri(URI uri)
120 public WebClient.RequestHeadersSpec uri(String string, Object... os)
126 public WebClient.RequestHeadersSpec uri(String string, Map map)
132 public WebClient.RequestHeadersSpec uri(String string, Function fnctn)
138 public WebClient.RequestHeadersSpec uri(Function fnctn)
144 public WebClient.RequestHeadersSpec accept(MediaType... mts)
150 public WebClient.RequestHeadersSpec acceptCharset(Charset... chrsts)
156 public WebClient.RequestHeadersSpec cookie(String string, String string1)
162 public WebClient.RequestHeadersSpec cookies(Consumer cnsmr)
168 public WebClient.RequestHeadersSpec ifModifiedSince(ZonedDateTime zdt)
174 public WebClient.RequestHeadersSpec ifNoneMatch(String... strings)
180 public WebClient.RequestHeadersSpec header(String string, String... strings)
186 public WebClient.RequestHeadersSpec headers(Consumer cnsmr)
192 public WebClient.RequestHeadersSpec attribute(String string, Object o)
198 public WebClient.RequestHeadersSpec attributes(Consumer cnsmr)
204 public WebClient.ResponseSpec retrieve()
206 return RESPONSE_SPEC;
210 public Mono exchange()
212 return WebClientStub.TO_MONO.get();
216 public static class RequestBodySpecStub implements WebClient.RequestBodyUriSpec
218 private RequestBodySpecStub() {}
222 public WebClient.RequestBodySpec contentLength(long l)
228 public WebClient.RequestBodySpec contentType(MediaType mt)
234 public WebClient.RequestHeadersSpec<?> bodyValue(Object o)
240 public <T, P extends Publisher<T>> WebClient.RequestHeadersSpec<?> body(P p, Class<T> type)
246 public <T, P extends Publisher<T>> WebClient.RequestHeadersSpec<?> body(P p, ParameterizedTypeReference<T> ptr)
252 public WebClient.RequestHeadersSpec<?> body(Object o, Class<?> type)
258 public WebClient.RequestHeadersSpec<?> body(Object o, ParameterizedTypeReference<?> ptr)
264 public WebClient.RequestHeadersSpec<?> body( BodyInserter<?, ? super ClientHttpRequest> bi)
270 public WebClient.RequestHeadersSpec<?> syncBody(Object o)
276 public WebClient.RequestBodySpec accept(MediaType... mts)
282 public WebClient.RequestBodySpec acceptCharset(Charset... chrsts)
288 public WebClient.RequestBodySpec cookie(String string, String string1)
294 public WebClient.RequestBodySpec cookies(Consumer<MultiValueMap<String, String>> cnsmr)
300 public WebClient.RequestBodySpec ifModifiedSince(ZonedDateTime zdt)
306 public WebClient.RequestBodySpec ifNoneMatch(String... strings)
312 public WebClient.RequestBodySpec header(String string, String... strings)
318 public WebClient.RequestBodySpec headers(Consumer<HttpHeaders> cnsmr)
324 public WebClient.RequestBodySpec attribute(String string, Object o)
330 public WebClient.RequestBodySpec attributes(Consumer<Map<String, Object>> cnsmr)
336 public WebClient.ResponseSpec retrieve()
338 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
342 public Mono<ClientResponse> exchange()
344 throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
348 public WebClient.RequestBodySpec uri(URI uri)
354 public WebClient.RequestBodySpec uri(String string, Object... os)
360 public WebClient.RequestBodySpec uri(String string, Map<String, ?> map)
366 public WebClient.RequestBodySpec uri(String string, Function<UriBuilder, URI> fnctn)
372 public WebClient.RequestBodySpec uri(Function<UriBuilder, URI> fnctn)
378 public static class ResponseSpecStub implements WebClient.ResponseSpec
380 private ResponseSpecStub() {}
384 public WebClient.ResponseSpec onStatus(Predicate<HttpStatus> statusPredicate, Function<ClientResponse, Mono<? extends Throwable>> exceptionFunction)
390 public WebClient.ResponseSpec onRawStatus(IntPredicate statusCodePredicate, Function<ClientResponse, Mono<? extends Throwable>> exceptionFunction)
396 public <T> Mono<T> bodyToMono(Class<T> elementClass)
398 return (Mono<T>)TO_MONO.get();
402 public <T> Mono<T> bodyToMono(ParameterizedTypeReference<T> elementTypeRef)
404 return (Mono<T>)TO_MONO.get();
408 public <T> Flux<T> bodyToFlux(Class<T> elementClass)
410 return (Flux<T>)TO_FLUX;
414 public <T> Flux<T> bodyToFlux(ParameterizedTypeReference<T> elementTypeRef)
416 return (Flux<T>)TO_FLUX;
420 public <T> Mono<ResponseEntity<T>> toEntity(Class<T> bodyClass)
422 return (Mono<ResponseEntity<T>>)TO_MONO.get();
426 public <T> Mono<ResponseEntity<T>> toEntity(ParameterizedTypeReference<T> bodyTypeReference)
428 return (Mono<ResponseEntity<T>>)TO_MONO.get();
432 public <T> Mono<ResponseEntity<List<T>>> toEntityList(Class<T> elementClass)
434 return (Mono<ResponseEntity<List<T>>>)TO_MONO.get();
438 public <T> Mono<ResponseEntity<List<T>>> toEntityList(ParameterizedTypeReference<T> elementTypeRef)
440 return (Mono<ResponseEntity<List<T>>>)TO_MONO.get();
444 public Mono<ResponseEntity<Void>> toBodilessEntity()
446 return (Mono<ResponseEntity<Void>>)TO_MONO.get();