@ -30,6 +30,7 @@ import reactor.core.publisher.Flux;
@@ -30,6 +30,7 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono ;
import org.springframework.core.ParameterizedTypeReference ;
import org.springframework.core.codec.ByteArrayDecoder ;
import org.springframework.core.codec.StringDecoder ;
import org.springframework.core.io.buffer.DataBuffer ;
import org.springframework.core.io.buffer.DefaultDataBuffer ;
@ -48,6 +49,7 @@ import org.springframework.util.MultiValueMap;
@@ -48,6 +49,7 @@ import org.springframework.util.MultiValueMap;
import static org.assertj.core.api.Assertions.assertThat ;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException ;
import static org.assertj.core.api.Assertions.entry ;
import static org.mockito.BDDMockito.given ;
import static org.mockito.Mockito.mock ;
import static org.springframework.web.reactive.function.BodyExtractors.toMono ;
@ -328,6 +330,29 @@ public class DefaultClientResponseTests {
@@ -328,6 +330,29 @@ public class DefaultClientResponseTests {
assertThat ( result . getHeaders ( ) . getContentType ( ) ) . isEqualTo ( MediaType . TEXT_PLAIN ) ;
}
@Test
public void createException ( ) {
byte [ ] bytes = "foo" . getBytes ( StandardCharsets . UTF_8 ) ;
DefaultDataBuffer dataBuffer = DefaultDataBufferFactory . sharedInstance . wrap ( ByteBuffer . wrap ( bytes ) ) ;
Flux < DataBuffer > body = Flux . just ( dataBuffer ) ;
httpHeaders . setContentType ( MediaType . TEXT_PLAIN ) ;
given ( mockResponse . getStatusCode ( ) ) . willReturn ( HttpStatus . NOT_FOUND ) ;
given ( mockResponse . getRawStatusCode ( ) ) . willReturn ( HttpStatus . NOT_FOUND . value ( ) ) ;
given ( mockResponse . getBody ( ) ) . willReturn ( body ) ;
List < HttpMessageReader < ? > > messageReaders = Collections . singletonList (
new DecoderHttpMessageReader < > ( new ByteArrayDecoder ( ) ) ) ;
given ( mockExchangeStrategies . messageReaders ( ) ) . willReturn ( messageReaders ) ;
Mono < WebClientResponseException > resultMono = defaultClientResponse . createException ( ) ;
WebClientResponseException exception = resultMono . block ( ) ;
assertThat ( exception . getStatusCode ( ) ) . isEqualTo ( HttpStatus . NOT_FOUND ) ;
assertThat ( exception . getMessage ( ) ) . isEqualTo ( "404 Not Found" ) ;
assertThat ( exception . getHeaders ( ) ) . containsExactly ( entry ( "Content-Type" ,
Collections . singletonList ( "text/plain" ) ) ) ;
assertThat ( exception . getResponseBodyAsByteArray ( ) ) . isEqualTo ( bytes ) ;
}
private void mockTextPlainResponse ( Flux < DataBuffer > body ) {
httpHeaders . setContentType ( MediaType . TEXT_PLAIN ) ;