package nl.ipo.cds.etl.theme.habitat;
import static nl.ipo.cds.etl.theme.habitat.Message.ATTRIBUTE_CODE_CODESPACE_INVALID;
import static nl.ipo.cds.etl.theme.habitat.Message.ATTRIBUTE_CODE_INVALID;
import static nl.ipo.cds.etl.theme.habitat.Message.ATTRIBUTE_EMPTY;
import static nl.ipo.cds.etl.theme.habitat.Message.ATTRIBUTE_GROUP_INCONSISTENT;
import static nl.ipo.cds.etl.theme.habitat.Message.ATTRIBUTE_NULL;
import static nl.ipo.cds.etl.theme.habitat.Message.ATTRIBUTE_VALUE_NEGATIVE;
import static nl.ipo.cds.etl.theme.habitat.Message.GEOMETRY_POINT_DUPLICATION;
import static nl.ipo.cds.etl.theme.habitat.Message.GEOMETRY_SELF_INTERSECTION;
import static nl.ipo.cds.etl.theme.habitat.Message.GEOMETRY_SRS_NOT_RD;
import static nl.ipo.cds.etl.theme.habitat.Message.GEOMETRY_SRS_NULL;
import java.util.Collections;
import nl.ipo.cds.etl.test.GeometryConstants;
import nl.ipo.cds.etl.test.ValidationRunner;
import org.deegree.commons.tom.ows.CodeType;
import org.junit.Before;
import org.junit.Test;
public class HabitatValidatorTest {
private HabitatValidator validator;
private ValidationRunner<Habitat, Message, Context> runner;
private GeometryConstants geom;
@Before
public void createValidator() throws Exception {
validator = new HabitatValidator(Collections.emptyMap());
runner = new ValidationRunner<>(validator, Habitat.class);
geom = new GeometryConstants("EPSG:28992");
}
private ValidationRunner<Habitat, Message, Context>.Runner run(final String validationName) {
return runner.validation(validationName);
}
@Test
public void getInspireIdDatasetCodeValidator () throws Throwable {
run ("inspireIdDatasetCode")
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run ("inspireIdDatasetCode")
.with (new CodeType(""))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("inspireIdDatasetCode")
.withCodeList ("http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat", "hbttpkt")
.with (new CodeType("hbttpkt"))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("inspireIdDatasetCode")
.withCodeList ("http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat", "hbttpkt")
.with (new CodeType("hbttpkt", "http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat/"))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("inspireIdDatasetCode")
.withCodeList ("http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat", "hbttpkt")
.with (new CodeType("value1", "http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat"))
.assertOnlyKey (ATTRIBUTE_CODE_INVALID);
run ("inspireIdDatasetCode")
.withCodeList ("http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat", "hbttpkt")
.with (new CodeType("hbttpkt", "http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat"))
.assertNoMessages();
}
@Test
public void getInspireIdLocalIdValidator () throws Throwable {
run ("inspireIdLocalId")
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run ("inspireIdLocalId")
.with ("")
.assertOnlyKey (ATTRIBUTE_EMPTY);
run ("inspireIdLocalId")
.with ("nl1000")
.assertNoMessages();
}
@Test
public void testGeometry () throws Exception {
run ("geometry")
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run ("geometry")
.with (geom.lineString (null))
.assertOnlyKey (GEOMETRY_SRS_NULL);
run ("geometry")
.with (geom.lineString (geom.getSrs ("EPSG:3857")))
.assertOnlyKey (GEOMETRY_SRS_NOT_RD);
run ("geometry")
.with (geom.point (1,2))
.assertNoMessages ();
run ("geometry")
.with (geom.lineString ())
.assertNoMessages ();
run ("geometry")
.with (geom.multiPolygon())
.assertNoMessages ();
run ("geometry")
.with (geom.lineStringDuplicatePoint ())
.assertOnlyKey (GEOMETRY_POINT_DUPLICATION);
run ("geometry")
.with (geom.lineStringSelfIntersection ())
.assertOnlyKey (GEOMETRY_SELF_INTERSECTION);
}
@Test
public void testHabitatReferenceHabitatTypeIdCodeValidator () throws Exception {
run ("habitatReferenceHabitatTypeIdCode")
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run ("habitatReferenceHabitatTypeIdCode")
.with (new CodeType(""))
.assertOnlyKey (ATTRIBUTE_EMPTY);
run ("habitatReferenceHabitatTypeIdCode")
.withCodeList ("http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat", "Habitattypenkaart")
.with (new CodeType("value1", "http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat"))
.assertNoMessages();
run ("habitatReferenceHabitatTypeIdCode")
.withCodeList ("http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat", "Habitattypenkaart")
.with (new CodeType("Habitattypenkaart", "http://www.inspire-provincies.nl/codeList/DatasetTypeCode/Habitat"))
.assertNoMessages();
}
@Test
public void testHabitatReferenceHabitatTypeSchemeCode () throws Exception {
run ("habitatReferenceHabitatTypeSchemeCode")
.with (null)
.assertOnlyKey (ATTRIBUTE_NULL);
run ("habitatReferenceHabitatTypeSchemeCode")
.withCodeList ("http://inspire.ec.europa.eu/codeList/ReferenceHabitatTypeSchemeValue", "eunis")
.with (new CodeType(""))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("habitatReferenceHabitatTypeSchemeCode")
.withCodeList ("http://inspire.ec.europa.eu/codeList/ReferenceHabitatTypeSchemeValue", "eunis")
.with (new CodeType("bogus"))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("habitatReferenceHabitatTypeSchemeCode")
.withCodeList ("http://inspire.ec.europa.eu/codeList/ReferenceHabitatTypeSchemeValue", "eunis")
.with (new CodeType("value1", "http://inspire.ec.europa.eu/codeList/ReferenceHabitatTypeSchemeValue"))
.assertOnlyKey (ATTRIBUTE_CODE_INVALID);
run ("habitatReferenceHabitatTypeSchemeCode")
.withCodeList ("http://inspire.ec.europa.eu/codeList/ReferenceHabitatTypeSchemeValue", "eunis")
.with (new CodeType("eunis", "http://inspire.ec.europa.eu/codeList/ReferenceHabitatTypeSchemeValue"))
.assertNoMessages();
}
@Test
public void testLocalHabitatNameLocalSchemeValidator () throws Exception {
run ("localHabitatNameLocalScheme")
.with (null)
.assertNoMessages();
run ("localHabitatNameLocalScheme")
.with ("")
.assertOnlyKey (ATTRIBUTE_EMPTY);
run ("localHabitatNameLocalScheme")
.with ("value")
.assertNoMessages();
Habitat feature = new Habitat();
feature.setLocalHabitatNameLocalNameCode(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalScheme")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameLocalName("value");
run ("localHabitatNameLocalScheme")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameQualifierLocalName(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalScheme")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
}
@Test
public void testLocalHabitatNameLocalNameCodeValidator () throws Exception {
run ("localHabitatNameLocalNameCode")
.with (null)
.assertNoMessages();
run ("localHabitatNameLocalNameCode")
.with (new CodeType ("","http://www.namespace.com"))
.assertOnlyKey (ATTRIBUTE_EMPTY);
run ("localHabitatNameLocalNameCode")
.with (new CodeType ("value","http://www.namespace.com"))
.assertNoMessages();
Habitat feature = new Habitat();
feature.setLocalHabitatNameLocalScheme("value");
run ("localHabitatNameLocalNameCode")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameLocalName("value");
run ("localHabitatNameLocalNameCode")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameQualifierLocalName(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalNameCode")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
}
@Test
public void testLocalHabitatNameLocalNameValidator () throws Exception {
run ("localHabitatNameLocalName")
.with (null)
.assertNoMessages();
run ("localHabitatNameLocalName")
.with ("")
.assertOnlyKey (ATTRIBUTE_EMPTY);
run ("localHabitatNameLocalName")
.with ("value")
.assertNoMessages();
Habitat feature = new Habitat();
feature.setLocalHabitatNameLocalNameCode(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalName")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameLocalNameCode(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalName")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameQualifierLocalName(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalName")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
}
@Test
public void testLocalHabitatNameQualifierLocalName () throws Exception {
run ("localHabitatNameQualifierLocalName")
.with (null)
.assertNoMessages();
run ("localHabitatNameQualifierLocalName")
.withCodeList ("http://inspire.ec.europa.eu/codeList/QualifierLocalNameValue", "congruent")
.with (new CodeType ("congruent","http://www.namespace.com"))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("localHabitatNameQualifierLocalName")
.withCodeList ("http://inspire.ec.europa.eu/codeList/QualifierLocalNameValue", "congruent")
.with (new CodeType("bogus"))
.assertOnlyKey (ATTRIBUTE_CODE_CODESPACE_INVALID);
run ("localHabitatNameQualifierLocalName")
.withCodeList ("http://inspire.ec.europa.eu/codeList/QualifierLocalNameValue", "congruent")
.with (new CodeType("value1", "http://inspire.ec.europa.eu/codeList/QualifierLocalNameValue"))
.assertOnlyKey (ATTRIBUTE_CODE_INVALID);
run ("localHabitatNameQualifierLocalName")
.withCodeList ("http://inspire.ec.europa.eu/codeList/QualifierLocalNameValue", "congruent")
.with (new CodeType("congruent", "http://inspire.ec.europa.eu/codeList/QualifierLocalNameValue"))
.assertNoMessages();
Habitat feature = new Habitat();
feature.setLocalHabitatNameLocalScheme("value");
run ("localHabitatNameQualifierLocalName")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameLocalName("value");
run ("localHabitatNameQualifierLocalName")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
feature = new Habitat();
feature.setLocalHabitatNameLocalNameCode(new CodeType ("value","http://www.namespace.com"));
run ("localHabitatNameLocalName")
.withFeature(feature )
.assertOnlyKey (ATTRIBUTE_GROUP_INCONSISTENT);
}
@Test
public void testHabitatAreaCoveredValidator () throws Exception {
run ("habitatAreaCovered")
.with (null)
.assertNoMessages();
run ("habitatAreaCovered")
.with (-0.1)
.assertOnlyKey (ATTRIBUTE_VALUE_NEGATIVE);
// run ("habitatAreaCovered")
// .with (0.0)
// .assertNoMessages();
}
}