/** * */ package nl.ipo.cds.etl.reporting.geom; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; import junit.framework.Assert; import nl.ipo.cds.dao.ManagerDao; import nl.ipo.cds.domain.DatasetType; import nl.ipo.cds.domain.ImportJob; import nl.ipo.cds.domain.JobLog; import nl.ipo.cds.etl.theme.protectedSite.ProtectedSiteValidator; import org.geotools.data.simple.SimpleFeatureCollection; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; /** * @author eshuism * 22 mei 2012 */ @ContextConfiguration({ "classpath:/nl/ipo/cds/dao/dao-applicationContext-test.xml" ,"classpath:/nl/ipo/cds/etl/reporting/geom/geometry-applicationContext.xml" // ,"classpath:/nl/ipo/cds/context/propertyConfigurer-test.xml" }) public class FeatureCollectionFactoryTest extends AbstractJUnit4SpringContextTests { @Autowired private ManagerDao managerDao; @Autowired private FeatureCollectionFactory featureCollectionFactory; @Before public void before(){ Assert.assertNotNull(managerDao); Assert.assertNotNull(featureCollectionFactory); // Reset mocks between tests reset(this.managerDao); } /** * Test method for {@link nl.ipo.cds.etl.reporting.geom.FeatureCollectionFactory#createFeatureCollection(nl.ipo.cds.domain.CdsJob)}. */ @Test public void testCreateFeatureCollection() { ImportJob job = new ImportJob(); job.setId(100L); job.setFinishTime(new Timestamp(new Date().getTime())); DatasetType datasetType = new DatasetType(); datasetType.setNaam("IMPORT"); job.setDatasetType(datasetType); job.setGeometryErrorCount(2); final ImportJob importJob = new ImportJob (); importJob.setId (job.getId ()); importJob.setFinishTime (job.getFinishTime ()); importJob.setDatasetType (job.getDatasetType ()); importJob.setGeometryErrorCount (job.getGeometryErrorCount ()); // List with all joblogs List<JobLog> jobLogs = new ArrayList<JobLog>(); // Create JobLog which is an geometry-error that should be added to the featureCollection/shapefile JobLog jobLog = new JobLog(); jobLog.setId(1L); jobLog.setX(new Double(0)); jobLog.setY(new Double(12.12)); jobLog.setGmlId("theGmlId"); jobLog.setMessage("Dit is een geometrie-foutmelding"); ProtectedSiteValidator.MessageKey messageKey = ProtectedSiteValidator.MessageKey.GEOMETRY_INTERIOR_RINGS_INTERSECT; Assert.assertTrue(messageKey.isAddToShapeFile()); jobLog.setKey(messageKey.name()); jobLog.setJob(job); jobLogs.add(jobLog); // Create JobLog which is a geometry-error that should be added to the featureCollection/shapefile jobLog = new JobLog(); jobLog.setId(2L); jobLog.setMessage("Dit is een geometrie-foutmelding die niet aan de shape-file toegevoegd moet worden"); messageKey = ProtectedSiteValidator.MessageKey.GEOMETRY_SRS_NULL; Assert.assertFalse(messageKey.isAddToShapeFile()); jobLog.setKey(messageKey.name()); jobLog.setJob(job); jobLogs.add(jobLog); // Create JobLog which is not a geometry-error at all jobLog = new JobLog(); jobLog.setId(3L); jobLog.setMessage("Dit is een geometrie-foutmelding die niet aan de shape-file toegevoegd moet worden"); jobLog.setKey("ONBEKENDE_MESSAGE_KEY"); jobLog.setJob(job); jobLogs.add(jobLog); expect(this.managerDao.findJobLog(job)).andReturn(jobLogs); // Stop recording, start playing replay(this.managerDao); SimpleFeatureCollection featureCollection = featureCollectionFactory.createFeatureCollection(importJob); // So only one out of three jobLogs should be in the featureCollection Assert.assertEquals(1, featureCollection.size()); // Verify the expected behaviour occurred verify(this.managerDao); } /** * Test method for {@link nl.ipo.cds.etl.reporting.geom.FeatureCollectionFactory#createFeatureCollection(nl.ipo.cds.domain.CdsJob)}. */ @Test public void testCreateFeatureCollectionMissingValues() { ImportJob job = new ImportJob(); job.setId(100L); job.setFinishTime(new Timestamp(new Date().getTime())); DatasetType datasetType = new DatasetType(); datasetType.setNaam("IMPORT"); job.setDatasetType(datasetType); job.setGeometryErrorCount(2); final ImportJob importJob = new ImportJob (); importJob.setId (job.getId ()); importJob.setFinishTime (job.getFinishTime ()); importJob.setDatasetType (job.getDatasetType ()); importJob.setGeometryErrorCount (job.getGeometryErrorCount ()); // List with all joblogs List<JobLog> jobLogs = new ArrayList<JobLog>(); // Create JobLog which is an geometry-error that should be added to the featureCollection/shapefile JobLog jobLog = new JobLog(); jobLog.setId(1L); jobLog.setX(new Double(0)); jobLog.setY(new Double(12.12)); jobLog.setGmlId("theGmlId"); jobLog.setMessage("Dit is een geometrie-foutmelding"); ProtectedSiteValidator.MessageKey messageKey = ProtectedSiteValidator.MessageKey.GEOMETRY_INTERIOR_RINGS_INTERSECT; Assert.assertTrue(messageKey.isAddToShapeFile()); jobLog.setKey(messageKey.name()); jobLog.setJob(job); jobLogs.add(jobLog); // Create JobLog which is an geometry-error that should be added, but misses gemlId jobLog = new JobLog(); jobLog.setId(2L); jobLog.setX(new Double(0)); jobLog.setY(new Double(12.12)); // Do NOT set the gmlId: jobLog.setGmlId("theGmlId"); jobLog.setMessage("Dit is een geometrie-foutmelding"); messageKey = ProtectedSiteValidator.MessageKey.GEOMETRY_INTERIOR_RINGS_INTERSECT; Assert.assertTrue(messageKey.isAddToShapeFile()); jobLog.setKey(messageKey.name()); jobLog.setJob(job); jobLogs.add(jobLog); // Create JobLog which is an geometry-error that should be added, but misses X and Y jobLog = new JobLog(); jobLog.setId(2L); jobLog.setX(Double.NaN); jobLog.setY(Double.NaN); jobLog.setGmlId("theGmlId"); jobLog.setMessage("Dit is een geometrie-foutmelding"); messageKey = ProtectedSiteValidator.MessageKey.GEOMETRY_INTERIOR_RINGS_INTERSECT; Assert.assertTrue(messageKey.isAddToShapeFile()); jobLog.setKey(messageKey.name()); jobLog.setJob(job); jobLogs.add(jobLog); expect(this.managerDao.findJobLog(job)).andReturn(jobLogs); // Stop recording, start playing replay(this.managerDao); SimpleFeatureCollection featureCollection = featureCollectionFactory.createFeatureCollection(importJob); // So only one out of three jobLogs should be in the featureCollection Assert.assertEquals(3, featureCollection.size()); // Verify the expected behaviour occurred verify(this.managerDao); } }