/*
* Copyright 2002-2016 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.http;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.web.util.UriTemplate;
import static org.junit.Assert.*;
/**
* Unit tests for {@link org.springframework.http.RequestEntity}.
*
* @author Arjen Poutsma
*/
public class RequestEntityTests {
@Test
public void normal() throws URISyntaxException {
String headerName = "My-Custom-Header";
String headerValue = "HeaderValue";
URI url = new URI("http://example.com");
Integer entity = 42;
RequestEntity<Object> requestEntity =
RequestEntity.method(HttpMethod.GET, url)
.header(headerName, headerValue).body(entity);
assertNotNull(requestEntity);
assertEquals(HttpMethod.GET, requestEntity.getMethod());
assertTrue(requestEntity.getHeaders().containsKey(headerName));
assertEquals(headerValue, requestEntity.getHeaders().getFirst(headerName));
assertEquals(entity, requestEntity.getBody());
}
@Test
public void uriVariablesExpansion() throws URISyntaxException {
URI uri = new UriTemplate("http://example.com/{foo}").expand("bar");
RequestEntity.get(uri).accept(MediaType.TEXT_PLAIN).build();
String url = "http://www.{host}.com/{path}";
String host = "example";
String path = "foo/bar";
URI expected = new URI("http://www.example.com/foo/bar");
uri = new UriTemplate(url).expand(host, path);
RequestEntity<?> entity = RequestEntity.get(uri).build();
assertEquals(expected, entity.getUrl());
Map<String, String> uriVariables = new HashMap<>(2);
uriVariables.put("host", host);
uriVariables.put("path", path);
uri = new UriTemplate(url).expand(uriVariables);
entity = RequestEntity.get(uri).build();
assertEquals(expected, entity.getUrl());
}
@Test
public void get() {
RequestEntity<Void> requestEntity = RequestEntity.get(URI.create("http://example.com")).accept(
MediaType.IMAGE_GIF, MediaType.IMAGE_JPEG, MediaType.IMAGE_PNG).build();
assertNotNull(requestEntity);
assertEquals(HttpMethod.GET, requestEntity.getMethod());
assertTrue(requestEntity.getHeaders().containsKey("Accept"));
assertEquals("image/gif, image/jpeg, image/png", requestEntity.getHeaders().getFirst("Accept"));
assertNull(requestEntity.getBody());
}
@Test
public void headers() throws URISyntaxException {
MediaType accept = MediaType.TEXT_PLAIN;
long ifModifiedSince = 12345L;
String ifNoneMatch = "\"foo\"";
long contentLength = 67890;
MediaType contentType = MediaType.TEXT_PLAIN;
RequestEntity<Void> responseEntity = RequestEntity.post(new URI("http://example.com")).
accept(accept).
acceptCharset(StandardCharsets.UTF_8).
ifModifiedSince(ifModifiedSince).
ifNoneMatch(ifNoneMatch).
contentLength(contentLength).
contentType(contentType).
build();
assertNotNull(responseEntity);
assertEquals(HttpMethod.POST, responseEntity.getMethod());
assertEquals(new URI("http://example.com"), responseEntity.getUrl());
HttpHeaders responseHeaders = responseEntity.getHeaders();
assertEquals("text/plain", responseHeaders.getFirst("Accept"));
assertEquals("utf-8", responseHeaders.getFirst("Accept-Charset"));
assertEquals("Thu, 01 Jan 1970 00:00:12 GMT", responseHeaders.getFirst("If-Modified-Since"));
assertEquals(ifNoneMatch, responseHeaders.getFirst("If-None-Match"));
assertEquals(String.valueOf(contentLength), responseHeaders.getFirst("Content-Length"));
assertEquals(contentType.toString(), responseHeaders.getFirst("Content-Type"));
assertNull(responseEntity.getBody());
}
@Test
public void methods() throws URISyntaxException {
URI url = new URI("http://example.com");
RequestEntity<?> entity = RequestEntity.get(url).build();
assertEquals(HttpMethod.GET, entity.getMethod());
entity = RequestEntity.post(url).build();
assertEquals(HttpMethod.POST, entity.getMethod());
entity = RequestEntity.head(url).build();
assertEquals(HttpMethod.HEAD, entity.getMethod());
entity = RequestEntity.options(url).build();
assertEquals(HttpMethod.OPTIONS, entity.getMethod());
entity = RequestEntity.put(url).build();
assertEquals(HttpMethod.PUT, entity.getMethod());
entity = RequestEntity.patch(url).build();
assertEquals(HttpMethod.PATCH, entity.getMethod());
entity = RequestEntity.delete(url).build();
assertEquals(HttpMethod.DELETE, entity.getMethod());
}
@Test // SPR-13154
public void types() throws URISyntaxException {
URI url = new URI("http://example.com");
List<String> body = Arrays.asList("foo", "bar");
ParameterizedTypeReference<?> typeReference = new ParameterizedTypeReference<List<String>>() {};
RequestEntity<?> entity = RequestEntity.post(url).body(body, typeReference.getType());
assertEquals(typeReference.getType(), entity.getType());
}
}