X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fdemo%2FWebClientStub.java;fp=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fdemo%2FWebClientStub.java;h=328029c6563fecc846e1c0b8cfbbf302da4cad6c;hb=6bf22052ca3728697bd04cc90ab683a9394a9e28;hp=0000000000000000000000000000000000000000;hpb=701df760fbe782db235980cc95c21af5dae4e536;p=demos%2Ftesting diff --git a/src/test/java/de/juplo/demo/WebClientStub.java b/src/test/java/de/juplo/demo/WebClientStub.java new file mode 100644 index 0000000..328029c --- /dev/null +++ b/src/test/java/de/juplo/demo/WebClientStub.java @@ -0,0 +1,449 @@ +package de.juplo.demo; + + +import java.net.URI; +import java.nio.charset.Charset; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.IntPredicate; +import java.util.function.Predicate; +import java.util.function.Supplier; +import org.reactivestreams.Publisher; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.reactive.ClientHttpRequest; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.BodyInserter; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriBuilder; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + + +/** + * A stub for {@link WebClient}, that can be used for mocking. + * @author Kai Moritz + */ +public class WebClientStub implements WebClient +{ + public final static WebClientStub WEB_CLIENT = new WebClientStub(); + public final static RequestHeadersUriSpecStub HEADERS_SPEC = new RequestHeadersUriSpecStub(); + public final static RequestBodySpecStub REQUEST_BODY_SPEC = new RequestBodySpecStub(); + public final static ResponseSpecStub RESPONSE_SPEC = new ResponseSpecStub(); + + private static Supplier> TO_MONO = () -> null; + private static Supplier> TO_FLUX = () -> null; + + + public static void expect(Mono mono) { TO_MONO = () -> mono; } + public static void expect(Flux flux) { TO_FLUX = () -> flux; } + + + private WebClientStub() {} + + + @Override + public WebClient.RequestHeadersUriSpec get() + { + return HEADERS_SPEC; + } + + @Override + public WebClient.RequestHeadersUriSpec head() + { + return HEADERS_SPEC; + } + + @Override + public WebClient.RequestBodyUriSpec post() + { + return REQUEST_BODY_SPEC; + } + + @Override + public WebClient.RequestBodyUriSpec put() + { + return REQUEST_BODY_SPEC; + } + + @Override + public WebClient.RequestBodyUriSpec patch() + { + return REQUEST_BODY_SPEC; + } + + @Override + public WebClient.RequestHeadersUriSpec delete() + { + return HEADERS_SPEC; + } + + @Override + public WebClient.RequestHeadersUriSpec options() + { + return HEADERS_SPEC; + } + + @Override + public WebClient.RequestBodyUriSpec method(HttpMethod hm) + { + return REQUEST_BODY_SPEC; + } + + @Override + public WebClient.Builder mutate() + { + throw new UnsupportedOperationException("Stub is immutable!"); + } + + + public static class RequestHeadersUriSpecStub implements WebClient.RequestHeadersUriSpec + { + private RequestHeadersUriSpecStub() {} + + + @Override + public WebClient.RequestHeadersSpec uri(URI uri) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec uri(String string, Object... os) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec uri(String string, Map map) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec uri(String string, Function fnctn) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec uri(Function fnctn) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec accept(MediaType... mts) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec acceptCharset(Charset... chrsts) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec cookie(String string, String string1) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec cookies(Consumer cnsmr) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec ifModifiedSince(ZonedDateTime zdt) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec ifNoneMatch(String... strings) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec header(String string, String... strings) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec headers(Consumer cnsmr) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec attribute(String string, Object o) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec attributes(Consumer cnsmr) + { + return this; + } + + @Override + public WebClient.ResponseSpec retrieve() + { + return RESPONSE_SPEC; + } + + @Override + public Mono exchange() + { + return WebClientStub.TO_MONO.get(); + } + } + + public static class RequestBodySpecStub implements WebClient.RequestBodyUriSpec + { + private RequestBodySpecStub() {} + + + @Override + public WebClient.RequestBodySpec contentLength(long l) + { + return this; + } + + @Override + public WebClient.RequestBodySpec contentType(MediaType mt) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec bodyValue(Object o) + { + return this; + } + + @Override + public > WebClient.RequestHeadersSpec body(P p, Class type) + { + return this; + } + + @Override + public > WebClient.RequestHeadersSpec body(P p, ParameterizedTypeReference ptr) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec body(Object o, Class type) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec body(Object o, ParameterizedTypeReference ptr) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec body( BodyInserter bi) + { + return this; + } + + @Override + public WebClient.RequestHeadersSpec syncBody(Object o) + { + return this; + } + + @Override + public WebClient.RequestBodySpec accept(MediaType... mts) + { + return this; + } + + @Override + public WebClient.RequestBodySpec acceptCharset(Charset... chrsts) + { + return this; + } + + @Override + public WebClient.RequestBodySpec cookie(String string, String string1) + { + return this; + } + + @Override + public WebClient.RequestBodySpec cookies(Consumer> cnsmr) + { + return this; + } + + @Override + public WebClient.RequestBodySpec ifModifiedSince(ZonedDateTime zdt) + { + return this; + } + + @Override + public WebClient.RequestBodySpec ifNoneMatch(String... strings) + { + return this; + } + + @Override + public WebClient.RequestBodySpec header(String string, String... strings) + { + return this; + } + + @Override + public WebClient.RequestBodySpec headers(Consumer cnsmr) + { + return this; + } + + @Override + public WebClient.RequestBodySpec attribute(String string, Object o) + { + return this; + } + + @Override + public WebClient.RequestBodySpec attributes(Consumer> cnsmr) + { + return this; + } + + @Override + public WebClient.ResponseSpec retrieve() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Mono exchange() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public WebClient.RequestBodySpec uri(URI uri) + { + return this; + } + + @Override + public WebClient.RequestBodySpec uri(String string, Object... os) + { + return this; + } + + @Override + public WebClient.RequestBodySpec uri(String string, Map map) + { + return this; + } + + @Override + public WebClient.RequestBodySpec uri(String string, Function fnctn) + { + return this; + } + + @Override + public WebClient.RequestBodySpec uri(Function fnctn) + { + return this; + } + } + + public static class ResponseSpecStub implements WebClient.ResponseSpec + { + private ResponseSpecStub() {} + + + @Override + public WebClient.ResponseSpec onStatus(Predicate statusPredicate, Function> exceptionFunction) + { + return this; + } + + @Override + public WebClient.ResponseSpec onRawStatus(IntPredicate statusCodePredicate, Function> exceptionFunction) + { + return this; + } + + @Override + public Mono bodyToMono(Class elementClass) + { + return (Mono)TO_MONO.get(); + } + + @Override + public Mono bodyToMono(ParameterizedTypeReference elementTypeRef) + { + return (Mono)TO_MONO.get(); + } + + @Override + public Flux bodyToFlux(Class elementClass) + { + return (Flux)TO_FLUX; + } + + @Override + public Flux bodyToFlux(ParameterizedTypeReference elementTypeRef) + { + return (Flux)TO_FLUX; + } + + @Override + public Mono> toEntity(Class bodyClass) + { + return (Mono>)TO_MONO.get(); + } + + @Override + public Mono> toEntity(ParameterizedTypeReference bodyTypeReference) + { + return (Mono>)TO_MONO.get(); + } + + @Override + public Mono>> toEntityList(Class elementClass) + { + return (Mono>>)TO_MONO.get(); + } + + @Override + public Mono>> toEntityList(ParameterizedTypeReference elementTypeRef) + { + return (Mono>>)TO_MONO.get(); + } + + @Override + public Mono> toBodilessEntity() + { + return (Mono>)TO_MONO.get(); + } + } +}