/*******************************************************************************
* 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.importer;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import org.junit.Assert;
import org.easymock.EasyMock;
import org.junit.Test;
import static org.junit.Assert.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import com.gisgraphy.domain.repository.IAlternateNameDao;
import com.gisgraphy.domain.repository.ISolRSynchroniser;
import com.gisgraphy.domain.repository.SolRSynchroniser;
import com.gisgraphy.domain.valueobject.ImporterStatus;
import com.gisgraphy.domain.valueobject.ImporterStatusDto;
import com.gisgraphy.domain.valueobject.NameValueDTO;
import com.gisgraphy.fulltext.AbstractIntegrationHttpSolrTestCase;
import com.gisgraphy.fulltext.spell.ISpellCheckerIndexer;
public class GeonamesAlternateNamesAdmImporterTest extends AbstractIntegrationHttpSolrTestCase {
private ImporterConfig importerConfig;
@Autowired
private GeonamesAlternateNamesAdmImporter geonamesAlternateNamesAdmImporter;
private ISpellCheckerIndexer spellCheckerIndexer;
/**
* @param spellCheckerIndexer the spellCheckerIndexer to set
*/
public void setSpellCheckerIndexer(ISpellCheckerIndexer spellCheckerIndexer) {
this.spellCheckerIndexer = spellCheckerIndexer;
}
@Test
public void testRollback() {
GeonamesAlternateNamesAdmImporter geonamesAlternateNamesImporter = new GeonamesAlternateNamesAdmImporter();
IAlternateNameDao alternateNameDao = EasyMock
.createMock(IAlternateNameDao.class);
EasyMock.expect(alternateNameDao.deleteAll()).andReturn(5);
EasyMock.replay(alternateNameDao);
geonamesAlternateNamesImporter.setAlternateNameDao(alternateNameDao);
List<NameValueDTO<Integer>> deleted = geonamesAlternateNamesImporter
.rollback();
assertEquals(1, deleted.size());
assertEquals(5, deleted.get(0).getValue().intValue());
}
@Test
public void testTeardown(){
ISolRSynchroniser mockSolRSynchroniser = EasyMock.createMock(ISolRSynchroniser.class);
EasyMock.expect(mockSolRSynchroniser.commit()).andReturn(true);
EasyMock.expectLastCall();
EasyMock.expectLastCall();
ISpellCheckerIndexer mockSpellCheckerIndexer = EasyMock.createMock(ISpellCheckerIndexer.class);
EasyMock.expect(mockSpellCheckerIndexer.buildAllIndex()).andReturn(new HashMap<String, Boolean>());
EasyMock.replay(mockSolRSynchroniser);
EasyMock.replay(mockSpellCheckerIndexer);
GeonamesAlternateNamesAdmImporter importer = new GeonamesAlternateNamesAdmImporter();
importer.setSolRSynchroniser(mockSolRSynchroniser);
importer.setSpellCheckerIndexer(mockSpellCheckerIndexer);
importer.tearDown();
EasyMock.verify(mockSolRSynchroniser);
EasyMock.verify(mockSpellCheckerIndexer);
}
@Test
public void testTeardownShouldBeCalledWhateverImportGisFeatureEmbededAlternateNamesOptions(){
boolean savedvalue = importerConfig.isImportGisFeatureEmbededAlternateNames();
try {
//teardown must be called even if ImportGisFeatureEmbededAlternateNames is true
importerConfig.setImportGisFeatureEmbededAlternateNames(true);
ISolRSynchroniser mockSolRSynchroniser = EasyMock.createMock(ISolRSynchroniser.class);
EasyMock.expect(mockSolRSynchroniser.commit()).andReturn(true);
EasyMock.expectLastCall();
EasyMock.expectLastCall();
ISpellCheckerIndexer mockSpellCheckerIndexer = EasyMock.createMock(ISpellCheckerIndexer.class);
EasyMock.expect(mockSpellCheckerIndexer.buildAllIndex()).andReturn(new HashMap<String, Boolean>());
EasyMock.replay(mockSolRSynchroniser);
EasyMock.replay(mockSpellCheckerIndexer);
geonamesAlternateNamesAdmImporter.setSolRSynchroniser(mockSolRSynchroniser);
geonamesAlternateNamesAdmImporter.setSpellCheckerIndexer(mockSpellCheckerIndexer);
geonamesAlternateNamesAdmImporter.process();
EasyMock.verify(mockSolRSynchroniser);
EasyMock.verify(mockSpellCheckerIndexer);
} finally {
importerConfig.setImportGisFeatureEmbededAlternateNames(savedvalue);
geonamesAlternateNamesAdmImporter.setSolRSynchroniser(solRSynchroniser);
geonamesAlternateNamesAdmImporter.setSpellCheckerIndexer(spellCheckerIndexer);
}
}
@Test
public void StatusShouldBeEqualsToSkipedIfisImportGisFeatureEmbededAlternateNamesIsTrue(){
SolRSynchroniser solRSynchroniser = EasyMock.createNiceMock(SolRSynchroniser.class);
ISpellCheckerIndexer spellChecker = EasyMock.createNiceMock(ISpellCheckerIndexer.class);
GeonamesAlternateNamesAdmImporter geonamesAlternateNamesImporter = new GeonamesAlternateNamesAdmImporter();
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setImportGisFeatureEmbededAlternateNames(true);
geonamesAlternateNamesImporter.setImporterConfig(importerConfig);
geonamesAlternateNamesImporter.setSolRSynchroniser(solRSynchroniser);
geonamesAlternateNamesImporter.setSpellCheckerIndexer(spellChecker);
geonamesAlternateNamesImporter.process();
Assert.assertEquals(ImporterStatus.SKIPPED, geonamesAlternateNamesImporter.getStatus());
ImporterStatusDto statusDto = new ImporterStatusDto(geonamesAlternateNamesImporter);
Assert.assertEquals(0, statusDto.getPercent());
}
@Test
public void testShouldBeSkipShouldReturnCorrectValue(){
ImporterConfig importerConfig = new ImporterConfig();
GeonamesAlternateNamesAdmImporter alternateNameImporter = new GeonamesAlternateNamesAdmImporter();
alternateNameImporter.setImporterConfig(importerConfig);
importerConfig.setGeonamesImporterEnabled(false);
importerConfig.setImportGisFeatureEmbededAlternateNames(false);
Assert.assertTrue(alternateNameImporter.shouldBeSkipped());
importerConfig.setGeonamesImporterEnabled(false);
importerConfig.setImportGisFeatureEmbededAlternateNames(true);
Assert.assertTrue(alternateNameImporter.shouldBeSkipped());
importerConfig.setGeonamesImporterEnabled(true);
importerConfig.setImportGisFeatureEmbededAlternateNames(false);
Assert.assertFalse(alternateNameImporter.shouldBeSkipped());
importerConfig.setGeonamesImporterEnabled(true);
importerConfig.setImportGisFeatureEmbededAlternateNames(true);
Assert.assertTrue(alternateNameImporter.shouldBeSkipped());
}
@Test
public void testGetFilesShouldReturnEmptyArrayIfImportEmbededIsTrue(){
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setImportGisFeatureEmbededAlternateNames(true);
GeonamesAlternateNamesAdmImporter alternateNameImporter = new GeonamesAlternateNamesAdmImporter();
alternateNameImporter.setImporterConfig(importerConfig);
File[] files = alternateNameImporter.getFiles();
Assert.assertEquals("wrong number of files for alternateName importer when import embeded is true",0,files.length);
}
@Test
public void testGetFilesShouldReturnExtractedFilesIfImportEmbededIsFalse(){
String importerGeonamesDir = "./geonamesDir";
String alternateNameCountryFileName = "alternateNameCountryFileName";
String alternateNameAdm1FileName = "alternateNameAdm1FileName";
String alternateNameAdm2FileName = "alternateNameAdm2FileName";
String alternateNameFeaturesFileName = "alternateNameFeaturesFileName";
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setImportGisFeatureEmbededAlternateNames(false);
importerConfig.setGeonamesDir(importerGeonamesDir);
importerConfig.setAlternateNameCountryFileName(alternateNameCountryFileName);
importerConfig.setAlternateNameAdm1FileName(alternateNameAdm1FileName);
importerConfig.setAlternateNameAdm2FileName(alternateNameAdm2FileName);
importerConfig.setAlternateNameFeaturesFileName(alternateNameFeaturesFileName);
GeonamesAlternateNamesAdmImporter alternateNameImporter = new GeonamesAlternateNamesAdmImporter();
alternateNameImporter.setImporterConfig(importerConfig);
File[] files = alternateNameImporter.getFiles();
Assert.assertEquals("wrong number of files for alternateName importer, it should be equals to the number of alternate names extracted files",3, files.length);
Assert.assertEquals("the first file return should be the alternate name country file",new File(importerConfig.getGeonamesDir()+alternateNameCountryFileName), files[0]);
Assert.assertEquals("the second file return should be the alternate name adm1 file",new File(importerConfig.getGeonamesDir()+alternateNameAdm1FileName), files[1]);
Assert.assertEquals("the third file return should be the alternate name adm2 file",new File(importerConfig.getGeonamesDir()+alternateNameAdm2FileName), files[2]);
}
@Autowired
public void setImporterConfig(ImporterConfig importerConfig) {
this.importerConfig = importerConfig;
}
@Autowired
public void setSolRSynchroniser(ISolRSynchroniser solRSynchroniser) {
this.solRSynchroniser = solRSynchroniser;
}
@Autowired
protected void setGeonamesAlternateNamesAdmImporter(
GeonamesAlternateNamesAdmImporter geonamesAlternateNamesAdmImporter) {
this.geonamesAlternateNamesAdmImporter = geonamesAlternateNamesAdmImporter;
}
}