com.gisgraphy.addressparser.web.AddressQueryHttpBuilderTest.java Source code

Java tutorial

Introduction

Here is the source code for com.gisgraphy.addressparser.web.AddressQueryHttpBuilderTest.java

Source

/*******************************************************************************
 * Gisgraphy Project 
 *  
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation; either
 *    version 2.1 of the License, or (at your option) any later version.
 *  
 *    This library 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
 *    Lesser General Public License for more details.
 *  
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
 *  
 *   Copyright 2008  Gisgraphy project 
 * 
 *   David Masclet <davidmasclet@gisgraphy.com>
 ******************************************************************************/
package com.gisgraphy.addressparser.web;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import org.apache.commons.lang.RandomStringUtils;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;

import com.gisgraphy.addressparser.Address;
import com.gisgraphy.addressparser.AddressQuery;
import com.gisgraphy.addressparser.StructuredAddressQuery;
import com.gisgraphy.addressparser.exception.AddressParserException;
import com.gisgraphy.serializer.common.OutputFormat;
import com.gisgraphy.servlet.AbstractAddressServlet;
import com.gisgraphy.servlet.GisgraphyServlet;

public class AddressQueryHttpBuilderTest {

    @Test
    public void buildFromRequestWithNullRequest() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        try {
            builder.buildAddressFromRequest(null);
            Assert.fail("could not build a query with null request");
        } catch (Exception e) {
        }
    }

    @Test
    public void buildQueryFromRequestWithNullRequest() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        try {
            builder.buildFromRequest(null);
            Assert.fail("could not build a query with null request");
        } catch (Exception e) {
        }
    }

    @Test
    public void buildFromRequest() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        MockHttpServletRequest request = new MockHttpServletRequest();
        AddressQuery query;
        //without parameters
        try {
            builder.buildFromRequest(request);
            Assert.fail("without parameters the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }
        //country
        //without country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        query = builder.buildFromRequest(request);
        Assert.assertNull("country parameter is not required", query.getCountry());

        //with country=space
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, " ");
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        query = builder.buildFromRequest(request);
        Assert.assertNull("with empty country equals to space, the country should be considered as null",
                query.getCountry());

        //with empty country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "");
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        builder.buildFromRequest(request);
        Assert.assertNull("with empty country, the country should be considered as null", query.getCountry());

        //address
        //without address nor structured
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "US");
        try {
            builder.buildFromRequest(request);
            Assert.fail("without address parameter or structured the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }
        //with empty address, nor structured
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, " ");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        try {
            builder.buildFromRequest(request);
            Assert.fail("with empty country equals to space, the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }

        //with empty country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, " ");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        try {
            builder.buildFromRequest(request);
            Assert.fail("with empty string the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }

        //with too long address
        request = new MockHttpServletRequest();
        String tooLongAddress = RandomStringUtils.random(AbstractAddressServlet.QUERY_MAX_LENGTH + 1);
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, tooLongAddress);
        try {
            builder.buildFromRequest(request);
            Assert.fail("with empty string the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }

        //all ok
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        Assert.assertEquals("address", query.getAddress());
        Assert.assertEquals("us", query.getCountry());

        // test outputFormat
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When no " + AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER
                        + " is specified, the  parameter should be set to  " + OutputFormat.getDefault(),
                OutputFormat.getDefault(), query.getFormat());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER, "UNK");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When wrong " + AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER
                        + " is specified, the  parameter should be set to  " + OutputFormat.getDefault(),
                OutputFormat.getDefault(), query.getFormat());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER, "json");
        query = builder.buildFromRequest(request);
        assertEquals(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER + " should be case insensitive  ",
                OutputFormat.JSON, query.getFormat());

        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER, "unsupported");
        query = builder.buildFromRequest(request);
        assertEquals(GisgraphyServlet.FORMAT_PARAMETER + " should set default if not supported  ",
                OutputFormat.getDefault(), query.getFormat());

        //test indent
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When no " + AbstractAddressServlet.INDENT_PARAMETER
                        + " is specified, the  parameter should be set to default indentation",
                AddressQuery.DEFAULT_INDENTATION, query.isIndent());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.INDENT_PARAMETER, "unk");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When wrong " + AbstractAddressServlet.INDENT_PARAMETER
                        + " is specified, the  parameter should be set to default value",
                AddressQuery.DEFAULT_INDENTATION, query.isIndent());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.INDENT_PARAMETER, "TrUe");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.INDENT_PARAMETER + " should be case insensitive  ", query.isIndent());
        // test 'on' value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.INDENT_PARAMETER, "On");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.INDENT_PARAMETER
                + " should be true for 'on' value (case insensitive and on value)  ", query.isIndent());

        //test postal
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertFalse("When no " + AbstractAddressServlet.POSTAL_PARAMETER
                + " is specified, the  parameter should be set to false", query.isPostal());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.POSTAL_PARAMETER, "unk");
        query = builder.buildFromRequest(request);
        assertFalse("When wrong " + AbstractAddressServlet.POSTAL_PARAMETER
                + " is specified, the  parameter should be set to false", query.isPostal());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.POSTAL_PARAMETER, "TrUe");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.POSTAL_PARAMETER + " should be case insensitive  ", query.isPostal());
        // test 'on' value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.POSTAL_PARAMETER, "On");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.POSTAL_PARAMETER
                + " should be true for 'on' value (case insensitive and on value)  ", query.isPostal());

        //test standardize
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertFalse("When no " + AbstractAddressServlet.STANDARDIZE_PARAMETER
                + " is specified, the  parameter should be set to false", query.isStandardize());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.STANDARDIZE_PARAMETER, "unk");
        query = builder.buildFromRequest(request);
        assertFalse("When wrong " + AbstractAddressServlet.STANDARDIZE_PARAMETER
                + " is specified, the  parameter should be set to false", query.isStandardize());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.STANDARDIZE_PARAMETER, "TrUe");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.STANDARDIZE_PARAMETER + " should be case insensitive  ",
                query.isStandardize());
        // test 'on' value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.STANDARDIZE_PARAMETER, "On");
        query = builder.buildFromRequest(request);
        assertTrue(
                AbstractAddressServlet.STANDARDIZE_PARAMETER
                        + " should be true for 'on' value (case insensitive and on value)  ",
                query.isStandardize());

        //callback not set
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertNull("callback should be null when not set", query.getCallback());

        //callback set with non alpha value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.CALLBACK_PARAMETER, "doit(");
        query = builder.buildFromRequest(request);
        assertNull("callback should not be set when not alphanumeric", query.getCallback());

        //callback set with alpha value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.CALLBACK_PARAMETER, "doit");
        query = builder.buildFromRequest(request);
        assertEquals("callback should not be set when alphanumeric", "doit", query.getCallback());

        //callback set with alpha value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.APIKEY_PARAMETER, "apiKEY");
        query = builder.buildFromRequest(request);
        assertEquals("api key Should Be set", "apiKEY", query.getApikey());

    }

    @Test
    public void buildStructuredFromRequest() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        MockHttpServletRequest request = new MockHttpServletRequest();
        AddressQuery query;
        //without parameters
        try {
            builder.buildFromRequest(request);
            Assert.fail("without parameters the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }
        //country
        //without country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        query = builder.buildFromRequest(request);
        Assert.assertNull("country parameter is not required", query.getCountry());
        Assert.assertEquals("address", query.getAddress());

        //with empty country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, " ");
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        query = builder.buildFromRequest(request);
        Assert.assertNull("with empty country equals to space, the builder should set countrycode to null",
                query.getCountry());
        Assert.assertEquals("address", query.getAddress());

        //with empty country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "");
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        query = builder.buildFromRequest(request);
        Assert.assertNull("with empty country , the builder should set countrycode to null", query.getCountry());
        Assert.assertEquals("address", query.getAddress());

        //address
        //without address
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "US");
        try {
            builder.buildFromRequest(request);
            Assert.fail("without address parameter or structured address the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }
        //with empty address
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, " ");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        try {
            builder.buildFromRequest(request);
            Assert.fail("with empty country equals to space, the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }

        //with empty country
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        try {
            builder.buildFromRequest(request);
            Assert.fail("with empty string the builder should throws");
        } catch (AddressParserException e) {
            //ignore
        }

        //all ok
        request = new MockHttpServletRequest();
        String city = "city";
        String houseNumber = "1";
        String streetName = "california street";
        request.setParameter(city, city);
        request.setParameter("houseNumber", houseNumber);
        request.setParameter("streetName", streetName);
        request.setParameter("NotExistingFieldName", "foo");
        request.setParameter("country", "france");
        request.setParameter("zipcode", "");//empty paramter should be ignored
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        StructuredAddressQuery structuredquery = (StructuredAddressQuery) builder.buildFromRequest(request);
        Address address = structuredquery.getStructuredAddress();
        Assert.assertEquals("us", structuredquery.getCountry());
        Assert.assertEquals(city, address.getCity());
        Assert.assertEquals(houseNumber, address.getHouseNumber());
        Assert.assertEquals(streetName, address.getStreetName());
        Assert.assertNull("empty paramter should be ignored", address.getZipCode());
        Assert.assertNull(address.getCountry());

        // test outputFormat
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When no " + AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER
                        + " is specified, the  parameter should be set to  " + OutputFormat.getDefault(),
                OutputFormat.getDefault(), query.getFormat());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER, "UNK");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When wrong " + AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER
                        + " is specified, the  parameter should be set to  " + OutputFormat.getDefault(),
                OutputFormat.getDefault(), query.getFormat());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER, "json");
        query = builder.buildFromRequest(request);
        assertEquals(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER + " should be case insensitive  ",
                OutputFormat.JSON, query.getFormat());

        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.OUTPUT_FORMAT_PARAMETER, "unsupported");
        query = builder.buildFromRequest(request);
        assertEquals(GisgraphyServlet.FORMAT_PARAMETER + " should set default if not supported  ",
                OutputFormat.getDefault(), query.getFormat());

        //test indent
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When no " + AbstractAddressServlet.INDENT_PARAMETER
                        + " is specified, the  parameter should be set to default indentation",
                AddressQuery.DEFAULT_INDENTATION, query.isIndent());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.INDENT_PARAMETER, "unk");
        query = builder.buildFromRequest(request);
        assertEquals(
                "When wrong " + AbstractAddressServlet.INDENT_PARAMETER
                        + " is specified, the  parameter should be set to default value",
                AddressQuery.DEFAULT_INDENTATION, query.isIndent());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.INDENT_PARAMETER, "TrUe");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.INDENT_PARAMETER + " should be case insensitive  ", query.isIndent());
        // test 'on' value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.INDENT_PARAMETER, "On");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.INDENT_PARAMETER
                + " should be true for 'on' value (case insensitive and on value)  ", query.isIndent());

        //test postal
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertFalse("When no " + AbstractAddressServlet.POSTAL_PARAMETER
                + " is specified, the  parameter should be set to false", query.isPostal());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.POSTAL_PARAMETER, "unk");
        query = builder.buildFromRequest(request);
        assertFalse("When wrong " + AbstractAddressServlet.POSTAL_PARAMETER
                + " is specified, the  parameter should be set to false", query.isPostal());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.POSTAL_PARAMETER, "TrUe");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.POSTAL_PARAMETER + " should be case insensitive  ", query.isPostal());
        // test 'on' value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.POSTAL_PARAMETER, "On");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.POSTAL_PARAMETER
                + " should be true for 'on' value (case insensitive and on value)  ", query.isPostal());

        //test standardize
        // with no value specified
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertFalse("When no " + AbstractAddressServlet.STANDARDIZE_PARAMETER
                + " is specified, the  parameter should be set to false", query.isStandardize());
        // with wrong value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.STANDARDIZE_PARAMETER, "unk");
        query = builder.buildFromRequest(request);
        assertFalse("When wrong " + AbstractAddressServlet.STANDARDIZE_PARAMETER
                + " is specified, the  parameter should be set to false", query.isStandardize());
        // test case sensitive
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.STANDARDIZE_PARAMETER, "TrUe");
        query = builder.buildFromRequest(request);
        assertTrue(AbstractAddressServlet.STANDARDIZE_PARAMETER + " should be case insensitive  ",
                query.isStandardize());
        // test 'on' value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.STANDARDIZE_PARAMETER, "On");
        query = builder.buildFromRequest(request);
        assertTrue(
                AbstractAddressServlet.STANDARDIZE_PARAMETER
                        + " should be true for 'on' value (case insensitive and on value)  ",
                query.isStandardize());

        //callback not set
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        query = builder.buildFromRequest(request);
        assertNull("callback should be null when not set", query.getCallback());

        //callback set with non alpha value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.CALLBACK_PARAMETER, "doit(");
        query = builder.buildFromRequest(request);
        assertNull("callback should not be set when not alphanumeric", query.getCallback());

        //callback set with alpha value
        request = new MockHttpServletRequest();
        request.setParameter(AbstractAddressServlet.ADDRESS_PARAMETER, "address");
        request.setParameter(AbstractAddressServlet.COUNTRY_PARAMETER, "us");
        request.setParameter(AbstractAddressServlet.CALLBACK_PARAMETER, "doit");
        query = builder.buildFromRequest(request);
        assertEquals("callback should not be set when alphanumeric", "doit", query.getCallback());

    }

    @Test
    public void buildAddressFromRequest() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        MockHttpServletRequest request = new MockHttpServletRequest();
        String city = "city";
        String houseNumber = "1";
        String streetName = "california street";
        request.setParameter(city, city);
        request.setParameter("houseNumber", houseNumber);
        request.setParameter("streetName", streetName);
        request.setParameter("NotExistingFieldName", "foo");
        request.setParameter("country", "france");
        Address address = builder.buildAddressFromRequest(request);
        Assert.assertEquals(city, address.getCity());
        Assert.assertEquals(houseNumber, address.getHouseNumber());
        Assert.assertEquals(streetName, address.getStreetName());
        Assert.assertNull(address.getCountry());
    }

    @Test
    public void buildAddressFromRequest_WithoutParameters() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.setParameter("NotExistingFieldName", "foo");
        Address address = builder.buildAddressFromRequest(request);
        Assert.assertNull(address);
    }

    @Test
    public void buildAddressFromRequest_WithOnlyCountryParameters() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.setParameter("country", "foo");
        Address address = builder.buildAddressFromRequest(request);
        Assert.assertNull(
                "country parameter is not really an address field, it is often the country parameter to geocode",
                address);
    }

    @Test
    public void getFieldNameFromParameter() {
        AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance();
        Assert.assertEquals("streetName", builder.getFieldNameFromParameter("streetName"));
        Assert.assertEquals("streetName", builder.getFieldNameFromParameter("streetname"));
        Assert.assertEquals("streetName", builder.getFieldNameFromParameter("STREETNAME"));
        Assert.assertNull(builder.getFieldNameFromParameter(null));
    }

}