Introduce RequestCookie to avoid core depending on the Servlet API
Closes gh-345
This commit is contained in:
@@ -27,7 +27,6 @@ task jmustacheRepackJar(type: Jar) { repackJar ->
|
||||
dependencies {
|
||||
compile 'com.fasterxml.jackson.core:jackson-databind'
|
||||
compile 'org.springframework:spring-web'
|
||||
compile 'javax.servlet:javax.servlet-api'
|
||||
compile files(jmustacheRepackJar)
|
||||
jarjar 'com.googlecode.jarjar:jarjar:1.3'
|
||||
jmustache 'com.samskivert:jmustache@jar'
|
||||
|
||||
@@ -25,13 +25,12 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.util.Base64Utils;
|
||||
|
||||
/**
|
||||
@@ -128,7 +127,7 @@ final class CliOperationRequest implements OperationRequest {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Cookie> getCookies() {
|
||||
public Collection<RequestCookie> getCookies() {
|
||||
return this.delegate.getCookies();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,13 +23,12 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.restdocs.operation.Operation;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.restdocs.snippet.Snippet;
|
||||
import org.springframework.restdocs.snippet.TemplatedSnippet;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@@ -105,7 +104,7 @@ public class CurlRequestSnippet extends TemplatedSnippet {
|
||||
private void writeCookies(CliOperationRequest request, PrintWriter printer) {
|
||||
if (!CollectionUtils.isEmpty(request.getCookies())) {
|
||||
StringBuilder cookiesBuilder = new StringBuilder();
|
||||
for (Cookie cookie : request.getCookies()) {
|
||||
for (RequestCookie cookie : request.getCookies()) {
|
||||
if (cookiesBuilder.length() > 0) {
|
||||
cookiesBuilder.append(";");
|
||||
}
|
||||
|
||||
@@ -23,8 +23,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.MediaType;
|
||||
@@ -32,6 +30,7 @@ import org.springframework.restdocs.operation.Operation;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.restdocs.snippet.Snippet;
|
||||
import org.springframework.restdocs.snippet.TemplatedSnippet;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -166,7 +165,7 @@ public class HttpieRequestSnippet extends TemplatedSnippet {
|
||||
}
|
||||
|
||||
private void writeCookies(OperationRequest request, PrintWriter writer) {
|
||||
for (Cookie cookie : request.getCookies()) {
|
||||
for (RequestCookie cookie : request.getCookies()) {
|
||||
writer.print(String.format(" 'Cookie:%s=%s'", cookie.getName(),
|
||||
cookie.getValue()));
|
||||
}
|
||||
|
||||
@@ -24,8 +24,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.MediaType;
|
||||
@@ -33,11 +31,11 @@ import org.springframework.restdocs.operation.Operation;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.restdocs.snippet.Snippet;
|
||||
import org.springframework.restdocs.snippet.TemplatedSnippet;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
|
||||
/**
|
||||
* A {@link Snippet} that documents an HTTP request.
|
||||
*
|
||||
@@ -116,8 +114,9 @@ public class HttpRequestSnippet extends TemplatedSnippet {
|
||||
}
|
||||
}
|
||||
|
||||
for (Cookie cookie : request.getCookies()) {
|
||||
headers.add(header(HttpHeaders.COOKIE, String.format("%s=%s", cookie.getName(), cookie.getValue())));
|
||||
for (RequestCookie cookie : request.getCookies()) {
|
||||
headers.add(header(HttpHeaders.COOKIE,
|
||||
String.format("%s=%s", cookie.getName(), cookie.getValue())));
|
||||
}
|
||||
|
||||
if (requiresFormEncodingContentTypeHeader(request)) {
|
||||
|
||||
@@ -19,8 +19,6 @@ package org.springframework.restdocs.operation;
|
||||
import java.net.URI;
|
||||
import java.util.Collection;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
|
||||
@@ -89,12 +87,12 @@ public interface OperationRequest {
|
||||
URI getUri();
|
||||
|
||||
/**
|
||||
* Returns {@link Cookie Cookies} sent with the request. If no cookies were sent an
|
||||
* empty collection is returned.
|
||||
* Returns the {@link RequestCookie cookies} sent with the request. If no cookies were
|
||||
* sent an empty collection is returned.
|
||||
*
|
||||
* @return the cookies, never {@code null}
|
||||
* @since 1.2.0
|
||||
*/
|
||||
Collection<Cookie> getCookies();
|
||||
Collection<RequestCookie> getCookies();
|
||||
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ import java.net.URI;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
|
||||
@@ -48,8 +46,7 @@ public class OperationRequestFactory {
|
||||
*/
|
||||
public OperationRequest create(URI uri, HttpMethod method, byte[] content,
|
||||
HttpHeaders headers, Parameters parameters,
|
||||
Collection<OperationRequestPart> parts,
|
||||
Collection<Cookie> cookies) {
|
||||
Collection<OperationRequestPart> parts, Collection<RequestCookie> cookies) {
|
||||
return new StandardOperationRequest(uri, method, content,
|
||||
augmentHeaders(headers, uri, content), parameters, parts, cookies);
|
||||
}
|
||||
@@ -70,7 +67,8 @@ public class OperationRequestFactory {
|
||||
public OperationRequest create(URI uri, HttpMethod method, byte[] content,
|
||||
HttpHeaders headers, Parameters parameters,
|
||||
Collection<OperationRequestPart> parts) {
|
||||
return create(uri, method, content, headers, parameters, parts, Collections.<Cookie>emptyList());
|
||||
return create(uri, method, content, headers, parameters, parts,
|
||||
Collections.<RequestCookie>emptyList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright 2014-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.restdocs.operation;
|
||||
|
||||
/**
|
||||
* A representation of a Cookie received in a request.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @since 1.2.0
|
||||
*/
|
||||
public final class RequestCookie {
|
||||
|
||||
private final String name;
|
||||
|
||||
private final String value;
|
||||
|
||||
/**
|
||||
* Creates a new {@code RequestCookie} with the given {@code name} and {@code value}.
|
||||
*
|
||||
* @param name the name of the cookie
|
||||
* @param value the value of the cookie
|
||||
*/
|
||||
public RequestCookie(String name, String value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the cookie.
|
||||
*
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of the cookie.
|
||||
*
|
||||
* @return the value
|
||||
*/
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,8 +20,6 @@ import java.net.URI;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
|
||||
@@ -41,7 +39,7 @@ class StandardOperationRequest extends AbstractOperationMessage
|
||||
|
||||
private URI uri;
|
||||
|
||||
private Collection<Cookie> cookies;
|
||||
private Collection<RequestCookie> cookies;
|
||||
|
||||
/**
|
||||
* Creates a new request with the given {@code uri} and {@code method}. The request
|
||||
@@ -58,7 +56,7 @@ class StandardOperationRequest extends AbstractOperationMessage
|
||||
*/
|
||||
StandardOperationRequest(URI uri, HttpMethod method, byte[] content,
|
||||
HttpHeaders headers, Parameters parameters,
|
||||
Collection<OperationRequestPart> parts, Collection<Cookie> cookies) {
|
||||
Collection<OperationRequestPart> parts, Collection<RequestCookie> cookies) {
|
||||
super(content, headers);
|
||||
this.uri = uri;
|
||||
this.method = method;
|
||||
@@ -88,7 +86,7 @@ class StandardOperationRequest extends AbstractOperationMessage
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Cookie> getCookies() {
|
||||
public Collection<RequestCookie> getCookies() {
|
||||
return this.cookies;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,8 +25,6 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import org.junit.runners.model.Statement;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -43,6 +41,7 @@ import org.springframework.restdocs.operation.OperationRequestPartFactory;
|
||||
import org.springframework.restdocs.operation.OperationResponse;
|
||||
import org.springframework.restdocs.operation.OperationResponseFactory;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.restdocs.operation.StandardOperation;
|
||||
import org.springframework.restdocs.snippet.RestDocumentationContextPlaceholderResolverFactory;
|
||||
import org.springframework.restdocs.snippet.StandardWriterResolver;
|
||||
@@ -156,7 +155,7 @@ public class OperationBuilder extends OperationTestRule {
|
||||
|
||||
private List<OperationRequestPartBuilder> partBuilders = new ArrayList<>();
|
||||
|
||||
private Collection<Cookie> cookies = new ArrayList<>();
|
||||
private Collection<RequestCookie> cookies = new ArrayList<>();
|
||||
|
||||
private OperationRequestBuilder(String uri) {
|
||||
this.requestUri = URI.create(uri);
|
||||
@@ -215,7 +214,7 @@ public class OperationBuilder extends OperationTestRule {
|
||||
}
|
||||
|
||||
public OperationRequestBuilder cookie(String name, String value) {
|
||||
this.cookies.add(new Cookie(name, value));
|
||||
this.cookies.add(new RequestCookie(name, value));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
description = 'Spring REST Docs MockMvc'
|
||||
|
||||
dependencies {
|
||||
compile 'javax.servlet:javax.servlet-api'
|
||||
compile 'org.springframework:spring-test'
|
||||
compile project(':spring-restdocs-core')
|
||||
optional 'junit:junit'
|
||||
|
||||
@@ -21,14 +21,12 @@ import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.Part;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -43,6 +41,7 @@ import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.OperationRequestPartFactory;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestConverter;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@@ -71,7 +70,7 @@ class MockMvcRequestConverter implements RequestConverter<MockHttpServletRequest
|
||||
HttpHeaders headers = extractHeaders(mockRequest);
|
||||
Parameters parameters = extractParameters(mockRequest);
|
||||
List<OperationRequestPart> parts = extractParts(mockRequest);
|
||||
Collection<Cookie> cookies = extractCookies(mockRequest);
|
||||
Collection<RequestCookie> cookies = extractCookies(mockRequest);
|
||||
String queryString = mockRequest.getQueryString();
|
||||
if (!StringUtils.hasText(queryString)
|
||||
&& "GET".equals(mockRequest.getMethod())) {
|
||||
@@ -90,12 +89,16 @@ class MockMvcRequestConverter implements RequestConverter<MockHttpServletRequest
|
||||
}
|
||||
}
|
||||
|
||||
private Collection<Cookie> extractCookies(MockHttpServletRequest mockRequest) {
|
||||
if (mockRequest.getCookies() != null) {
|
||||
return Arrays.asList(mockRequest.getCookies());
|
||||
private Collection<RequestCookie> extractCookies(MockHttpServletRequest mockRequest) {
|
||||
if (mockRequest.getCookies() == null || mockRequest.getCookies().length == 0) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
List<RequestCookie> cookies = new ArrayList<>();
|
||||
for (javax.servlet.http.Cookie servletCookie : mockRequest.getCookies()) {
|
||||
cookies.add(
|
||||
new RequestCookie(servletCookie.getName(), servletCookie.getValue()));
|
||||
}
|
||||
return cookies;
|
||||
}
|
||||
|
||||
private List<OperationRequestPart> extractParts(MockHttpServletRequest servletRequest)
|
||||
|
||||
@@ -21,7 +21,6 @@ import java.net.URI;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.Part;
|
||||
|
||||
import org.junit.Test;
|
||||
@@ -33,6 +32,7 @@ import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.mock.web.MockServletContext;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
@@ -92,20 +92,22 @@ public class MockMvcRequestConverterTests {
|
||||
|
||||
@Test
|
||||
public void requestWithCookies() throws Exception {
|
||||
OperationRequest request = createOperationRequest(MockMvcRequestBuilders
|
||||
.get("/foo").cookie(new Cookie("cookieName1", "cookieVal1"),
|
||||
new Cookie("cookieName2", "cookieVal2")));
|
||||
OperationRequest request = createOperationRequest(
|
||||
MockMvcRequestBuilders.get("/foo")
|
||||
.cookie(new javax.servlet.http.Cookie("cookieName1",
|
||||
"cookieVal1"),
|
||||
new javax.servlet.http.Cookie("cookieName2", "cookieVal2")));
|
||||
assertThat(request.getUri(), is(URI.create("http://localhost/foo")));
|
||||
assertThat(request.getMethod(), is(HttpMethod.GET));
|
||||
assertThat(request.getCookies().size(), is(equalTo(2)));
|
||||
|
||||
Iterator<Cookie> cookieIterator = request.getCookies().iterator();
|
||||
Iterator<RequestCookie> cookieIterator = request.getCookies().iterator();
|
||||
|
||||
Cookie cookie1 = cookieIterator.next();
|
||||
RequestCookie cookie1 = cookieIterator.next();
|
||||
assertThat(cookie1.getName(), is(equalTo("cookieName1")));
|
||||
assertThat(cookie1.getValue(), is(equalTo("cookieVal1")));
|
||||
|
||||
Cookie cookie2 = cookieIterator.next();
|
||||
RequestCookie cookie2 = cookieIterator.next();
|
||||
assertThat(cookie2.getName(), is(equalTo("cookieName2")));
|
||||
assertThat(cookie2.getValue(), is(equalTo("cookieVal2")));
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.OperationRequestPartFactory;
|
||||
import org.springframework.restdocs.operation.Parameters;
|
||||
import org.springframework.restdocs.operation.RequestConverter;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
import org.springframework.util.StreamUtils;
|
||||
|
||||
@@ -60,12 +61,11 @@ class RestAssuredRequestConverter
|
||||
extractCookies(requestSpec));
|
||||
}
|
||||
|
||||
private Collection<javax.servlet.http.Cookie> extractCookies(
|
||||
private Collection<RequestCookie> extractCookies(
|
||||
FilterableRequestSpecification requestSpec) {
|
||||
Collection<javax.servlet.http.Cookie> cookies = new ArrayList<>();
|
||||
Collection<RequestCookie> cookies = new ArrayList<>();
|
||||
for (Cookie cookie : requestSpec.getCookies()) {
|
||||
cookies.add(
|
||||
new javax.servlet.http.Cookie(cookie.getName(), cookie.getValue()));
|
||||
cookies.add(new RequestCookie(cookie.getName(), cookie.getValue()));
|
||||
}
|
||||
return cookies;
|
||||
}
|
||||
|
||||
@@ -25,8 +25,6 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
|
||||
import com.jayway.restassured.RestAssured;
|
||||
import com.jayway.restassured.specification.FilterableRequestSpecification;
|
||||
import com.jayway.restassured.specification.RequestSpecification;
|
||||
@@ -44,6 +42,7 @@ import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestPart;
|
||||
import org.springframework.restdocs.operation.RequestCookie;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@@ -154,13 +153,13 @@ public class RestAssuredRequestConverterTests {
|
||||
.convert((FilterableRequestSpecification) requestSpec);
|
||||
assertThat(request.getCookies().size(), is(equalTo(2)));
|
||||
|
||||
Iterator<Cookie> cookieIterator = request.getCookies().iterator();
|
||||
Cookie cookie1 = cookieIterator.next();
|
||||
Iterator<RequestCookie> cookieIterator = request.getCookies().iterator();
|
||||
RequestCookie cookie1 = cookieIterator.next();
|
||||
|
||||
assertThat(cookie1.getName(), is(equalTo("cookie1")));
|
||||
assertThat(cookie1.getValue(), is(equalTo("cookieVal1")));
|
||||
|
||||
Cookie cookie2 = cookieIterator.next();
|
||||
RequestCookie cookie2 = cookieIterator.next();
|
||||
assertThat(cookie2.getName(), is(equalTo("cookie2")));
|
||||
assertThat(cookie2.getValue(), is(equalTo("cookieVal2")));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user