def test_sdr_validation_watershed_missing_ws_id_value(self): """SDR test validation notices bad value in `ws_id` watershed.""" from natcap.invest 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("ws_id", ogr.OFTInteger)) feature = ogr.Feature(layer.GetLayerDefn()) # intentionally not setting ws_id 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( 'feature 0 has an invalid value of' in validate_result[0][1], 'expected an invalid `ws_id` value but got %s' % (validate_result))
def test_sdr_validation_missing_key(self): """SDR test validation that's missing keys.""" from natcap.invest import sdr # use predefined directory so test can clean up files during teardown args = {} with self.assertRaises(KeyError) as context: validate_result = sdr.validate(args, limit_to=None) self.assertTrue( 'The following keys were expected' in str(context.exception))
def test_sdr_validation_key_no_value(self): """SDR test validation that's missing a value on a key.""" from natcap.invest 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 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, "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 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") self.assertTrue( all([ x[1] in ['not a raster', 'not a vector'] for x in validate_result ]))