@ -19,7 +19,9 @@ package org.springframework.test.web.servlet.htmlunit;
@@ -19,7 +19,9 @@ package org.springframework.test.web.servlet.htmlunit;
import java.io.IOException ;
import java.net.URL ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import com.gargoylesoftware.htmlunit.HttpMethod ;
import com.gargoylesoftware.htmlunit.WebClient ;
import com.gargoylesoftware.htmlunit.WebRequest ;
import com.gargoylesoftware.htmlunit.WebResponse ;
@ -38,7 +40,10 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@@ -38,7 +40,10 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.tests.Assume ;
import org.springframework.tests.TestGroup ;
import org.springframework.web.bind.annotation.CookieValue ;
import org.springframework.web.bind.annotation.DeleteMapping ;
import org.springframework.web.bind.annotation.PostMapping ;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RequestParam ;
import org.springframework.web.bind.annotation.RestController ;
import org.springframework.web.context.WebApplicationContext ;
import org.springframework.web.servlet.config.annotation.EnableWebMvc ;
@ -103,11 +108,22 @@ public class MockMvcWebClientBuilderTests {
@@ -103,11 +108,22 @@ public class MockMvcWebClientBuilderTests {
this . mockMvc = MockMvcBuilders . standaloneSetup ( new CookieController ( ) ) . build ( ) ;
WebClient client = MockMvcWebClientBuilder . mockMvcSetup ( this . mockMvc ) . build ( ) ;
assertThat ( getResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "" ) ) ;
assertThat ( getResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "NA " ) ) ;
client . getCookieManager ( ) . addCookie ( new Cookie ( "localhost" , "cookie" , "cookieManagerShared" ) ) ;
assertThat ( getResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "cookieManagerShared" ) ) ;
}
@Test // SPR-14265
public void cookiesAreManaged ( ) throws Exception {
this . mockMvc = MockMvcBuilders . standaloneSetup ( new CookieController ( ) ) . build ( ) ;
WebClient client = MockMvcWebClientBuilder . mockMvcSetup ( this . mockMvc ) . build ( ) ;
assertThat ( getResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "NA" ) ) ;
assertThat ( postResponse ( client , "http://localhost/?cookie=foo" ) . getContentAsString ( ) , equalTo ( "Set" ) ) ;
assertThat ( getResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "foo" ) ) ;
assertThat ( deleteResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "Delete" ) ) ;
assertThat ( getResponse ( client , "http://localhost/" ) . getContentAsString ( ) , equalTo ( "NA" ) ) ;
}
private void assertMockMvcUsed ( WebClient client , String url ) throws Exception {
assertThat ( getResponse ( client , url ) . getContentAsString ( ) , equalTo ( "mvc" ) ) ;
@ -118,7 +134,19 @@ public class MockMvcWebClientBuilderTests {
@@ -118,7 +134,19 @@ public class MockMvcWebClientBuilderTests {
}
private WebResponse getResponse ( WebClient client , String url ) throws IOException {
return client . getWebConnection ( ) . getResponse ( new WebRequest ( new URL ( url ) ) ) ;
return createResponse ( client , new WebRequest ( new URL ( url ) ) ) ;
}
private WebResponse postResponse ( WebClient client , String url ) throws IOException {
return createResponse ( client , new WebRequest ( new URL ( url ) , HttpMethod . POST ) ) ;
}
private WebResponse deleteResponse ( WebClient client , String url ) throws IOException {
return createResponse ( client , new WebRequest ( new URL ( url ) , HttpMethod . DELETE ) ) ;
}
private WebResponse createResponse ( WebClient client , WebRequest request ) throws IOException {
return client . getWebConnection ( ) . getResponse ( request ) ;
}
@ -139,10 +167,26 @@ public class MockMvcWebClientBuilderTests {
@@ -139,10 +167,26 @@ public class MockMvcWebClientBuilderTests {
@RestController
static class CookieController {
static final String COOKIE_NAME = "cookie" ;
@RequestMapping ( path = "/" , produces = "text/plain" )
String cookie ( @CookieValue ( "cookie" ) String cookie ) {
String cookie ( @CookieValue ( name = COOKIE_NAME , defaultValue = "NA ") String cookie ) {
return cookie ;
}
@PostMapping ( path = "/" , produces = "text/plain" )
String setCookie ( @RequestParam String cookie , HttpServletResponse response ) {
response . addCookie ( new javax . servlet . http . Cookie ( COOKIE_NAME , cookie ) ) ;
return "Set" ;
}
@DeleteMapping ( path = "/" , produces = "text/plain" )
String deleteCookie ( HttpServletResponse response ) {
javax . servlet . http . Cookie cookie = new javax . servlet . http . Cookie ( COOKIE_NAME , "" ) ;
cookie . setMaxAge ( 0 ) ;
response . addCookie ( cookie ) ;
return "Delete" ;
}
}
}