package com.gisgraphy.importer;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.easymock.EasyMock;
import org.junit.Test;
import com.gisgraphy.domain.valueobject.ImporterStatus;
import com.gisgraphy.domain.valueobject.ImporterStatusDto;
import com.gisgraphy.helper.FileHelper;
import com.gisgraphy.service.IInternationalisationService;
import com.gisgraphy.test.GisgraphyTestHelper;
public class QuattroshapesFileRetrieverTest {
@Test
public void processShouldExtractFilesEvenIfRetrieveFileIsFalse(){
final List<String> methodCalled = new ArrayList<String>();
final String downloadFlag = "download";
final String decompressFlag = "decompress";
QuattroshapesFileRetriever quattroshapesFileRetriever = new QuattroshapesFileRetriever(){
@Override
protected void downloadFiles() {
methodCalled.add(downloadFlag);
}
@Override
public void decompressFiles() throws IOException {
methodCalled.add(decompressFlag);
}
};
ImporterConfig importerConfig = new ImporterConfig();
List<String> filesToDownload =new ArrayList<String>();
String fileTobeDownload = "shapes.test.gis";
filesToDownload.add(fileTobeDownload);
importerConfig.setQuattroshapesFilesToDownload(fileTobeDownload);
importerConfig.setQuattroshapesImporterEnabled(true);
importerConfig.setRetrieveFiles(false);
quattroshapesFileRetriever.setInternationalisationService(createMockInternationalisationService());
quattroshapesFileRetriever.setImporterConfig(importerConfig);
quattroshapesFileRetriever.process();
Assert.assertEquals(decompressFlag, methodCalled.get(0));
}
@Test
public void processShouldExtractAndDownloadFilesIfRetrieveFileIsTrue(){
final List<String> methodCalled = new ArrayList<String>();
final String downloadFlag = "download";
final String decompressFlag = "decompress";
QuattroshapesFileRetriever quattroshapesFileRetriever = new QuattroshapesFileRetriever(){
@Override
protected void downloadFiles() {
methodCalled.add(downloadFlag);
}
@Override
public void decompressFiles() throws IOException {
methodCalled.add(decompressFlag);
}
};
ImporterConfig importerConfig = new ImporterConfig();
List<String> filesToDownload =new ArrayList<String>();
String fileTobeDownload = "shapes.test.gis";
filesToDownload.add(fileTobeDownload);
importerConfig.setQuattroshapesImporterEnabled(true);
importerConfig.setRetrieveFiles(true);
quattroshapesFileRetriever.setInternationalisationService(createMockInternationalisationService());
quattroshapesFileRetriever.setImporterConfig(importerConfig);
quattroshapesFileRetriever.process();
Assert.assertEquals(downloadFlag, methodCalled.get(0));
Assert.assertEquals(decompressFlag, methodCalled.get(1));
}
@Test
public void processShouldDoNothingIfopenstreetmapIsDisabled(){
final List<String> methodCalled = new ArrayList<String>();
final String downloadFlag = "download";
final String decompressFlag = "decompress";
QuattroshapesFileRetriever quattroshapesFileRetriever = new QuattroshapesFileRetriever(){
@Override
protected void downloadFiles() {
methodCalled.add(downloadFlag);
}
@Override
public void decompressFiles() throws IOException {
methodCalled.add(decompressFlag);
}
};
ImporterConfig importerConfig = new ImporterConfig();
List<String> filesToDownload =new ArrayList<String>();
String fileTobeDownload = "shapes.test.gis";
filesToDownload.add(fileTobeDownload);
importerConfig.setQuattroshapesImporterEnabled(false);
importerConfig.setRetrieveFiles(true);
quattroshapesFileRetriever.setInternationalisationService(createMockInternationalisationService());
quattroshapesFileRetriever.setImporterConfig(importerConfig);
quattroshapesFileRetriever.process();
Assert.assertEquals(0, methodCalled.size());
}
@Test
public void process() {
QuattroshapesFileRetriever quattroshapesFileRetriever = new QuattroshapesFileRetriever();
quattroshapesFileRetriever.setInternationalisationService(createMockInternationalisationService());
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setQuattroshapesDownloadURL(ImporterConfigTest.GISGRAPHY_DOWNLOAD_SERVER2+"/quattroshapes");
// create a temporary directory to download files
File tempDir = FileHelper.createTempDir(this.getClass()
.getSimpleName());
// get files to download
List<String> filesToDownload =new ArrayList<String>();
String fileTobeDownload = "shapes.test.gis";
filesToDownload.add(fileTobeDownload);
importerConfig.setQuattroshapesFilesToDownload(fileTobeDownload);
importerConfig.setRetrieveFiles(true);
importerConfig.setQuattroshapesDir(tempDir.getAbsolutePath());
// check that the directory is ending with the / or \ according to the
// System
Assert.assertTrue("quattroshape dir must ends with" + File.separator,
importerConfig.getQuattroshapesDir().endsWith(File.separator));
quattroshapesFileRetriever.setImporterConfig(importerConfig);
quattroshapesFileRetriever.process();
// check that URL ends with '/' : normally "/" is added
// if not
Assert.assertTrue("quattroshapesURL must ends with '/' but was "
+ importerConfig.getQuattroshapesDownloadURL(), importerConfig
.getQuattroshapesDownloadURL().endsWith("/"));
// check that files have been Downloaded
File file = null;
for (String fileToDownload : filesToDownload) {
file = new File(importerConfig.getQuattroshapesDir() + fileToDownload);
if (importerConfig.isRetrieveFiles()) {
Assert.assertTrue("Le fichier " + fileToDownload
+ " have not been downloaded in "
+ importerConfig.getQuattroshapesDir(), file.exists());
} else {
Assert.assertFalse("Le fichier " + fileToDownload
+ " have been downloaded in "
+ importerConfig.getQuattroshapesDir()
+ " even if the option retrievefile is"
+ importerConfig.isRetrieveFiles(), file.exists());
}
}
// check that files have been untar
String fileToDownload = "localities.txt";
file = new File(importerConfig.getQuattroshapesDir()
+ fileToDownload);
if (importerConfig.isRetrieveFiles()) {
Assert.assertTrue("Le fichier " + fileToDownload
+ " have not been untar in "
+ importerConfig.getQuattroshapesDir(), file.exists());
} else {
Assert.assertFalse("Le fichier " + fileToDownload
+ " have been unzip in "
+ importerConfig.getQuattroshapesDir()
+ " even if the option retrievefile is"
+ importerConfig.isRetrieveFiles(), file.exists());
}
// delete temp dir
Assert.assertTrue("the tempDir has not been deleted", GisgraphyTestHelper
.DeleteNonEmptyDirectory(tempDir));
}
@Test
public void processWhenNotExistingFile() {
QuattroshapesFileRetriever quattroshapeFileRetriever = new QuattroshapesFileRetriever();
quattroshapeFileRetriever.setInternationalisationService(createMockInternationalisationService());
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setQuattroshapesDownloadURL(ImporterConfigTest.GISGRAPHY_DOWNLOAD_SERVER+"/quattroshapes");
// create a temporary directory to download files
File tempDir = FileHelper.createTempDir(this.getClass()
.getSimpleName());
// get files to download
List<String> filesToDownload =new ArrayList<String>();
String fileTobeDownload = "notExisting.gis";
filesToDownload.add(fileTobeDownload);
importerConfig.setQuattroshapesFilesToDownload(fileTobeDownload);
importerConfig.setRetrieveFiles(true);
importerConfig.setQuattroshapesDir(tempDir.getAbsolutePath());
quattroshapeFileRetriever.setImporterConfig(importerConfig);
try {
quattroshapeFileRetriever.process();
fail("all the files specify should exists");
} catch (ImporterException e) {
Assert.assertEquals(FileNotFoundException.class, e.getCause().getCause().getClass());
}
// delete temp dir
Assert.assertTrue("the tempDir has not been deleted", GisgraphyTestHelper
.DeleteNonEmptyDirectory(tempDir));
}
private IInternationalisationService createMockInternationalisationService() {
IInternationalisationService internationalisationService = EasyMock.createMock(IInternationalisationService.class);
EasyMock.expect(internationalisationService.getString((String)EasyMock.anyObject())).andStubReturn("localizedValue");
EasyMock.replay(internationalisationService);
return internationalisationService;
}
@Test
public void StatusShouldBeEqualsToSkipedIfRetrieveFileIsFalse(){
QuattroshapesFileRetriever quattroshapeFileRetriever = new QuattroshapesFileRetriever(){
@Override
public void decompressFiles() throws IOException {
return;
}
};
quattroshapeFileRetriever.setInternationalisationService(createMockInternationalisationService());
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setQuattroshapesImporterEnabled(false);
quattroshapeFileRetriever.setImporterConfig(importerConfig);
quattroshapeFileRetriever.process();
Assert.assertEquals(ImporterStatus.SKIPPED, quattroshapeFileRetriever.getStatus());
ImporterStatusDto statusDto = new ImporterStatusDto(quattroshapeFileRetriever);
Assert.assertEquals(0, statusDto.getPercent());
}
@Test
public void StatusShouldBeEqualsToPROCESSEDIfNoError(){
QuattroshapesFileRetriever quattroshapeFileRetriever = new QuattroshapesFileRetriever();
quattroshapeFileRetriever.setInternationalisationService(createMockInternationalisationService());
ImporterConfig importerConfig = EasyMock.createMock(ImporterConfig.class);
EasyMock.expect(importerConfig.isRetrieveFiles()).andReturn(true).times(2);
EasyMock.expect(importerConfig.isQuattroshapesImporterEnabled()).andReturn(true);
EasyMock.expect(importerConfig.isGeonamesImporterEnabled()).andReturn(true);
//EasyMock.expect(importerConfig.getGeonamesDownloadFilesListFromOption()).andStubReturn(new ArrayList<String>());
EasyMock.expect(importerConfig.getQuattroshapesDir()).andStubReturn("");
EasyMock.expect(importerConfig.getQuattroshapesDownloadURL()).andStubReturn("");
EasyMock.expect(importerConfig.getQuattroshapesFilesDownloadFilesListFromOption()).andStubReturn(new ArrayList<String>());
EasyMock.replay(importerConfig);
quattroshapeFileRetriever.setImporterConfig(importerConfig);
quattroshapeFileRetriever.process();
Assert.assertEquals(ImporterStatus.PROCESSED, quattroshapeFileRetriever.getStatus());
ImporterStatusDto statusDto = new ImporterStatusDto(quattroshapeFileRetriever);
Assert.assertEquals(100, statusDto.getPercent());
}
@Test
public void shouldBeSkipped(){
QuattroshapesFileRetriever importer = new QuattroshapesFileRetriever();
ImporterConfig importerConfig = new ImporterConfig();
importerConfig.setGeonamesImporterEnabled(true);
importerConfig.setQuattroshapesImporterEnabled(true);
importer.setImporterConfig(importerConfig);
Assert.assertFalse(importer.shouldBeSkipped());
importerConfig = new ImporterConfig();
importerConfig.setGeonamesImporterEnabled(true);
importerConfig.setQuattroshapesImporterEnabled(false);
importer.setImporterConfig(importerConfig);
Assert.assertTrue(importer.shouldBeSkipped());
importerConfig = new ImporterConfig();
importerConfig.setGeonamesImporterEnabled(false);
importerConfig.setQuattroshapesImporterEnabled(true);
importer.setImporterConfig(importerConfig);
Assert.assertTrue(importer.shouldBeSkipped());
importerConfig = new ImporterConfig();
importerConfig.setGeonamesImporterEnabled(false);
importerConfig.setQuattroshapesImporterEnabled(false);
importer.setImporterConfig(importerConfig);
Assert.assertTrue(importer.shouldBeSkipped());
}
@Test
public void getFilesToDownloadShouldReturnTheImporterConfigOption(){
ImporterConfig importerConfig = new ImporterConfig();
String fileTobeDownload = "shapes.gis";
List<String> filesToDownload =new ArrayList<String>();
filesToDownload.add(fileTobeDownload);
importerConfig.setQuattroshapesFilesToDownload(fileTobeDownload);
QuattroshapesFileRetriever quattroshapesFileRetriever = new QuattroshapesFileRetriever();
quattroshapesFileRetriever.setImporterConfig(importerConfig);
Assert.assertEquals("getFilesToDownload should return the importerConfig Option",filesToDownload, quattroshapesFileRetriever.getFilesToDownload());
}
}