org.ocpsoft.rewrite.prettyfaces.encoding.URLEncodingTest.java Source code

Java tutorial

Introduction

Here is the source code for org.ocpsoft.rewrite.prettyfaces.encoding.URLEncodingTest.java

Source

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2009, Red Hat Middleware LLC, and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.ocpsoft.rewrite.prettyfaces.encoding;

import junit.framework.Assert;

import org.apache.http.client.methods.HttpGet;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ocpsoft.rewrite.prettyfaces.PrettyFacesTestBase;
import org.ocpsoft.rewrite.test.HttpAction;
import org.ocpsoft.rewrite.test.RewriteTestBase;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

@RunWith(Arquillian.class)
public class URLEncodingTest extends RewriteTestBase {
    @Deployment(testable = false)
    public static WebArchive createDeployment() {
        return PrettyFacesTestBase.getDeployment().addClass(EncodingBean.class)
                .addAsWebResource("encoding/encoding.xhtml", "encoding.xhtml")
                .addAsWebInfResource("encoding/encoding-pretty-config.xml", "pretty-config.xml");
    }

    /**
     * Test a rewrite rule using the 'substitute' attribute to modify the URL.
     * 
     * @see http://code.google.com/p/prettyfaces/issues/detail?id=76
     */
    @Test
    public void testRewriteEncodingSubstitute() throws Exception {
        String target = "/virtual/rewrite/substitute";
        String expected = "/virtu%C3%A1ln%C3%AD";

        HttpAction<HttpGet> action = get(target);

        String responseContent = action.getResponseContent();
        Assert.assertTrue(responseContent.contains(action.getContextPath() + expected));
    }

    /**
     * Test a rewrite rule using the 'url' attribute to create a completely new URL.
     * 
     * @see http://code.google.com/p/prettyfaces/issues/detail?id=76
     */
    @Test
    public void testRewriteEncodingUrl() throws Exception {
        String target = "/virtual/rewrite/url";
        String expected = "/virtu%C3%A1ln%C3%AD";

        HttpAction<HttpGet> action = get(target);

        Assert.assertTrue(action.getCurrentURL().endsWith(expected));
        Assert.assertTrue(action.getResponseContent().contains(expected));
    }

    @Test
    public void testPrettyFacesFormActionURLEncodesProperly() throws Exception {
        String expected = "/custom/form";

        HttpAction<HttpGet> action = get(expected);

        Assert.assertTrue(action.getCurrentURL().endsWith(expected));
        Assert.assertTrue(action.getResponseContent().contains(expected));
    }

    @Test
    // http://code.google.com/p/prettyfaces/issues/detail?id=64
    public void testPrettyFacesFormActionURLEncodesProperlyWithCustomRegexAndMultiplePathSegments()
            throws Exception {
        String expected = "/foo/bar/baz/car/";

        HttpAction<HttpGet> action = get(expected);

        Assert.assertTrue(action.getCurrentURL().endsWith(expected));
        Assert.assertTrue(action.getResponseContent().contains(expected));

        Assert.assertTrue(action.getResponseContent().contains("beanPathText=foo/bar/baz/car"));
    }

    @Test
    public void testNonMappedRequestRendersRewrittenURL() throws Exception {
        HttpAction<HttpGet> action = get("/encoding.jsf");

        Assert.assertTrue(action.getCurrentURL().endsWith("/encoding.jsf"));
        Assert.assertTrue(action.getResponseContent().contains("/custom/form"));
    }

    @Drone
    WebDriver browser;

    @Test
    public void testURLDecoding() throws Exception {
        browser.get(getBaseURL() + getContextPath() + "/encoding/Vra?ar?dis=Fooo Bar");
        Assert.assertTrue(browser.getPageSource().contains("/encoding/Vra%C4%8Dar?dis=Fooo+Bar"));
        Assert.assertTrue(browser.getPageSource().contains("beanPathText=Vra?ar"));
        Assert.assertTrue(browser.getPageSource().contains("beanQueryText=Fooo Bar"));
    }

    @Test
    public void testQueryDecoding() throws Exception {
        HttpAction<HttpGet> action = get("/encoding/Vra?ar?dis=Fooo%20Bar");

        Assert.assertTrue(action.getCurrentURL().endsWith("/encoding/Vra?ar?dis=Fooo%20Bar"));
        Assert.assertTrue(action.getResponseContent().contains("/encoding/Vra%C4%8Dar?dis=Fooo+Bar"));
        Assert.assertTrue(action.getResponseContent().contains("beanQueryText=Fooo Bar"));
    }

    @Test
    public void testEncodedPathDecoding() throws Exception {
        HttpAction<HttpGet> action = get("/encoding/Vra?ar?dis=Fooo%20Bar");

        Assert.assertTrue(action.getCurrentURL().endsWith("/encoding/Vra?ar?dis=Fooo%20Bar"));
        Assert.assertTrue(action.getResponseContent().contains("/encoding/Vra%C4%8Dar?dis=Fooo+Bar"));
        Assert.assertTrue(action.getResponseContent().contains("beanPathText=Vra?ar"));
        Assert.assertTrue(action.getResponseContent().contains("beanQueryText=Fooo Bar"));
    }

    @Test
    public void testQueryWithGermanUmlaut() throws Exception {
        HttpAction<HttpGet> action = get("/encoding/Vra?ar?dis=%C3%BC");
        Assert.assertTrue(action.getCurrentURL().endsWith("/encoding/Vra?ar?dis=%C3%BC"));
        Assert.assertTrue(
                action.getResponseContent().contains(getContextPath() + "/encoding/Vra%C4%8Dar?dis=%C3%BC"));
        Assert.assertTrue(action.getResponseContent().contains("beanPathText=Vra?ar"));
        Assert.assertTrue(action.getResponseContent().contains("beanQueryText=\u00fc"));
    }

    @Test
    public void testUrlMappingPatternDecoding() throws Exception {
        browser.get(getBaseURL() + getContextPath() + "/hard encoding/Vra?ar");
        Assert.assertNotNull(browser.findElement(By.id("form")));
    }

    @Test
    public void testEncodedURLMatchesNonEncodedPattern() throws Exception {
        browser.get(getBaseURL() + getContextPath() + "/URL%20ENCODED");
        Assert.assertNotNull(browser.findElement(By.id("form")));
    }

    @Test
    public void testNoDecodeOnSubmitDoesNotCrash() throws Exception {
        browser.get(getBaseURL() + getContextPath() + "/decodequery");

        Assert.assertTrue(browser.getPageSource().contains("viewId=/encoding.xhtml"));
        browser.findElement(By.id("input1")).sendKeys("%");
        browser.findElement(By.id("submit")).click();
        Assert.assertTrue(browser.getPageSource().contains("viewId=/encoding.xhtml"));
    }
}