/******************************************************************************* * 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.service.fulltextsearch; import static com.gisgraphy.domain.valueobject.Pagination.paginate; import java.util.List; import javax.annotation.Resource; import org.junit.Test; import com.gisgraphy.domain.geoloc.entity.Adm; import com.gisgraphy.domain.geoloc.entity.AlternateName; import com.gisgraphy.domain.geoloc.entity.City; import com.gisgraphy.domain.geoloc.entity.Country; import com.gisgraphy.domain.geoloc.entity.Language; import com.gisgraphy.domain.repository.IAdmDao; import com.gisgraphy.domain.repository.ICountryDao; import com.gisgraphy.domain.repository.ILanguageDao; import com.gisgraphy.domain.valueobject.AlternateNameSource; import com.gisgraphy.domain.valueobject.FulltextResultsDto; import com.gisgraphy.domain.valueobject.Output; import com.gisgraphy.domain.valueobject.Pagination; import com.gisgraphy.domain.valueobject.SolrResponseDto; import com.gisgraphy.domain.valueobject.Output.OutputStyle; import com.gisgraphy.helper.URLUtils; import com.gisgraphy.serializer.OutputFormat; import com.gisgraphy.test.GeolocTestHelper; public class SolrUnmarshallerTest extends AbstractIntegrationHttpSolrTestCase { @Resource private GeolocTestHelper geolocTestHelper; @Resource private ICountryDao countryDao; @Resource private ILanguageDao languageDao; @Resource private IAdmDao admDao; @Test public void testUnmarshallSolrDocumentShouldReallyUnmarshall() { Long featureId = 1002L; City city = geolocTestHelper .createAndSaveCityWithFullAdmTreeAndCountry(featureId); this.solRSynchroniser.commit(); Pagination pagination = paginate().from(1).to(10); Output output = Output.withFormat(OutputFormat.XML).withLanguageCode( "FR").withStyle(OutputStyle.FULL).withIndentation(); FulltextQuery query = new FulltextQuery(city.getName(), pagination, output, null, null); FulltextResultsDto response = this.fullTextSearchEngine .executeQuery(query); List<SolrResponseDto> results = response.getResults(); assertNotNull( "There should have a result for a fulltextSearch for " + city.getName() + " and even If no results are return: an empty list should be return, not null ", results); assertTrue("There should have a result for a fulltextSearch for " + city.getName(), results.size() == 1); SolrResponseDto result = results.get(0); assertEquals(city.getName(), result.getName()); assertEquals(city.getFeatureId(), result.getFeature_id()); assertEquals(city.getFeatureClass(), result.getFeature_class()); assertEquals(city.getFeatureCode(), result.getFeature_code()); assertEquals(city.getAsciiName(), result.getName_ascii()); assertEquals(city.getElevation(), result.getElevation()); assertEquals(city.getGtopo30(), result.getGtopo30()); assertEquals(city.getTimezone(), result.getTimezone()); assertEquals(city.getFullyQualifiedName(false), result .getFully_qualified_name()); assertEquals(city.getClass().getSimpleName(), result.getPlacetype()); assertEquals(city.getPopulation(), result.getPopulation()); assertEquals(city.getLatitude(), result.getLat()); assertEquals(city.getLongitude(), result.getLng()); assertEquals(city.getAdm1Code(), result.getAdm1_code()); assertEquals(city.getAdm2Code(), result.getAdm2_code()); assertEquals(city.getAdm3Code(), result.getAdm3_code()); assertEquals(city.getAdm4Code(), result.getAdm4_code()); assertEquals(city.getAdm1Name(), result.getAdm1_name()); assertEquals(city.getAdm2Name(), result.getAdm2_name()); assertEquals(city.getAdm3Name(), result.getAdm3_name()); assertEquals(city.getAdm4Name(), result.getAdm4_name()); assertEquals(city.getZipCodes().get(0).getCode(), result.getZipcodes().get(0)); assertEquals(city.getZipCodes().get(1).getCode(), result.getZipcodes().get(1)); assertEquals(city.getCountry().getName(), result.getCountry_name()); assertEquals(URLUtils.createGoogleMapUrl(city.getLocation(), city .getName()), result.getGoogle_map_url()); assertEquals(URLUtils.createCountryFlagUrl(city.getCountryCode()), result.getCountry_flag_url()); assertEquals(URLUtils.createYahooMapUrl(city.getLocation()), result .getYahoo_map_url()); assertEquals(1, result.getName_alternates().size()); assertEquals("cityalternate", result.getName_alternates().get(0)); assertEquals(1, result.getName_alternates_localized().size()); assertEquals("cityalternateFR", result.getName_alternates_localized() .get("FR").get(0)); assertEquals(2, result.getAdm1_names_alternate().size()); assertEquals(city.getAdm().getParent().getParent().getAlternateNames() .get(0).getName(), result.getAdm1_names_alternate().get(0)); assertEquals("admGGPalternate2", result.getAdm1_names_alternate() .get(1)); assertEquals(1, result.getAdm2_names_alternate().size()); assertEquals(city.getAdm().getParent().getAlternateNames().get(0) .getName(), result.getAdm2_names_alternate().get(0)); assertEquals(1, result.getCountry_names_alternate().size()); assertEquals(city.getCountry().getAlternateNames().get(0).getName(), result.getCountry_names_alternate().get(0)); assertEquals(1, result.getCountry_names_alternate_localized().size()); assertEquals("franciaFR", result.getCountry_names_alternate_localized() .get("FR").get(0)); assertEquals(1, result.getAdm1_names_alternate_localized().size()); assertEquals("admGGPalternateFR", result .getAdm1_names_alternate_localized().get("FR").get(0)); assertEquals(1, result.getAdm2_names_alternate_localized().size()); assertEquals("admGPalternateFR", result .getAdm2_names_alternate_localized().get("FR").get(0)); } @Test public void testUnmarshallSolrDocumentShouldReallyUnmarshallCountry() { Country country = geolocTestHelper .createFullFilledCountry(); Language lang = new Language("french", "FR", "FRA"); Language savedLang = languageDao.save(lang); Language retrievedLang = languageDao.get(savedLang.getId()); assertEquals(savedLang, retrievedLang); country.addSpokenLanguage(lang); AlternateName alternateNameLocalized = new AlternateName("alternateFR",AlternateNameSource.ALTERNATENAMES_FILE); alternateNameLocalized.setLanguage("FR"); AlternateName alternateName = new AlternateName("alternate",AlternateNameSource.ALTERNATENAMES_FILE); country.addAlternateName(alternateName); country.addAlternateName(alternateNameLocalized); countryDao.save(country); this.solRSynchroniser.commit(); Pagination pagination = paginate().from(1).to(10); Output output = Output.withFormat(OutputFormat.XML).withLanguageCode( "FR").withStyle(OutputStyle.FULL).withIndentation(); FulltextQuery query = new FulltextQuery(country.getName(), pagination, output, null, null); FulltextResultsDto response = this.fullTextSearchEngine .executeQuery(query); List<SolrResponseDto> results = response.getResults(); assertNotNull( "There should have a result for a fulltextSearch for " + country.getName() + " and even If no results are return: an empty list should be return, not null ", results); assertTrue("There should have a result for a fulltextSearch for " + country.getName(), results.size() == 1); SolrResponseDto result = results.get(0); assertNotNull(result.getName()); assertEquals(country.getName(), result.getName()); assertNotNull(result.getFeature_id()); assertEquals(country.getFeatureId(), result.getFeature_id()); assertNotNull(result.getFeature_class()); assertEquals(country.getFeatureClass(), result.getFeature_class()); assertNotNull(result.getFeature_code()); assertEquals(country.getFeatureCode(), result.getFeature_code()); assertNotNull(result.getName_ascii()); assertEquals(country.getAsciiName(), result.getName_ascii()); assertNotNull(result.getElevation()); assertEquals(country.getElevation(), result.getElevation()); assertNotNull(result.getGtopo30()); assertEquals(country.getGtopo30(), result.getGtopo30()); assertNotNull(result.getTimezone()); assertEquals(country.getTimezone(), result.getTimezone()); assertNotNull(result.getFully_qualified_name()); assertEquals(country.getFullyQualifiedName(false), result .getFully_qualified_name()); assertNotNull(result.getPlacetype()); assertEquals(country.getClass().getSimpleName(), result.getPlacetype()); assertNotNull(result.getPopulation()); assertEquals(country.getPopulation(), result.getPopulation()); assertNotNull(result.getLat()); assertEquals(country.getLatitude(), result.getLat()); assertNotNull(result.getLng()); assertEquals(country.getLongitude(), result.getLng()); assertNotNull(result.getGoogle_map_url()); assertEquals(URLUtils.createGoogleMapUrl(country.getLocation(), country .getName()), result.getGoogle_map_url()); assertNotNull(result.getCountry_flag_url()); assertEquals(URLUtils.createCountryFlagUrl(country.getCountryCode()), result.getCountry_flag_url()); assertNotNull(result.getYahoo_map_url()); assertEquals(URLUtils.createYahooMapUrl(country.getLocation()), result .getYahoo_map_url()); assertEquals(1, result.getCountry_names_alternate().size()); assertNotNull(result.getCountry_names_alternate().get(0)); assertEquals(country.getAlternateNames().get(0).getName(), result.getCountry_names_alternate().get(0)); assertEquals(1, result.getCountry_names_alternate_localized().size()); assertNotNull(result.getCountry_names_alternate_localized() .get(alternateNameLocalized.getLanguage()).get(0)); assertEquals(alternateNameLocalized.getName(), result.getCountry_names_alternate_localized() .get(alternateNameLocalized.getLanguage()).get(0)); assertNotNull(result.getContinent()); assertEquals(country.getContinent(), result.getContinent()); assertNotNull(result.getCurrency_code()); assertEquals(country.getCurrencyCode(), result.getCurrency_code()); assertNotNull(result.getCurrency_name()); assertEquals(country.getCurrencyName(), result.getCurrency_name()); assertNotNull(result.getFips_code()); assertEquals(country.getFipsCode(), result.getFips_code()); assertNotNull(result.getIsoalpha3_country_code()); assertEquals(country.getIso3166Alpha2Code(), result.getIsoalpha2_country_code()); assertNotNull(result.getIsoalpha3_country_code()); assertEquals(country.getIso3166Alpha3Code(), result.getIsoalpha3_country_code()); assertNotNull(result.getPostal_code_mask()); assertEquals(country.getPostalCodeMask(), result.getPostal_code_mask()); assertNotNull(result.getPostal_code_regex()); assertEquals(country.getPostalCodeRegex(), result.getPostal_code_regex()); assertNotNull(result.getPhone_prefix()); assertEquals(country.getPhonePrefix(), result.getPhone_prefix()); assertNotNull(result.getSpoken_languages().get(0)); assertEquals(country.getSpokenLanguages().get(0).getIso639LanguageName(), result.getSpoken_languages().get(0)); assertNotNull(result.getTld()); assertEquals(country.getTld(), result.getTld()); assertNotNull(result.getCapital_name()); assertEquals(country.getCapitalName(), result.getCapital_name()); assertNotNull(result.getArea()); assertEquals(country.getArea(), result.getArea()); } @Test public void testUnmarshallSolrDocumentShouldReallyUnmarshallAdm() { Adm adm = geolocTestHelper .createAdm("AdmName", "FR", "A1", "B2", null, null, null, 2); admDao.save(adm); this.solRSynchroniser.commit(); Pagination pagination = paginate().from(1).to(10); Output output = Output.withFormat(OutputFormat.XML).withLanguageCode( "FR").withStyle(OutputStyle.FULL).withIndentation(); FulltextQuery query = new FulltextQuery(adm.getName(), pagination, output, null, null); FulltextResultsDto response = this.fullTextSearchEngine .executeQuery(query); List<SolrResponseDto> results = response.getResults(); assertNotNull( "There should have a result for a fulltextSearch for " + adm.getName() + " and even If no results are return: an empty list should be return, not null ", results); assertTrue("There should have a result for a fulltextSearch for " + adm.getName(), results.size() == 1); SolrResponseDto result = results.get(0); assertNotNull(result.getName()); assertEquals(adm.getName(), result.getName()); assertNotNull(result.getAdm1_code()); assertEquals(adm.getAdm1Code(), result.getAdm1_code()); assertNotNull(result.getAdm2_code()); assertEquals(adm.getAdm2Code(), result.getAdm2_code()); assertEquals("Level should be fill when an Adm is saved ",adm.getLevel(), result.getLevel()); } @Test public void testUnmarshallQueryResponseShouldReturnAnEmptyListIfNoResultsAreFound() { FulltextQuery query = new FulltextQuery("fake"); FulltextResultsDto response = this.fullTextSearchEngine .executeQuery(query); List<SolrResponseDto> results = response.getResults(); assertNotNull( "If no results are return: an empty list should be return, not null ", results); assertTrue("If no results are return: an empty list should be return", results.size() == 0); } }