Java tutorial
package net.eusashead.hateoas.response.impl; /* * #[license] * spring-responseentitybuilder * %% * Copyright (C) 2013 Eusa's Head * %% * 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. * %[license] */ import java.util.Date; import net.eusashead.hateoas.header.impl.HashingETagHeaderStrategy; import net.eusashead.hateoas.response.EntityResponseBuilder; import net.eusashead.hateoas.test.model.Entity; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockHttpServletRequest; @RunWith(JUnit4.class) public class HeadResponseBuilderImplTest { private MockHttpServletRequest request; private EntityResponseBuilder<Entity> builder; @Before public void before() { request = new MockHttpServletRequest("HEAD", "http://localhost/resource/1"); builder = new EntityResponseBuilderImpl<Entity>(request); } @Test public void testEntityBuild() throws Exception { Entity entity = new Entity("foo"); ResponseEntity<Entity> response = builder.entity(entity).build(); Assert.assertNotNull(response); Assert.assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode()); Assert.assertNull(response.getBody()); Assert.assertNull(response.getHeaders().getETag()); Assert.assertEquals(-1l, response.getHeaders().getLastModified()); Assert.assertNull(response.getHeaders().getCacheControl()); Assert.assertEquals(-1l, response.getHeaders().getExpires()); Assert.assertEquals(-1l, response.getHeaders().getDate()); } @Test public void testAllHeaders() throws Exception { Entity entity = new Entity("foo"); Date now = new Date(1373571924000l); ResponseEntity<Entity> response = builder.entity(entity).etag().lastModified(now).expireIn(1000l).build(); Assert.assertNotNull(response); Assert.assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode()); Assert.assertNull(response.getBody()); Assert.assertNotNull(response.getHeaders().getETag()); Assert.assertEquals("W/\"b0c689597eb9dd62c0a1fb90a7c5c5a5\"", response.getHeaders().getETag()); Assert.assertEquals(now.getTime(), response.getHeaders().getLastModified()); Assert.assertNotNull(response.getHeaders().getCacheControl()); Assert.assertEquals("public, must-revalidate, proxy-revalidate, max-age=1", response.getHeaders().getCacheControl()); Assert.assertNotEquals(-1l, response.getHeaders().getDate()); Assert.assertEquals(response.getHeaders().getDate() + 1000l, response.getHeaders().getExpires()); } @Test public void testEtagDate() throws Exception { Entity entity = new Entity("foo"); Date now = new Date(1373571924000l); ResponseEntity<Entity> response = builder.entity(entity).etag(now).build(); Assert.assertNotNull(response); Assert.assertNotNull(response.getHeaders().getETag()); Assert.assertEquals("W/\"1373571924000\"", response.getHeaders().getETag()); } @Test public void testEtagVersion() throws Exception { Entity entity = new Entity("foo"); ResponseEntity<Entity> response = builder.entity(entity).etag(123).build(); Assert.assertNotNull(response); Assert.assertNotNull(response.getHeaders().getETag()); Assert.assertEquals("\"123\"", response.getHeaders().getETag()); } @Test public void testETagStrategy() throws Exception { Entity entity = new Entity("foo"); ResponseEntity<Entity> response = builder.entity(entity).etag(new HashingETagHeaderStrategy()).build(); Assert.assertNotNull(response); Assert.assertNotNull(response.getHeaders().getETag()); Assert.assertEquals("W/\"b0c689597eb9dd62c0a1fb90a7c5c5a5\"", response.getHeaders().getETag()); } @Test(expected = IllegalArgumentException.class) public void testNullEntity() throws Exception { Entity entity = null; builder.entity(entity).build(); } @Test(expected = IllegalArgumentException.class) public void testNoEntityEtag() throws Exception { builder.etag(); } @Test(expected = IllegalArgumentException.class) public void testNoEntityEtagStrategy() throws Exception { builder.etag(new HashingETagHeaderStrategy()); } @Test public void testConditionalHead() throws Exception { // Set up request with If-None-Match request = new MockHttpServletRequest("HEAD", "http://localhost/resource/1"); request.addHeader("If-None-Match", "W/\"b0c689597eb9dd62c0a1fb90a7c5c5a5\""); builder = new EntityResponseBuilderImpl<Entity>(request); // Set up response with ETag matching If-None-Match Entity entity = new Entity("foo"); ResponseEntity<Entity> response = builder.entity(entity).etag().build(); Assert.assertNotNull(response); Assert.assertNull(response.getBody()); Assert.assertEquals(HttpStatus.NOT_MODIFIED, response.getStatusCode()); Assert.assertNotNull(response.getHeaders().getETag()); Assert.assertEquals("W/\"b0c689597eb9dd62c0a1fb90a7c5c5a5\"", response.getHeaders().getETag()); } }