package com.gisgraphy.addressparser.web; import static org.junit.Assert.assertEquals; 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.AddressQuery; import com.gisgraphy.addressparser.exception.AddressParserException; import com.gisgraphy.serializer.OutputFormat; import com.gisgraphy.servlet.GisgraphyServlet; public class AddressQueryHttpBuilderTest { @Test public void buildFromRequest(){ AddressQueryHttpBuilder builder = AddressQueryHttpBuilder.getInstance(); MockHttpServletRequest request = new MockHttpServletRequest(); //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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); try { builder.buildFromRequest(request); Assert.fail("without coutry parameter the builder should throws"); } catch (AddressParserException e) { //ignore } //with empty country request = new MockHttpServletRequest(); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, " "); request.setParameter(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); 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(AbstractAddressParserServlet.COUNTRY_PARAMETER, ""); request.setParameter(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); try { builder.buildFromRequest(request); Assert.fail("with empty string the builder should throws"); } catch (AddressParserException e) { //ignore } //address //without address request = new MockHttpServletRequest(); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "US"); try { builder.buildFromRequest(request); Assert.fail("without coutry parameter the builder should throws"); } catch (AddressParserException e) { //ignore } //with empty address request = new MockHttpServletRequest(); request.setParameter(AbstractAddressParserServlet.ADDRESS_PARAMETER, " "); request.setParameter(AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, ""); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); try { builder.buildFromRequest(request); Assert.fail("with empty string the builder should throws"); } catch (AddressParserException e) { //ignore } //with too long address country request = new MockHttpServletRequest(); String tooLongAddress = RandomStringUtils.random(AbstractAddressParserServlet.QUERY_MAX_LENGTH+1); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); AddressQuery 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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); query = builder.buildFromRequest(request); assertEquals("When no " + AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.OUTPUT_FORMAT_PARAMETER, "UNK"); query =builder.buildFromRequest(request); assertEquals("When wrong " + AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.OUTPUT_FORMAT_PARAMETER, "json"); query =builder.buildFromRequest(request); assertEquals(AbstractAddressParserServlet.OUTPUT_FORMAT_PARAMETER + " should be case insensitive ", OutputFormat.JSON, query .getFormat()); request = new MockHttpServletRequest(); request.setParameter(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); query =builder.buildFromRequest(request); assertEquals("When no " + AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.INDENT_PARAMETER, "unk"); query =builder.buildFromRequest(request); assertEquals("When wrong " + AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.INDENT_PARAMETER, "TrUe"); query =builder.buildFromRequest(request); assertTrue(AbstractAddressParserServlet.INDENT_PARAMETER + " should be case insensitive ", query.isIndent()); // test 'on' value request = new MockHttpServletRequest(); request.setParameter(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.INDENT_PARAMETER, "On"); query =builder.buildFromRequest(request); assertTrue( AbstractAddressParserServlet.INDENT_PARAMETER + " should be true for 'on' value (case insensitive and on value) ", query.isIndent()); //callback not set request = new MockHttpServletRequest(); request.setParameter(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.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(AbstractAddressParserServlet.ADDRESS_PARAMETER, "address"); request.setParameter(AbstractAddressParserServlet.COUNTRY_PARAMETER, "us"); request.setParameter(AbstractAddressParserServlet.CALLBACK_PARAMETER, "doit"); query =builder.buildFromRequest(request); assertEquals("callback should not be set when alphanumeric", "doit",query.getCallback()); } }