/* * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.test.web.servlet.htmlunit; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.List; import javax.servlet.http.Cookie; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.util.NameValuePair; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletResponse; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; /** * Tests for {@link MockWebResponseBuilder}. * * @author Rob Winch * @since 4.2 */ public class MockWebResponseBuilderTests { private final MockHttpServletResponse response = new MockHttpServletResponse(); private WebRequest webRequest; private MockWebResponseBuilder responseBuilder; @Before public void setup() throws Exception { this.webRequest = new WebRequest(new URL("http://example.com:80/test/this/here")); this.responseBuilder = new MockWebResponseBuilder(System.currentTimeMillis(), this.webRequest, this.response); } // --- constructor @Test(expected = IllegalArgumentException.class) public void constructorWithNullWebRequest() { new MockWebResponseBuilder(0L, null, this.response); } @Test(expected = IllegalArgumentException.class) public void constructorWithNullResponse() throws Exception { new MockWebResponseBuilder(0L, new WebRequest(new URL("http://example.com:80/test/this/here")), null); } // --- build @Test public void buildContent() throws Exception { this.response.getWriter().write("expected content"); WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getContentAsString(), equalTo("expected content")); } @Test public void buildContentCharset() throws Exception { this.response.addHeader("Content-Type", "text/html; charset=UTF-8"); WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getContentCharset(), equalTo(StandardCharsets.UTF_8)); } @Test public void buildContentType() throws Exception { this.response.addHeader("Content-Type", "text/html; charset-UTF-8"); WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getContentType(), equalTo("text/html")); } @Test public void buildResponseHeaders() throws Exception { this.response.addHeader("Content-Type", "text/html"); this.response.addHeader("X-Test", "value"); Cookie cookie = new Cookie("cookieA", "valueA"); cookie.setDomain("domain"); cookie.setPath("/path"); cookie.setMaxAge(1800); cookie.setSecure(true); cookie.setHttpOnly(true); this.response.addCookie(cookie); WebResponse webResponse = this.responseBuilder.build(); List<NameValuePair> responseHeaders = webResponse.getResponseHeaders(); assertThat(responseHeaders.size(), equalTo(3)); NameValuePair header = responseHeaders.get(0); assertThat(header.getName(), equalTo("Content-Type")); assertThat(header.getValue(), equalTo("text/html")); header = responseHeaders.get(1); assertThat(header.getName(), equalTo("X-Test")); assertThat(header.getValue(), equalTo("value")); header = responseHeaders.get(2); assertThat(header.getName(), equalTo("Set-Cookie")); assertThat(header.getValue(), startsWith("cookieA=valueA; Path=/path; Domain=domain; Max-Age=1800; Expires=")); assertThat(header.getValue(), endsWith("; Secure; HttpOnly")); } // SPR-14169 @Test public void buildResponseHeadersNullDomainDefaulted() throws Exception { Cookie cookie = new Cookie("cookieA", "valueA"); this.response.addCookie(cookie); WebResponse webResponse = this.responseBuilder.build(); List<NameValuePair> responseHeaders = webResponse.getResponseHeaders(); assertThat(responseHeaders.size(), equalTo(1)); NameValuePair header = responseHeaders.get(0); assertThat(header.getName(), equalTo("Set-Cookie")); assertThat(header.getValue(), equalTo("cookieA=valueA")); } @Test public void buildStatus() throws Exception { WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getStatusCode(), equalTo(200)); assertThat(webResponse.getStatusMessage(), equalTo("OK")); } @Test public void buildStatusNotOk() throws Exception { this.response.setStatus(401); WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getStatusCode(), equalTo(401)); assertThat(webResponse.getStatusMessage(), equalTo("Unauthorized")); } @Test public void buildStatusWithCustomMessage() throws Exception { this.response.sendError(401, "Custom"); WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getStatusCode(), equalTo(401)); assertThat(webResponse.getStatusMessage(), equalTo("Custom")); } @Test public void buildWebRequest() throws Exception { WebResponse webResponse = this.responseBuilder.build(); assertThat(webResponse.getWebRequest(), equalTo(this.webRequest)); } }