/******************************************************************************* * 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.domain.geoloc.entity; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.junit.Assert; import org.junit.Test; import org.reflections.Reflections; import org.springframework.beans.factory.annotation.Autowired; import com.gisgraphy.domain.repository.ICityDao; import com.gisgraphy.domain.repository.ICountryDao; import com.gisgraphy.fulltext.AbstractIntegrationHttpSolrTestCase; import com.gisgraphy.helper.GeolocHelper; import com.gisgraphy.test.GisgraphyTestHelper; import com.vividsolutions.jts.geom.Point; public class GisFeatureTest extends AbstractIntegrationHttpSolrTestCase { private ICountryDao countryDao; private ICityDao cityDao; @Test public void CheckAllEntitiesHasTheirPlacetype(){ Reflections reflections = new Reflections("com.gisgraphy.domain.geoloc.entity"); Set<Class<? extends Object>> allClasses = reflections.getSubTypesOf(Object.class); for (Class c: allClasses){ System.out.println(c); } } @Test public void testAddAlternateNamesShouldNotAddTooLongAlternateNames() { GisFeature gisFeature = GisgraphyTestHelper .createGisFeatureWithAlternateNames("toto", 3); List<AlternateName> alternateNames = new ArrayList<AlternateName>(); AlternateName a1 = new AlternateName(); a1.setName(StringUtils.repeat("a", GisFeature.MAX_ALTERNATENAME_SIZE+1)); AlternateName a2 = new AlternateName(); a2.setName("bar"); alternateNames.add(a1); alternateNames.add(a2); gisFeature.addAlternateNames(alternateNames); Assert.assertEquals("The long alternateName should not be added",4, gisFeature.getAlternateNames().size()); } @Test public void testAddAlternateNamesShouldAddChildrenAndNotReplace() { GisFeature gisFeature = GisgraphyTestHelper .createGisFeatureWithAlternateNames("toto", 3); List<AlternateName> alternateNames = new ArrayList<AlternateName>(); AlternateName a1 = new AlternateName(); a1.setName("foo"); AlternateName a2 = new AlternateName(); a2.setName("bar"); alternateNames.add(a1); alternateNames.add(a2); gisFeature.addAlternateNames(alternateNames); assertEquals(5, gisFeature.getAlternateNames().size()); } @Test public void testAddAlternateNamesShouldNotHaveDuplicates() { GisFeature gisFeature = GisgraphyTestHelper .createGisFeatureWithAlternateNames("toto", 3); AlternateName a1 = new AlternateName(); a1.setName("foo"); AlternateName a2 = new AlternateName(); a2.setName("foo"); gisFeature.addAlternateName(a1); gisFeature.addAlternateName(a2); assertEquals(4, gisFeature.getAlternateNames().size()); } @Test public void testAddAlternateNamesShouldDoADoubleSet() { GisFeature gisFeature = GisgraphyTestHelper .createGisFeatureWithAlternateNames("toto", 3); List<AlternateName> alternateNames = new ArrayList<AlternateName>(); AlternateName a1 = new AlternateName(); a1.setName("foo"); AlternateName a2 = new AlternateName(); a2.setName("bar"); alternateNames.add(a2); alternateNames.add(a1); gisFeature.addAlternateNames(alternateNames); assertEquals(5, gisFeature.getAlternateNames().size()); for (AlternateName alternateName : gisFeature.getAlternateNames()) { assertEquals(gisFeature, alternateName.getGisFeature()); } } @Test public void testSetFeatureClassShouldAlwaysSetInUpperCase() { GisFeature gisFeature = new GisFeature(); gisFeature.setFeatureClass("a"); assertEquals("A", gisFeature.getFeatureClass()); } @Test public void testSetFeatureCodeShouldAlwaysSetInUpperCase() { GisFeature gisFeature = new GisFeature(); gisFeature.setFeatureCode("a"); assertEquals("A", gisFeature.getFeatureCode()); } @Test public void testSetFeatureClassWithNullValueShouldNotThrow() { GisFeature gisFeature = new GisFeature(); try { gisFeature.setFeatureClass(null); } catch (RuntimeException e) { fail("setting a null feture class should not throw"); } } @Test public void testSetFeatureCodeWithNullShouldnotThrow() { GisFeature gisFeature = new GisFeature(); try { gisFeature.setFeatureCode(null); } catch (RuntimeException e) { fail("setting a null feature code should not throw"); } } @Test public void testGetCountryShouldReturnTheCountry() { /*Country country = GisgraphyTestHelper.createCountryForFrance(); Country savedCountry = this.countryDao.save(country); assertNotNull(savedCountry.getId());*/ GisFeature gisFeature = GisgraphyTestHelper.createCity("cityGisFeature", null, null, new Random().nextLong()); City paris = new City(gisFeature); paris.setCountryCode("FR"); // save city //City savedParis = this.cityDao.save(paris); // chek city is well saved //City retrievedParis = this.cityDao.get(savedParis.getId()); //assertNotNull(retrievedParis); //assertEquals(paris.getId(), retrievedParis.getId()); String retrievedCountry = paris.getCountry(); assertEquals("France", retrievedCountry); } @Test public void testGetCountryShouldReturnNullIfNoCountryCodeisSpecified() { Country country = GisgraphyTestHelper.createCountryForFrance(); Country savedCountry = this.countryDao.save(country); assertNotNull(savedCountry.getId()); GisFeature gisFeature = GisgraphyTestHelper.createCity("cityGisFeature", null, null, new Random().nextLong()); City paris = new City(gisFeature); paris.setCountryCode(null); String retrievedCountry = paris.getCountry(); assertNull(retrievedCountry); } @Test public void testGetCountryShouldReturnNullIfUnknowCountryCode() { Country country = GisgraphyTestHelper.createCountryForFrance(); Country savedCountry = this.countryDao.save(country); assertNotNull(savedCountry.getId()); GisFeature gisFeature = GisgraphyTestHelper.createCity("cityGisFeature", null, null, new Random().nextLong()); City paris = new City(gisFeature); paris.setCountryCode("JJ"); String retrievedCountry = paris.getCountry(); assertNull(retrievedCountry); } @Test public void testDistanceShouldRetrunCorrectDistance() { GisFeature point1 = new GisFeature(); point1.setLocation(GisgraphyTestHelper.createPoint(48.867F, 2.333F)); GisFeature point2 = new GisFeature(); point2.setLocation(GisgraphyTestHelper.createPoint(49.017F, 2.467F)); assertEquals(Math.round(point1.distanceTo(point2.getLocation())), Math .round(point2.distanceTo(point1.getLocation()))); assertEquals(22, Math .round(point2.distanceTo(point1.getLocation()) / 1000)); } public void testDistanceShouldHaveCorrectParameters() { GisFeature point1 = new GisFeature(); point1.setLocation(GisgraphyTestHelper.createPoint(0F, 0F)); try { point1.distanceTo(null); fail("Distance for a null feature must throws"); } catch (RuntimeException e) { } GisFeature point2 = new GisFeature(); // point2.setLocation(this.geolocTestHelper.createPoint(1F, 1F)); try { point1.distanceTo(point2.getLocation()); fail("Distance with a null location must throws"); } catch (RuntimeException e) { } point1.setLocation(null); try { point1.distanceTo(point2.getLocation()); fail("Distance with a null location must throws"); } catch (RuntimeException e) { } } @Test public void testPopulateAcityShouldsetZipCode() { City city1 = GisgraphyTestHelper.createCity("name", 1.5F, 1.6F, 2L); city1.addZipCode(new ZipCode("10000")); City city2 = new City(); city2.populate(city1); for (ZipCode zipcode : city1.getZipCodes()) assertTrue("Populate a city with a city should set the zipcode", city2.getZipCodes().contains(zipcode)); } @Test public void testToStringShouldContainsTheClassName() { City city1 = GisgraphyTestHelper.createCity("name", 1.5F, 1.6F, 2L); city1.addZipCode(new ZipCode("10000")); assertTrue(city1.toString().startsWith(City.class.getSimpleName())); } @Test public void testAddZipCodesShouldDoADoubleSet(){ GisFeature gisFeature = new GisFeature(); gisFeature.setFeatureId(3L); ZipCode zipCode1 = new ZipCode("zip1"); ZipCode zipCode2 = new ZipCode("zip2"); List<ZipCode> zipCodes = new ArrayList<ZipCode>(); zipCodes.add(zipCode1); zipCodes.add(zipCode2); gisFeature.addZipCodes(zipCodes); Assert.assertEquals("all the zipcodes of the list should be added",zipCodes.size(), gisFeature.getZipCodes().size()); Assert.assertTrue("zipCode1 is missing", gisFeature.getZipCodes().contains(zipCode1)); Assert.assertTrue("zipCode2 is missing", gisFeature.getZipCodes().contains(zipCode2)); Assert.assertEquals("A double set should be done, gisfeature should be set in the the zipCode entity", gisFeature.getFeatureId(), gisFeature.getZipCodes().iterator().next().getGisFeature().getFeatureId() ); } @Test public void testAddZipCodeShouldDoADoubleSet(){ GisFeature gisFeature = new GisFeature(); gisFeature.setFeatureId(3L); ZipCode zipCode1 = new ZipCode("zip2"); gisFeature.addZipCode(zipCode1); Assert.assertEquals("all the zipcodes of the list should be added",1, gisFeature.getZipCodes().size()); Assert.assertTrue("zipCode1 is missing", gisFeature.getZipCodes().contains(zipCode1)); Assert.assertEquals("A double set should be done, gisfeature should be set in the the zipCode entity", gisFeature.getFeatureId(), gisFeature.getZipCodes().iterator().next().getGisFeature().getFeatureId() ); } @Test public void getAdminCentreLocation(){ Point p =GeolocHelper.createPoint(2D, 3D); GisFeature feature = new GisFeature(); feature.setAdminCentreLocation(p); Assert.assertEquals(p.getX(), feature.getAdminCentreLongitude(),0.001); Assert.assertEquals(p.getY(), feature.getAdminCentreLatitude(),0.001); } @Test public void setAdmName (){ GisFeature g = new GisFeature(); g.setAdmName(1, "adm1name"); Assert.assertEquals("adm1name",g.getAdm1Name()); g.setAdmName(2, "adm2name"); Assert.assertEquals("adm2name",g.getAdm2Name()); g.setAdmName(3, "adm3name"); Assert.assertEquals("adm3name",g.getAdm3Name()); g.setAdmName(4, "adm4name"); Assert.assertEquals("adm4name",g.getAdm4Name()); g.setAdmName(5, "adm5name"); Assert.assertEquals("adm5name",g.getAdm5Name()); //silently ignore wrong level g.setAdmName(6, "adm6name"); g.setAdmName(0, "adm0name"); } @Autowired public void setCityDao(ICityDao cityDao) { this.cityDao = cityDao; } @Autowired public void setCountryDao(ICountryDao countryDao) { this.countryDao = countryDao; } }