@ -1,5 +1,5 @@
/ *
/ *
* Copyright 2002 - 2018 the original author or authors .
* Copyright 2002 - 2019 the original author or authors .
*
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* you may not use this file except in compliance with the License .
@ -17,18 +17,27 @@
package org.springframework.web.server.handler ;
package org.springframework.web.server.handler ;
import java.time.Duration ;
import java.time.Duration ;
import java.util.Arrays ;
import org.junit.Before ;
import org.junit.Before ;
import org.junit.Test ;
import org.junit.Test ;
import reactor.core.publisher.Mono ;
import reactor.core.publisher.Mono ;
import reactor.test.StepVerifier ;
import reactor.test.StepVerifier ;
import org.springframework.http.HttpMethod ;
import org.springframework.http.HttpStatus ;
import org.springframework.http.HttpStatus ;
import org.springframework.http.MediaType ;
import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest ;
import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest ;
import org.springframework.mock.http.server.reactive.test.MockServerHttpResponse ;
import org.springframework.mock.web.test.server.MockServerWebExchange ;
import org.springframework.mock.web.test.server.MockServerWebExchange ;
import org.springframework.web.server.MethodNotAllowedException ;
import org.springframework.web.server.NotAcceptableStatusException ;
import org.springframework.web.server.ResponseStatusException ;
import org.springframework.web.server.ResponseStatusException ;
import static org.junit.Assert.* ;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains ;
import static org.junit.Assert.assertEquals ;
import static org.junit.Assert.assertSame ;
import static org.junit.Assert.assertThat ;
/ * *
/ * *
* Unit tests for { @link ResponseStatusExceptionHandler } .
* Unit tests for { @link ResponseStatusExceptionHandler } .
@ -67,6 +76,26 @@ public class ResponseStatusExceptionHandlerTests {
assertEquals ( HttpStatus . BAD_REQUEST , this . exchange . getResponse ( ) . getStatusCode ( ) ) ;
assertEquals ( HttpStatus . BAD_REQUEST , this . exchange . getResponse ( ) . getStatusCode ( ) ) ;
}
}
@Test // gh-23741
public void handleMethodNotAllowed ( ) {
Throwable ex = new MethodNotAllowedException ( HttpMethod . PATCH , Arrays . asList ( HttpMethod . POST , HttpMethod . PUT ) ) ;
this . handler . handle ( this . exchange , ex ) . block ( Duration . ofSeconds ( 5 ) ) ;
MockServerHttpResponse response = this . exchange . getResponse ( ) ;
assertEquals ( HttpStatus . METHOD_NOT_ALLOWED , response . getStatusCode ( ) ) ;
assertThat ( response . getHeaders ( ) . getAllow ( ) , contains ( HttpMethod . POST , HttpMethod . PUT ) ) ;
}
@Test // gh-23741
public void handleResponseStatusExceptionWithHeaders ( ) {
Throwable ex = new NotAcceptableStatusException ( Arrays . asList ( MediaType . TEXT_PLAIN , MediaType . TEXT_HTML ) ) ;
this . handler . handle ( this . exchange , ex ) . block ( Duration . ofSeconds ( 5 ) ) ;
MockServerHttpResponse response = this . exchange . getResponse ( ) ;
assertEquals ( HttpStatus . NOT_ACCEPTABLE , response . getStatusCode ( ) ) ;
assertThat ( response . getHeaders ( ) . getAccept ( ) , contains ( MediaType . TEXT_PLAIN , MediaType . TEXT_HTML ) ) ;
}
@Test
@Test
public void unresolvedException ( ) {
public void unresolvedException ( ) {
Throwable expected = new IllegalStateException ( ) ;
Throwable expected = new IllegalStateException ( ) ;