Add support for documenting request and response cookies

See gh-592
This commit is contained in:
clydebarrow
2019-03-07 14:26:31 +11:00
committed by Andy Wilkinson
parent 15980d7486
commit f72a9f1067
38 changed files with 1572 additions and 17 deletions

View File

@@ -16,6 +16,11 @@
package org.springframework.restdocs.mockmvc;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import jakarta.servlet.http.Cookie;
import org.springframework.http.HttpHeaders;
@@ -23,6 +28,7 @@ import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.restdocs.operation.OperationResponse;
import org.springframework.restdocs.operation.OperationResponseFactory;
import org.springframework.restdocs.operation.ResponseConverter;
import org.springframework.restdocs.operation.ResponseCookie;
import org.springframework.util.StringUtils;
/**
@@ -30,13 +36,28 @@ import org.springframework.util.StringUtils;
* {@link MockHttpServletResponse}.
*
* @author Andy Wilkinson
* @author Clyde Stubbs
*/
class MockMvcResponseConverter implements ResponseConverter<MockHttpServletResponse> {
@Override
public OperationResponse convert(MockHttpServletResponse mockResponse) {
return new OperationResponseFactory().create(mockResponse.getStatus(), extractHeaders(mockResponse),
mockResponse.getContentAsByteArray());
HttpHeaders headers = extractHeaders(mockResponse);
Collection<ResponseCookie> cookies = extractCookies(mockResponse, headers);
return new OperationResponseFactory().create(mockResponse.getStatus(), headers,
mockResponse.getContentAsByteArray(), cookies);
}
private Collection<ResponseCookie> extractCookies(MockHttpServletResponse mockRequest, HttpHeaders headers) {
if (mockRequest.getCookies() == null || mockRequest.getCookies().length == 0) {
return Collections.emptyList();
}
List<ResponseCookie> cookies = new ArrayList<>();
for (Cookie servletCookie : mockRequest.getCookies()) {
cookies.add(new ResponseCookie(servletCookie.getName(), servletCookie.getValue()));
}
headers.remove(HttpHeaders.COOKIE);
return cookies;
}
private HttpHeaders extractHeaders(MockHttpServletResponse response) {