package br.com.caelum.vraptor.restfulie.headers; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Calendar; import javax.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import br.com.caelum.vraptor.restfulie.hypermedia.HypermediaResource; import br.com.caelum.vraptor.restfulie.relation.RelationBuilder; import br.com.caelum.vraptor.restfulie.resource.Cacheable; import br.com.caelum.vraptor.restfulie.resource.RestfulEntity; public class DefaultRestHeadersHandlerTest { @Mock private HttpServletResponse response; @Mock private RestDefaults defaults; private DefaultRestHeadersHandler handler; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); this.handler = new DefaultRestHeadersHandler(this.response, defaults); } @Test public void whenResourceIsSimpleDoNothing() { handler.handle(mock(HypermediaResource.class)); } class CacheableOrder implements Cacheable, HypermediaResource{ public int getMaximumAge() { return 150; } public void configureRelations(RelationBuilder builder) { } } @Test public void whenResourceIsCacheableAddMaxAge() { CacheableOrder cacheable = new CacheableOrder(); handler.handle(cacheable); verify(response).addHeader("Cache-control","max-age=150"); } @Test public void whenResourceHasLinksAddThemToTheHeader() { CacheableOrder cacheable = new CacheableOrder(); handler.handle(cacheable); // TODO add link headers } @Test public void whenNotExplicitlyRestfulEntityUseDefaultEtagAndLastModified() { CacheableOrder cacheable = new CacheableOrder(); Calendar date = Calendar.getInstance(); when(defaults.getLastModifiedFor(cacheable)).thenReturn(date); when(defaults.getEtagFor(cacheable)).thenReturn("custom etag"); handler.handle(cacheable); verify(response).addHeader("ETag", "custom etag"); verify(response).setDateHeader("Last-modified", date.getTimeInMillis()); } class CacheableOrderEntity implements RestfulEntity, HypermediaResource { private final Calendar date = Calendar.getInstance(); public void configureRelations(RelationBuilder builder) { } public String getEtag() { return "MY ETAG"; } public Calendar getLastModified() { return date; } public int getMaximumAge() { return 0; } } @Test public void whenRestfulEntityIsHandledShouldUseItsValues() { CacheableOrderEntity cacheable = new CacheableOrderEntity(); handler.handle(cacheable); verify(response).addHeader("ETag", "MY ETAG"); verify(response).setDateHeader("Last-modified", cacheable.date.getTimeInMillis()); } }