package ro.isdc.wro.http.handler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import ro.isdc.wro.cache.CacheKey;
import ro.isdc.wro.config.Context;
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.model.group.processor.InjectorBuilder;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.support.change.ResourceWatcher;
import ro.isdc.wro.util.WroTestUtils;
/**
* @author Ivar Conradi Ă˜sthus
*/
public class TestResourceWatcherRequestHandler {
private ResourceWatcherRequestHandler victim;
@Mock
private HttpServletRequest request;
@Mock
private HttpServletResponse response;
@Mock
private ResourceWatcher resourceWatcher;
@BeforeClass
public static void onBeforeClass() {
assertEquals(0, Context.countActive());
}
@AfterClass
public static void onAfterClass() {
assertEquals(0, Context.countActive());
}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
victim = new ResourceWatcherRequestHandler();
Context.set(Context.webContext(request, response, mock(FilterConfig.class)));
WroTestUtils.createInjector().inject(victim);
}
@After
public void tearDown() {
Context.unset();
}
@Test
public void shouldAcceptAndHandleAuthorizedRequest() throws Exception {
final String authKey = "123";
victim = new ResourceWatcherRequestHandler() {
@Override
String generateRandomKey() {
return authKey;
}
};
final CacheKey expected = new CacheKey("group", ResourceType.CSS);
new InjectorBuilder(new BaseWroManagerFactory()).setResourceWatcher(resourceWatcher).build().inject(victim);
when(request.getParameter(Mockito.eq(ResourceWatcherRequestHandler.PATH_API))).thenReturn(
ResourceWatcherRequestHandler.PATH_HANDLER);
when(request.getParameter(Mockito.eq(ResourceWatcherRequestHandler.PARAM_GROUP_NAME))).thenReturn(
expected.getGroupName());
when(request.getParameter(Mockito.eq(ResourceWatcherRequestHandler.PARAM_RESOURCE_TYPE))).thenReturn(
expected.getType().name());
when(request.getParameter(Mockito.eq(ResourceWatcherRequestHandler.PARAM_AUTH_KEY))).thenReturn(authKey);
when(request.getRequestURI()).thenReturn("/style.css?wroAPI=resourceWatcher");
assertTrue(victim.accept(request));
victim.handle(request, response);
verify(resourceWatcher).check(Mockito.eq(expected));
}
@Test
public void shouldNotAcceptRequestThatIsNotDispatchedByServer() {
when(request.getRequestURI()).thenReturn("wroAPI/resourceWatch");
assertFalse(victim.accept(request));
}
@Test
public void shouldNotAcceptRequest() {
when(request.getRequestURI()).thenReturn("wroApi/somethingElse");
assertFalse(victim.accept(request));
}
}