package com.gisgraphy.importer; import java.util.ArrayList; import java.util.List; import net.sf.jstester.util.Assert; import org.easymock.EasyMock; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.gisgraphy.addressparser.format.BasicAddressFormater; import com.gisgraphy.domain.geoloc.entity.Adm; import com.gisgraphy.domain.repository.AdmDao; import com.gisgraphy.domain.repository.IAdmDao; import com.gisgraphy.domain.repository.IIdGenerator; import com.gisgraphy.domain.valueobject.GISSource; import com.gisgraphy.fulltext.AbstractIntegrationHttpSolrTestCase; public class OpenStreetMapAdmSimpleImporterTest extends AbstractIntegrationHttpSolrTestCase { private OpenStreetMapAdmSimpleImporter openStreetMapAdmSimpleImporter; private IAdmDao admDao; LabelGenerator generator = LabelGenerator.getInstance(); BasicAddressFormater formater = BasicAddressFormater.getInstance(); @Test public void testSetup(){ OpenStreetMapAdmSimpleImporter importer = new OpenStreetMapAdmSimpleImporter(); IIdGenerator idGenerator = EasyMock.createMock(IIdGenerator.class); idGenerator.sync(); EasyMock.replay(idGenerator); importer.setIdGenerator(idGenerator); importer.setup(); EasyMock.verify(idGenerator); } @Test public void testCalculateAdmLevel() { OpenStreetMapAdmSimpleImporter importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(2,importer.calculateAdmLevel("US",5)); Assert.assertEquals(2,importer.calculateAdmLevel("US",5)); Assert.assertEquals(3,importer.calculateAdmLevel("US",6)); Assert.assertEquals(4,importer.calculateAdmLevel("US",7)); Assert.assertEquals(5,importer.calculateAdmLevel("US",8)); Assert.assertEquals(5,importer.calculateAdmLevel("US",9)); importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(2,importer.calculateAdmLevel("US",6)); importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",3));//simulate an error Assert.assertEquals(2,importer.calculateAdmLevel("US",6)); importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(2,importer.calculateAdmLevel("US",6)); //different country, same level importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(2,importer.calculateAdmLevel("US",6)); Assert.assertEquals(1,importer.calculateAdmLevel("FR",6)); //different country, level < importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(2,importer.calculateAdmLevel("US",6)); Assert.assertEquals(1,importer.calculateAdmLevel("FR",5)); //different country, level > importer = new OpenStreetMapAdmSimpleImporter(); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(1,importer.calculateAdmLevel("US",4)); Assert.assertEquals(2,importer.calculateAdmLevel("US",6)); Assert.assertEquals(1,importer.calculateAdmLevel("FR",7)); } @Test public void testSetParent(){ List<AdmDTO> adms = new ArrayList<AdmDTO>(); AdmDTO admDTO1 = new AdmDTO("Paris", 4, 71525L); AdmDTO admDTO2 = new AdmDTO("Île-de-France", 6, 8649L); AdmDTO admDTO3 = new AdmDTO("Paris", 7, 1641193L); adms.add(admDTO1); adms.add(admDTO2); adms.add(admDTO3); Adm adm = new Adm(5); Adm admParent = new Adm(4); OpenStreetMapAdmSimpleImporter importer = new OpenStreetMapAdmSimpleImporter(); AdmDao admDao = EasyMock.createMock(AdmDao.class); EasyMock.expect(admDao.getByOpenStreetMapId(1641193L)).andReturn(admParent); EasyMock.replay(admDao); importer.setAdmDao(admDao); importer.setParent(adm, adms); Assert.assertEquals(admParent, adm.getParent()); EasyMock.verify(admDao); } @Test public void testSetParent_WrongLevel(){ List<AdmDTO> adms = new ArrayList<AdmDTO>(); AdmDTO admDTO1 = new AdmDTO("Paris", 4, 71525L); adms.add(admDTO1); Adm adm = new Adm(5); Adm admParent = new Adm(5);//set osm level != the dto one OpenStreetMapAdmSimpleImporter importer = new OpenStreetMapAdmSimpleImporter(); AdmDao admDao = EasyMock.createMock(AdmDao.class); EasyMock.expect(admDao.getByOpenStreetMapId(71525L)).andReturn(admParent); EasyMock.replay(admDao); importer.setAdmDao(admDao); importer.setParent(adm, adms); Assert.assertEquals(null, adm.getParent()); } @Test public void testSetParent_noParentFound(){ List<AdmDTO> adms = new ArrayList<AdmDTO>(); Adm adm = new Adm(4); OpenStreetMapAdmSimpleImporter importer = new OpenStreetMapAdmSimpleImporter(); importer.setParent(adm, adms); Assert.assertEquals(null, adm.getParent()); } @Test public void testProcess(){ openStreetMapAdmSimpleImporter.process(); long nbAdm = admDao.count(); Assert.assertEquals("adm level 8 should not be imported",3, nbAdm); Adm adm1 = admDao.getByOpenStreetMapId(90348l); //Assert.assertEquals(2, adm1.getChildren().size()); Assert.assertNull(adm1.getParent()); Assert.assertEquals("Wallonie", adm1.getName()); Assert.assertEquals("BE", adm1.getCountryCode()); Assert.assertEquals("BE", adm1.getCountryCode()); Assert.assertEquals(90348l, adm1.getOpenstreetmapId().longValue()); Assert.assertNotNull(adm1.getShape()); Assert.assertNotNull(adm1.getLocation()); Assert.assertEquals(21, adm1.getAlternateNames().size()); Assert.assertEquals(generator.generateLabel(adm1), adm1.getLabel()); Assert.assertNotNull(adm1.getLabel()); Assert.assertNotNull(adm1.getFullyQualifiedName()); Assert.assertEquals(generator.generateLabel(adm1), adm1.getFullyQualifiedName()); Assert.assertNotNull(adm1.getFeatureId()); Assert.assertEquals(GISSource.OSM, adm1.getSource()); Adm adm2 = admDao.getByOpenStreetMapId(1412581l); Assert.assertEquals(2, adm2.getLevel().intValue()); Assert.assertNotNull(adm2.getParent().getOpenstreetmapId()); Assert.assertEquals("Wallonie", adm2.getAdm1Name()); Assert.assertEquals("departement", adm2.getAmenity()); } @Autowired public void setOpenStreetMapAdmSimpleImporter( OpenStreetMapAdmSimpleImporter openStreetMapAdmSimpleImporter) { this.openStreetMapAdmSimpleImporter = openStreetMapAdmSimpleImporter; } @Autowired public void setAdmDao(IAdmDao admDao) { this.admDao = admDao; } }