/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.resolver;
import javax.servlet.http.Cookie;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import com.enonic.cms.core.Attribute;
import com.enonic.cms.core.MockSitePropertiesService;
import com.enonic.cms.core.SiteURLResolver;
import com.enonic.cms.core.resolver.deviceclass.UserAgentTestEnums;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.SitePath;
import com.enonic.cms.core.structure.SitePropertyNames;
import static org.junit.Assert.*;
/**
* Created by rmy - Date: Apr 15, 2009
*/
public class ResolverHttpRequestInputCreatorTest
{
private ResolverHttpRequestInputCreator resolverHttpRequestInputCreator;
private ResolverHttpRequestInput resolverHttpRequestInput;
private MockHttpServletRequest request;
private SiteKey siteKey;
private SiteURLResolver siteURLResolver;
private static final int NUMBER_OF_COOKIES = 5;
private static final int NUMBER_OF_PARAMETERS = 10;
private static final String ACCEPT_LANGUAGE_PARAMETER_VALUE = "no,en-gb;q=0.5,en-us;q=0.9";
@Before
public void setUp()
{
resolverHttpRequestInputCreator = new ResolverHttpRequestInputCreator();
siteKey = new SiteKey( 1 );
request = new MockHttpServletRequest();
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( siteKey, "/home" ) );
request.setRequestURI( "/site/" + siteKey.toString() + "/" );
siteURLResolver = new SiteURLResolver();
siteURLResolver.setCharacterEncoding( "UTF-8" );
MockSitePropertiesService sitePropertiesService = new MockSitePropertiesService();
sitePropertiesService.setProperty( siteKey, SitePropertyNames.CREATE_URL_AS_PATH_PROPERTY, "false" );
siteURLResolver.setSitePropertiesService( sitePropertiesService );
resolverHttpRequestInputCreator.setSiteUrlResolver( siteURLResolver );
ServletRequestAccessor.setRequest( request );
}
@Test
public void testNullRequest()
{
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
assertEquals( null, resolverHttpRequestInput.getUserAgent() );
}
@Test
public void testFullRequest()
{
setupFullRequest();
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
Assert.assertEquals( UserAgentTestEnums.IPHONE.userAgent, resolverHttpRequestInput.getUserAgent() );
assertBasics();
assertEquals( NUMBER_OF_COOKIES, resolverHttpRequestInput.getCookies().size() );
assertEquals( NUMBER_OF_PARAMETERS, resolverHttpRequestInput.getParameters().size() );
assertEquals( 3, resolverHttpRequestInput.getHttpHeaders().size() );
}
@Test
public void testMissingCookies()
{
setupFullRequest();
request.setCookies();
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
assertBasics();
assertEquals( 0, resolverHttpRequestInput.getCookies().size() );
}
@Test
public void testNoParameters()
{
setupFullRequest();
request.removeAllParameters();
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
assertBasics();
assertEquals( 0, resolverHttpRequestInput.getParameters().size() );
}
@Test
public void testMissingIP()
{
setupFullRequest();
request.setRemoteAddr( null );
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
assertNull( resolverHttpRequestInput.getIp() );
}
@Test
public void testNoAcceptLanguages()
{
addUserAgent();
addRefferer();
addRemoteAddress();
addProtocol();
addServerAndPort();
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
assertEquals( 0, resolverHttpRequestInput.getAcceptLanguages().size() );
}
@Test
public void testNoHeaders()
{
addRemoteAddress();
addProtocol();
addServerAndPort();
resolverHttpRequestInput = resolverHttpRequestInputCreator.createResolverHttpRequestInput( request );
assertEquals( 0, resolverHttpRequestInput.getHttpHeaders().size() );
}
private void assertBasics()
{
assertEquals( "referrer", resolverHttpRequestInput.getReferrer() );
assertEquals( "remoteAddress", resolverHttpRequestInput.getIp() );
assertEquals( "protocol", resolverHttpRequestInput.getProtocol() );
}
private void setupFullRequest()
{
addUserAgent();
addRefferer();
addRemoteAddress();
addProtocol();
addServerAndPort();
addParameters( NUMBER_OF_PARAMETERS );
addAcceptLanguages();
addCookies( NUMBER_OF_COOKIES );
}
private void addCookies( int numberOfCookies )
{
Cookie[] cookies = new Cookie[numberOfCookies];
for ( int i = 0; i < numberOfCookies; i++ )
{
cookies[i] = new Cookie( "cookie" + i, "value" + i );
}
request.setCookies( cookies );
}
private void addProtocol()
{
request.setProtocol( "protocol" );
}
private void addRemoteAddress()
{
request.setRemoteAddr( "remoteAddress" );
}
private void addServerAndPort()
{
request.setServerName( "serverName" );
request.setLocalPort( 0 );
}
private void addRefferer()
{
request.addHeader( ResolverHttpRequestInputCreator.REFERER_HEADER_NAME, "referrer" );
}
private void addUserAgent()
{
request.addHeader( ResolverHttpRequestInputCreator.USER_AGENT_HEADER_NAME, UserAgentTestEnums.IPHONE.userAgent );
}
private void addParameters( int numberOfParameters )
{
for ( int i = 0; i < numberOfParameters; i++ )
{
request.setParameter( "param" + i, "value" + i );
}
}
private void addAcceptLanguages()
{
request.addHeader( ResolverHttpRequestInputCreator.ACCEPT_LANGUAGE_HEADER_NAME, ACCEPT_LANGUAGE_PARAMETER_VALUE );
}
}