package com.gisgraphy.reversegeocoding;
import static com.gisgraphy.reversegeocoding.ReverseGeocodingService.DEFAULT_STREET_RADIUS;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import com.gisgraphy.addressparser.Address;
import com.gisgraphy.addressparser.AddressResultsDto;
import com.gisgraphy.domain.geoloc.entity.City;
import com.gisgraphy.domain.geoloc.entity.HouseNumber;
import com.gisgraphy.domain.geoloc.entity.OpenStreetMap;
import com.gisgraphy.domain.repository.ICityDao;
import com.gisgraphy.domain.repository.IOpenStreetMapDao;
import com.gisgraphy.helper.GeolocHelper;
import com.gisgraphy.service.IStatsUsageService;
import com.gisgraphy.service.impl.StatsUsageServiceImpl;
import com.gisgraphy.stats.StatsUsageType;
import com.gisgraphy.test.GisgraphyTestHelper;
import com.vividsolutions.jts.geom.Point;
public class ReverseGeocodingServiceTest {
@Test
public void testExecuteQuery_RoadWithHouseNumber() {
Point searchPoint = GeolocHelper.createPoint(2D, 3D);
ReverseGeocodingQuery query = new ReverseGeocodingQuery(searchPoint);
ReverseGeocodingService reverseGeocodingService = new ReverseGeocodingService();
IStatsUsageService statsService = EasyMock.createMock(StatsUsageServiceImpl.class);
statsService.increaseUsage(StatsUsageType.REVERSEGEOCODING);
EasyMock.replay(statsService);
IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class);
OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet();
String number = "2";
HouseNumber houseNumber = new HouseNumber(number,GeolocHelper.createPoint(3D, 4D));
String name = "houseName";
houseNumber.setName(name);
osm.addHouseNumber(houseNumber);;
EasyMock.expect(openStreetMapDao.getNearestRoadFrom(searchPoint,DEFAULT_STREET_RADIUS)).andReturn(osm );
EasyMock.replay(openStreetMapDao);
//com.gisgraphy.reversegeocoding.AddressHelper addressHelper = EasyMock.createMock(AddressHelper.class);
/*HouseNumberDistance houseNumberDistance = new HouseNumberDistance(houseNumber, 3D);
EasyMock.expect(addressHelper.getNearestHouse(osm.getHouseNumbers(), query.getPoint())).andReturn(houseNumberDistance);
Address address = new Address();
address.setStreetName("streetName");
EasyMock.expect(addressHelper.buildAddressFromHouseNumberDistance(houseNumberDistance )).andReturn(new AddressHelper().buildAddressFromHouseNumberDistance(houseNumberDistance));
EasyMock.replay(addressHelper);*/
reverseGeocodingService.openStreetMapDao =openStreetMapDao;
reverseGeocodingService.statsUsageService = statsService;
//reverseGeocodingService.addressHelper = addressHelper;
AddressResultsDto addressResultsDto = reverseGeocodingService.executeQuery(query);
Assert.assertNotNull(addressResultsDto.getQTime());
Assert.assertNotNull(addressResultsDto.getResult());
Assert.assertEquals(1,addressResultsDto.getResult().size());
//Assert.assertEquals(new AddressHelper().buildAddressFromHouseNumberDistance(houseNumberDistance), addressResultsDto.getResult().get(0));
Assert.assertTrue(addressResultsDto.getResult().get(0).getFormatedFull().contains("2"));
EasyMock.verify(statsService);
EasyMock.verify(openStreetMapDao);
//EasyMock.verify(addressHelper);
}
@Test
public void testExecuteQuery_RoadWithoutHouseNumber() {
Point searchPoint = GeolocHelper.createPoint(2D, 3D);
ReverseGeocodingQuery query = new ReverseGeocodingQuery(searchPoint);
ReverseGeocodingService reverseGeocodingService = new ReverseGeocodingService();
IStatsUsageService statsService = EasyMock.createMock(StatsUsageServiceImpl.class);
statsService.increaseUsage(StatsUsageType.REVERSEGEOCODING);
EasyMock.replay(statsService);
IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class);
OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet();
EasyMock.expect(openStreetMapDao.getNearestRoadFrom(searchPoint,DEFAULT_STREET_RADIUS)).andReturn(osm );
EasyMock.replay(openStreetMapDao);
// AddressHelper addressHelper = EasyMock.createMock(AddressHelper.class);
/*Address address = new Address();
address.setStreetName("streetName");
EasyMock.expect(addressHelper.buildAddressFromOpenstreetMapAndPoint(osm,query.getPoint())).andReturn(address);
EasyMock.replay(addressHelper);*/
reverseGeocodingService.openStreetMapDao =openStreetMapDao;
reverseGeocodingService.statsUsageService = statsService;
//reverseGeocodingService.addressHelper = addressHelper;
AddressResultsDto addressResultsDto = reverseGeocodingService.executeQuery(query);
Assert.assertNotNull(addressResultsDto.getQTime());
Assert.assertNotNull(addressResultsDto.getResult());
Assert.assertEquals(1,addressResultsDto.getResult().size());
Assert.assertNotNull(addressResultsDto.getResult().get(0));
EasyMock.verify(statsService);
EasyMock.verify(openStreetMapDao);
// EasyMock.verify(addressHelper);
}
@Test
public void testExecuteQuery_NoRoadfound_streetfound() {
Point searchPoint = GeolocHelper.createPoint(2D, 3D);
ReverseGeocodingQuery query = new ReverseGeocodingQuery(searchPoint);
ReverseGeocodingService reverseGeocodingService = new ReverseGeocodingService();
IStatsUsageService statsService = EasyMock.createMock(StatsUsageServiceImpl.class);
statsService.increaseUsage(StatsUsageType.REVERSEGEOCODING);
EasyMock.replay(statsService);
IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class);
OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet();
/*Address address = new Address();
address.setStreetName("streetName");
AddressHelper addressHelper = EasyMock.createMock(AddressHelper.class);
EasyMock.expect(addressHelper.buildAddressFromOpenstreetMapAndPoint(osm,query.getPoint())).andReturn(address);
EasyMock.replay(addressHelper);*/
EasyMock.expect(openStreetMapDao.getNearestRoadFrom(searchPoint,DEFAULT_STREET_RADIUS)).andReturn(null);
EasyMock.expect(openStreetMapDao.getNearestFrom(searchPoint)).andReturn(osm);
EasyMock.replay(openStreetMapDao);
reverseGeocodingService.openStreetMapDao =openStreetMapDao;
reverseGeocodingService.statsUsageService = statsService;
//reverseGeocodingService.addressHelper = addressHelper;
AddressResultsDto addressResultsDto = reverseGeocodingService.executeQuery(query);
Assert.assertNotNull(addressResultsDto.getQTime());
Assert.assertNotNull(addressResultsDto.getResult());
Assert.assertEquals(1,addressResultsDto.getResult().size());
Assert.assertNotNull(addressResultsDto.getResult().get(0));
EasyMock.verify(statsService);
EasyMock.verify(openStreetMapDao);
}
@Test
public void testExecuteQuery_noRoadfound_nostreetfound_cityByVicinityFound() {
Point searchPoint = GeolocHelper.createPoint(2D, 3D);
ReverseGeocodingQuery query = new ReverseGeocodingQuery(searchPoint);
ReverseGeocodingService reverseGeocodingService = new ReverseGeocodingService();
IStatsUsageService statsService = EasyMock.createMock(StatsUsageServiceImpl.class);
statsService.increaseUsage(StatsUsageType.REVERSEGEOCODING);
EasyMock.replay(statsService);
IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class);
OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet();
City city = new City();
city.setName("city");
/*Address address = new Address();
address.setStreetName("streetName");
AddressHelper addressHelper = EasyMock.createMock(AddressHelper.class);
EasyMock.expect(addressHelper.buildAddressFromCityAndPoint(city, searchPoint)).andReturn(address);
EasyMock.replay(addressHelper);*/
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
EasyMock.expect(cityDao.getByShape(searchPoint, null, false)).andReturn(null);
EasyMock.expect(cityDao.getNearest(searchPoint, null, false, ReverseGeocodingService.DEFAULT_CITY_RADIUS)).andReturn(city);
EasyMock.replay(cityDao);
EasyMock.expect(openStreetMapDao.getNearestRoadFrom(searchPoint,DEFAULT_STREET_RADIUS)).andReturn(null);
EasyMock.expect(openStreetMapDao.getNearestFrom(searchPoint)).andReturn(null);
EasyMock.replay(openStreetMapDao);
reverseGeocodingService.openStreetMapDao =openStreetMapDao;
reverseGeocodingService.statsUsageService = statsService;
//reverseGeocodingService.addressHelper = addressHelper;
reverseGeocodingService.cityDao= cityDao;
AddressResultsDto addressResultsDto = reverseGeocodingService.executeQuery(query);
Assert.assertNotNull(addressResultsDto.getQTime());
Assert.assertNotNull(addressResultsDto.getResult());
Assert.assertEquals(1,addressResultsDto.getResult().size());
EasyMock.verify(statsService);
EasyMock.verify(cityDao);
//EasyMock.verify(addressHelper);
EasyMock.verify(openStreetMapDao);
}
@Test
public void testExecuteQuery_noRoadfound_nostreetfound_cityByShapeFound() {
Point searchPoint = GeolocHelper.createPoint(2D, 3D);
ReverseGeocodingQuery query = new ReverseGeocodingQuery(searchPoint);
ReverseGeocodingService reverseGeocodingService = new ReverseGeocodingService();
IStatsUsageService statsService = EasyMock.createMock(StatsUsageServiceImpl.class);
statsService.increaseUsage(StatsUsageType.REVERSEGEOCODING);
EasyMock.replay(statsService);
IOpenStreetMapDao openStreetMapDao = EasyMock.createMock(IOpenStreetMapDao.class);
OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet();
City city = new City();
city.setName("city");
/*Address address = new Address();
address.setStreetName("streetName");
AddressHelper addressHelper = EasyMock.createMock(AddressHelper.class);
EasyMock.expect(addressHelper.buildAddressFromCityAndPoint(city, searchPoint)).andReturn(address);
EasyMock.replay(addressHelper);*/
ICityDao cityDao = EasyMock.createMock(ICityDao.class);
EasyMock.expect(cityDao.getByShape(searchPoint, null, false)).andReturn(city);
EasyMock.replay(cityDao);
EasyMock.expect(openStreetMapDao.getNearestRoadFrom(searchPoint,DEFAULT_STREET_RADIUS)).andReturn(null);
EasyMock.expect(openStreetMapDao.getNearestFrom(searchPoint)).andReturn(null);
EasyMock.replay(openStreetMapDao);
reverseGeocodingService.openStreetMapDao =openStreetMapDao;
reverseGeocodingService.statsUsageService = statsService;
//reverseGeocodingService.addressHelper = addressHelper;
reverseGeocodingService.cityDao= cityDao;
AddressResultsDto addressResultsDto = reverseGeocodingService.executeQuery(query);
Assert.assertNotNull(addressResultsDto.getQTime());
Assert.assertNotNull(addressResultsDto.getResult());
Assert.assertEquals(1,addressResultsDto.getResult().size());
EasyMock.verify(statsService);
EasyMock.verify(cityDao);
//EasyMock.verify(addressHelper);
EasyMock.verify(openStreetMapDao);
}
}