package org.pentaho.platform.web.http.filters;
import com.mockrunner.mock.web.MockFilterChain;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockFilterConfig;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import static org.junit.Assert.*;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Mockito.*;
public class PentahoAwareCharacterEncodingFilterTest {
private static final String NEW_ENCODING = "win-1252";
private PentahoAwareCharacterEncodingFilter filter;
private HttpServletRequest request;
private MockFilterConfig filterConfig;
@Before
public void setUp() {
MockHttpServletRequest req = new MockHttpServletRequest();
HttpSession session = req.getSession();
MockServletContext ctx = (MockServletContext) session.getServletContext();
ctx.addInitParameter( PentahoAwareCharacterEncodingFilter.INIT_PARAM_ENCODING, NEW_ENCODING );
request = spy( req );
doReturn( session ).when( request ).getSession( anyBoolean() );
filterConfig = new MockFilterConfig();
filter = new PentahoAwareCharacterEncodingFilter();
}
@Test
public void doFilter_ignoreFlagIsSet() throws Exception {
filterConfig.addInitParameter( "ignore", Boolean.TRUE.toString() );
filter.init( filterConfig );
filter.doFilter( request, new MockHttpServletResponse(), new MockFilterChain() );
assertEquals( NEW_ENCODING, request.getCharacterEncoding() );
}
@Test
public void doFilter_ignoreFlagIsCleared_requestEncodingIsNull() throws Exception {
filterConfig.addInitParameter( "ignore", Boolean.FALSE.toString() );
request.setCharacterEncoding( null );
filter.init( filterConfig );
filter.doFilter( request, new MockHttpServletResponse(), new MockFilterChain() );
assertEquals( NEW_ENCODING, request.getCharacterEncoding() );
}
@Test
public void doFilter_ignoreFlagIsCleared_requestEncodingNotNull() throws Exception {
filterConfig.addInitParameter( "ignore", Boolean.FALSE.toString() );
request.setCharacterEncoding( NEW_ENCODING );
filter.init( filterConfig );
filter.doFilter( request, new MockHttpServletResponse(), new MockFilterChain() );
assertEquals( NEW_ENCODING, request.getCharacterEncoding() );
}
@Test
public void doFilter_noEncodingIsProvided() throws Exception {
filterConfig.addInitParameter( "ignore", Boolean.FALSE.toString() );
request.setCharacterEncoding( null );
MockServletContext ctx = (MockServletContext) request.getSession().getServletContext();
ctx.addInitParameter( PentahoAwareCharacterEncodingFilter.INIT_PARAM_ENCODING, "" );
filter.init( filterConfig );
filter.doFilter( request, new MockHttpServletResponse(), new MockFilterChain() );
assertEquals( PentahoAwareCharacterEncodingFilter.DEFAULT_CHAR_ENCODING, request.getCharacterEncoding() );
}
}