MockServerHttpRequest and Response set cookie headers

Issue: SPR-15522
This commit is contained in:
Rossen Stoyanchev
2017-05-30 10:58:19 -04:00
parent 67bcef22e4
commit 5dcfd84d3b
9 changed files with 168 additions and 8 deletions

View File

@@ -21,6 +21,7 @@ import java.net.URI;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
@@ -231,7 +232,7 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
/**
* Add one or more cookies.
*/
B cookie(String name, HttpCookie... cookie);
B cookie(HttpCookie... cookie);
/**
* Add the given cookies.
@@ -390,8 +391,8 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
}
@Override
public BodyBuilder cookie(String name, HttpCookie... cookies) {
this.cookies.put(name, Arrays.asList(cookies));
public BodyBuilder cookie(HttpCookie... cookies) {
Arrays.stream(cookies).forEach(cookie -> this.cookies.add(cookie.getName(), cookie));
return this;
}
@@ -485,9 +486,15 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
@Override
public MockServerHttpRequest body(Publisher<? extends DataBuffer> body) {
applyCookies();
return new MockServerHttpRequest(this.method, this.url, this.contextPath,
this.headers, this.cookies, this.remoteAddress, body);
}
private void applyCookies() {
this.cookies.values().stream().flatMap(Collection::stream)
.forEach(cookie -> this.headers.add(HttpHeaders.COOKIE, cookie.toString()));
}
}
}

View File

@@ -18,6 +18,7 @@ package org.springframework.mock.http.server.reactive;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Function;
@@ -28,6 +29,7 @@ import reactor.core.publisher.Mono;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.AbstractServerHttpResponse;
import org.springframework.util.Assert;
import org.springframework.util.MimeType;
@@ -85,6 +87,8 @@ public class MockServerHttpResponse extends AbstractServerHttpResponse {
@Override
protected void applyCookies() {
getCookies().values().stream().flatMap(Collection::stream)
.forEach(cookie -> getHeaders().add(HttpHeaders.SET_COOKIE, cookie.toString()));
}
@Override

View File

@@ -0,0 +1,50 @@
/*
* 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.mock.http.server.reactive;
import java.util.Arrays;
import org.junit.Test;
import org.springframework.http.HttpCookie;
import org.springframework.http.HttpHeaders;
import static org.junit.Assert.assertEquals;
/**
* Unit tests for {@link MockServerHttpRequest}.
* @author Rossen Stoyanchev
*/
public class MockServerHttpRequestTests {
@Test
public void cookieHeaderSet() throws Exception {
HttpCookie foo11 = new HttpCookie("foo1", "bar1");
HttpCookie foo12 = new HttpCookie("foo1", "bar2");
HttpCookie foo21 = new HttpCookie("foo2", "baz1");
HttpCookie foo22 = new HttpCookie("foo2", "baz2");
MockServerHttpRequest request = MockServerHttpRequest.get("/")
.cookie(foo11, foo12, foo21, foo22).build();
assertEquals(Arrays.asList(foo11, foo12), request.getCookies().get("foo1"));
assertEquals(Arrays.asList(foo21, foo22), request.getCookies().get("foo2"));
assertEquals(Arrays.asList("foo1=bar1", "foo1=bar2", "foo2=baz1", "foo2=baz2"),
request.getHeaders().get(HttpHeaders.COOKIE));
}
}

View File

@@ -0,0 +1,54 @@
/*
* 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.mock.http.server.reactive;
import java.util.Arrays;
import org.junit.Test;
import org.springframework.http.HttpCookie;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseCookie;
import static org.junit.Assert.assertEquals;
/**
* Unit tests for {@link MockServerHttpResponse}.
* @author Rossen Stoyanchev
*/
public class MockServerHttpResponseTests {
@Test
public void cookieHeaderSet() throws Exception {
ResponseCookie foo11 = ResponseCookie.from("foo1", "bar1").build();
ResponseCookie foo12 = ResponseCookie.from("foo1", "bar2").build();
ResponseCookie foo21 = ResponseCookie.from("foo2", "baz1").build();
ResponseCookie foo22 = ResponseCookie.from("foo2", "baz2").build();
MockServerHttpResponse response = new MockServerHttpResponse();
response.addCookie(foo11);
response.addCookie(foo12);
response.addCookie(foo21);
response.addCookie(foo22);
response.applyCookies();
assertEquals(Arrays.asList("foo1=bar1", "foo1=bar2", "foo2=baz1", "foo2=baz2"),
response.getHeaders().get(HttpHeaders.SET_COOKIE));
}
}