org.craftercms.engine.mobile.UserAgentTemplateDetectorTest.java Source code

Java tutorial

Introduction

Here is the source code for org.craftercms.engine.mobile.UserAgentTemplateDetectorTest.java

Source

/*
 * Copyright (C) 2007-2013 Crafter Software Corporation.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * 
 */
package org.craftercms.engine.mobile;

import junit.framework.Assert;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author mverkaik
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:crafter/engine/services/main-services-context.xml" })
public class UserAgentTemplateDetectorTest {

    private final String genericTemplate = "/foo/bar.ftl";
    private final String iPhoneTemplate = "/foo/iphone_bar.ftl";
    private final String iPadTemplate = "/foo/ipad_bar.ftl";

    private final String iPhoneParam = "iphone";
    private final String iPadParam = "ipad";

    private final String iPhoneAgentHeader = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7";
    private final String iPadAgentHeader = "Mozilla/5.0 (iPad; U; CPU OS OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10";

    @Autowired
    private ApplicationContext applicationContext;

    private UserAgentTemplateDetector getUserAgentTemplateDetector() {
        return applicationContext.getBean(UserAgentTemplateDetector.class);
    }

    @Test
    public void testResolveIphoneTemplateByParam() {
        MockHttpServletRequest request = mockRequestWithAgentParam(iPhoneParam);
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(iPhoneTemplate, resolvedTemplate);
    }

    @Test
    public void testResolveIphoneTemplateByHeader() {
        MockHttpServletRequest request = mockRequestWithAgentHeader(iPhoneAgentHeader);
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(iPhoneTemplate, resolvedTemplate);
    }

    @Test
    public void testResolveIpadTemplateByParam() {
        MockHttpServletRequest request = mockRequestWithAgentParam(iPadParam);
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(iPadTemplate, resolvedTemplate);
    }

    @Test
    public void testResolveIpadTemplateByHeader() {
        MockHttpServletRequest request = mockRequestWithAgentHeader(iPadAgentHeader);
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(iPadTemplate, resolvedTemplate);
    }

    @Test
    public void testResolveIphoneTemplateByStandardHeader() {
        MockHttpServletRequest request = mockRequestWithStandardAgentHeader(iPhoneAgentHeader);
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(iPhoneTemplate, resolvedTemplate);
    }

    @Test
    public void testResolveIpadTemplateByStandardHeader() {
        MockHttpServletRequest request = mockRequestWithStandardAgentHeader(iPadAgentHeader);
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(iPadTemplate, resolvedTemplate);
    }

    @Test
    public void testResolveUnrecognizedRequest() {
        MockHttpServletRequest request = new MockHttpServletRequest();
        String resolvedTemplate = getUserAgentTemplateDetector().resolveAgentTemplate(request, genericTemplate);
        Assert.assertEquals(genericTemplate, resolvedTemplate);
    }

    private MockHttpServletRequest mockRequestWithAgentParam(String userAgent) {
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addParameter(getUserAgentTemplateDetector().getAgentQueryStringParamName(), userAgent);
        return request;
    }

    private MockHttpServletRequest mockRequestWithAgentHeader(String userAgent) {
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(getUserAgentTemplateDetector().getAgentHeaderName(), userAgent);
        return request;
    }

    private MockHttpServletRequest mockRequestWithStandardAgentHeader(String userAgent) {
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader("User-Agent", userAgent);
        return request;
    }
}