package org.springmodules.validation.bean.context.web;
import javax.servlet.FilterChain;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import junit.framework.TestCase;
import org.springframework.mock.web.MockFilterConfig;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springmodules.validation.bean.context.ValidationContextUtils;
import org.springmodules.validation.bean.context.ValidationContextHolder;
import org.springmodules.validation.bean.context.DefaultValidationContext;
import org.springmodules.validation.util.Switch;
/**
* @author Uri Boness
*/
public class ValidationContextFilterTests extends TestCase {
public void testInit() throws Exception {
MockFilterConfig filterConfig = new MockFilterConfig();
filterConfig.addInitParameter(
"validationContextUrlMappings",
"/user/*=ctx1,ctx2\n" +
"/admin/*=ctx3"
);
ValidationContextFilter filter = new ValidationContextFilter();
filter.init(filterConfig);
ValidationContextUrlMapping[] mappings = filter.getValidationContextUrlMappings();
assertNotNull(mappings);
assertEquals(2, mappings.length);
assertEquals("/user/*", mappings[0].getUrlPattern());
assertEquals(2, mappings[0].getContextTokens().length);
assertEquals("ctx1", mappings[0].getContextTokens()[0]);
assertEquals("ctx2", mappings[0].getContextTokens()[1]);
assertEquals("/admin/*", mappings[1].getUrlPattern());
assertEquals(1, mappings[1].getContextTokens().length);
assertEquals("ctx3", mappings[1].getContextTokens()[0]);
}
public void testConfigurationWithApplicationContext() throws Exception {
ClassPathXmlApplicationContext appCxt = new ClassPathXmlApplicationContext("testApplicationContext.xml", getClass());
ValidationContextFilter filter = (ValidationContextFilter)appCxt.getBean("filter");
ValidationContextUrlMapping[] mappings = filter.getValidationContextUrlMappings();
assertNotNull(mappings);
assertEquals(2, mappings.length);
assertEquals("/user/*", mappings[0].getUrlPattern());
assertEquals(2, mappings[0].getContextTokens().length);
assertEquals("ctx1", mappings[0].getContextTokens()[0]);
assertEquals("ctx2", mappings[0].getContextTokens()[1]);
assertEquals("/admin/*", mappings[1].getUrlPattern());
assertEquals(1, mappings[1].getContextTokens().length);
assertEquals("ctx3", mappings[1].getContextTokens()[0]);
}
public void testDoFilterInternal() throws Exception {
ValidationContextUrlMapping[] mappings = new ValidationContextUrlMapping[2];
mappings[0] = new ValidationContextUrlMapping("/user/*", new String[] { "ctx1", "ctx2" });
mappings[1] = new ValidationContextUrlMapping("/admin/*", new String[] { "ctx3" });
ValidationContextFilter filter = new ValidationContextFilter();
filter.setValidationContextUrlMappings(mappings);
filter.afterPropertiesSet();
final Switch filterCallSwitch = new Switch();
FilterChain filterChain = new FilterChain() {
public void doFilter(ServletRequest req, ServletResponse res) {
filterCallSwitch.turnOn();
assertTrue(ValidationContextUtils.tokensSupportedByCurrentContext(new String[] { "ctx1", "ctx2" }));
assertFalse(ValidationContextUtils.tokensSupportedByCurrentContext(new String[] { "ctx3" }));
}
};
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/user/test.html");
MockHttpServletResponse response = new MockHttpServletResponse();
filter.doFilterInternal(request, response, filterChain);
assertTrue(filterCallSwitch.isOn()); // making sure the filter was called
}
public void testDoFilterInternal_WithNoUrlMatch() throws Exception {
ValidationContextUrlMapping[] mappings = new ValidationContextUrlMapping[1];
mappings[0] = new ValidationContextUrlMapping("/bla/*", new String[] { "ctx1", "ctx2" });
ValidationContextFilter filter = new ValidationContextFilter();
filter.setValidationContextUrlMappings(mappings);
filter.afterPropertiesSet();
final Switch filterCallSwitch = new Switch();
FilterChain filterChain = new FilterChain() {
public void doFilter(ServletRequest req, ServletResponse res) {
filterCallSwitch.turnOn();
assertFalse(ValidationContextUtils.tokensSupportedByCurrentContext(new String[] { "ctx1", "ctx2" }));
assertTrue(DefaultValidationContext.class.isInstance(ValidationContextHolder.getValidationContext()));
DefaultValidationContext context = (DefaultValidationContext)ValidationContextHolder.getValidationContext();
assertEquals(0, context.getTokens().length);
}
};
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/user/test.html");
MockHttpServletResponse response = new MockHttpServletResponse();
filter.doFilterInternal(request, response, filterChain);
assertTrue(filterCallSwitch.isOn()); // making sure the filter was called
}
}