package ro.isdc.wro.http.support; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Map; import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import ro.isdc.wro.WroRuntimeException; import ro.isdc.wro.config.Context; import ro.isdc.wro.config.jmx.WroConfiguration; /** * Test the behavior of {@link ResponseHeadersConfigurer} * * @author Alex Objelean */ public class TestResponseHeadersConfigurer { @Mock private HttpServletRequest request; @Mock private HttpServletResponse response; @Mock private FilterChain chain; private ResponseHeadersConfigurer victim; @BeforeClass public static void onBeforeClass() { assertEquals(0, Context.countActive()); } @AfterClass public static void onAfterClass() { assertEquals(0, Context.countActive()); } @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); victim = new ResponseHeadersConfigurer(); } @Test public void shouldHaveNoConfiguredHeadersWhenDefaultHeadersAreNotSet() { victim = ResponseHeadersConfigurer.emptyHeaders(); assertTrue(victim.getHeadersMap().entrySet().isEmpty()); } @Test public void shouldUseConfiguredDefaultHeaders() { final String etag = "123"; victim = new ResponseHeadersConfigurer() { @Override public void configureDefaultHeaders(final Map<String, String> map) { map.put(HttpHeader.ETAG.name(), etag); } }; final Map<String, String> map = victim.getHeadersMap(); assertEquals(1, map.size()); assertEquals(etag, map.get(HttpHeader.ETAG.getHeaderName())); } @Test public void shouldHaveNoCacheHeadersInDebugMode() { final WroConfiguration config = new WroConfiguration(); config.setDebug(true); victim = ResponseHeadersConfigurer.fromConfig(config); final Map<String, String> map = victim.getHeadersMap(); assertEquals(3, map.size()); assertEquals("no-cache", map.get(HttpHeader.PRAGMA.getHeaderName())); assertEquals("no-cache", map.get(HttpHeader.CACHE_CONTROL.getHeaderName())); assertEquals("0", map.get(HttpHeader.EXPIRES.getHeaderName())); } @Test public void shouldSetCacheControlForOneYearWhenDebugModeIsFalse() { final WroConfiguration config = new WroConfiguration(); config.setDebug(false); victim = ResponseHeadersConfigurer.fromConfig(config); final Map<String, String> map = victim.getHeadersMap(); assertEquals(3, map.size()); assertEquals("public, max-age=315360000", map.get(HttpHeader.CACHE_CONTROL.getHeaderName())); } @Test public void shouldUseHeadersSetAsString() { victim = ResponseHeadersConfigurer.withHeadersSet("h1:v1 | h2:v2"); final Map<String, String> map = victim.getHeadersMap(); assertEquals("v1", map.get("h1")); assertEquals("v2", map.get("h2")); assertEquals(2, map.size()); } @Test(expected = WroRuntimeException.class) public void cannotUseHeadersSetWronglyAsString() { final WroConfiguration config = new WroConfiguration(); config.setDebug(true); config.setHeader("h1=v1 , h2 =v2"); victim = ResponseHeadersConfigurer.fromConfig(config); final Map<String, String> map = victim.getHeadersMap(); assertEquals(2, map.size()); assertEquals("v1", map.get("h1")); assertEquals("v2", map.get("h2")); } }