def test_sdr_validation_watershed_missing_ws_id_value(self): """SDR test validation notices bad value in `ws_id` watershed.""" from natcap.invest.sdr import sdr vector_driver = ogr.GetDriverByName("ESRI Shapefile") test_watershed_path = os.path.join( self.workspace_dir, 'watershed.shp') vector = vector_driver.CreateDataSource(test_watershed_path) srs = osr.SpatialReference() srs.ImportFromEPSG(26910) # NAD83 / UTM zone 11N layer = vector.CreateLayer("watershed", srs, ogr.wkbPoint) # forget to add a 'ws_id' field layer.CreateField(ogr.FieldDefn("ws_id", ogr.OFTInteger)) feature = ogr.Feature(layer.GetLayerDefn()) # Point coordinates taken from within bounds of other test data feature.SetGeometry(ogr.CreateGeometryFromWkt( "POINT(463250 4929700)")) # intentionally not setting ws_id layer.CreateFeature(feature) feature = None layer = None vector = None # use predefined directory so test can clean up files during teardown args = SDRTests.generate_base_args( self.workspace_dir) args['watersheds_path'] = test_watershed_path validate_result = sdr.validate(args, limit_to=None) self.assertTrue(len(validate_result) > 0, 'Expected validation errors but none found') self.assertTrue( 'features have a non-integer ws_id field' in validate_result[0][1])
def test_sdr_validation_watershed_missing_ws_id(self): """SDR test validation notices missing `ws_id` field on watershed.""" from natcap.invest.sdr import sdr vector_driver = ogr.GetDriverByName("ESRI Shapefile") test_watershed_path = os.path.join( self.workspace_dir, 'watershed.shp') vector = vector_driver.CreateDataSource(test_watershed_path) srs = osr.SpatialReference() srs.ImportFromEPSG(4326) layer = vector.CreateLayer("watershed", srs, ogr.wkbPoint) # forget to add a 'ws_id' field layer.CreateField(ogr.FieldDefn("id", ogr.OFTInteger)) feature = ogr.Feature(layer.GetLayerDefn()) feature.SetField("id", 0) feature.SetGeometry(ogr.CreateGeometryFromWkt("POINT(-112.2 42.5)")) layer.CreateFeature(feature) feature = None layer = None vector = None # use predefined directory so test can clean up files during teardown args = SDRTests.generate_base_args( self.workspace_dir) args['watersheds_path'] = test_watershed_path validate_result = sdr.validate(args, limit_to=None) self.assertTrue( validate_result, 'expected a validation error but didn\'t get one') self.assertTrue( 'Fields are missing from the first layer' in validate_result[0][1])
def test_sdr_validation_missing_key(self): """SDR test validation that's missing keys.""" from natcap.invest.sdr import sdr # use predefined directory so test can clean up files during teardown args = {} validation_warnings = sdr.validate(args, limit_to=None) self.assertEqual(len(validation_warnings[0][0]), 11)
def test_sdr_validation_key_no_value(self): """SDR test validation that's missing a value on a key.""" from natcap.invest.sdr import sdr # use predefined directory so test can clean up files during teardown args = SDRTests.generate_base_args(self.workspace_dir) args['dem_path'] = '' validate_result = sdr.validate(args, limit_to=None) self.assertTrue(validate_result, 'expected a validation error but didn\'t get one')
def test_sdr_validation(self): """SDR test regular validation.""" from natcap.invest.sdr import sdr # use predefined directory so test can clean up files during teardown args = SDRTests.generate_base_args(self.workspace_dir) args['drainage_path'] = os.path.join( REGRESSION_DATA, 'sample_drainage.tif') validate_result = sdr.validate(args, limit_to=None) self.assertFalse( validate_result, # List should be empty if validation passes "expected no failed validations instead got %s" % str( validate_result))
def test_sdr_validation_wrong_types(self): """SDR test validation for wrong GIS types.""" from natcap.invest.sdr import sdr # use predefined directory so test can clean up files during teardown args = SDRTests.generate_base_args(self.workspace_dir) # swap watershed and dem for different types args['dem_path'], args['watersheds_path'] = ( args['watersheds_path'], args['dem_path']) validate_result = sdr.validate(args, limit_to=None) self.assertTrue( validate_result, "expected failed validations instead didn't get any") for (validation_keys, error_msg), phrase in zip( validate_result, ['GDAL raster', 'GDAL vector']): self.assertTrue(phrase in error_msg)