def test_validation_invalid_init_recruits(self): """Fisheries: Validate negative initial recruits value.""" from natcap.invest.fisheries import fisheries args = {'total_init_recruits': -100} validation_warnings = fisheries.validate( args, limit_to='total_init_recruits') self.assertEqual(len(validation_warnings), 1) self.assertTrue('must be positive' in validation_warnings[0][1])
def test_validation_invalid_batch(self): """Fisheries: Validate batch-processing option.""" from natcap.invest.fisheries import fisheries args = {'do_batch': 'foo'} validation_warnings = fisheries.validate(args, limit_to='do_batch') self.assertEqual(len(validation_warnings), 1) self.assertTrue( 'must be either True or False' in validation_warnings[0][1])
def test_validation_invalid_pop_csv(self): """Fisheries: Validate population CSV.""" from natcap.invest.fisheries import fisheries args = {'population_csv_path': 'foo'} validation_warnings = fisheries.validate( args, limit_to='population_csv_path') self.assertEqual(len(validation_warnings), 1) self.assertTrue('File not found' in validation_warnings[0][1])
def test_validation_invalid_aoi(self): """Fisheries: Validate AOI vector.""" from natcap.invest.fisheries import fisheries args = {'aoi_vector_path': 'not a vector'} validation_warnings = fisheries.validate(args, limit_to='aoi_vector_path') self.assertEqual(len(validation_warnings), 1) self.assertTrue('File not found' in validation_warnings[0][1])
def test_validation_batch(self): """Fisheries: Batch parameters (full model validation).""" from natcap.invest.fisheries import fisheries # Lobster args should be valid, has migration and validation portions # enabled. args = { u'alpha': 5.77e6, u'aoi_vector_path': os.path.join(SAMPLE_DATA, 'shapefile_belize', 'Lob_Belize_Subregions.shp'), u'beta': 2.885e6, u'do_batch': False, u'harvest_units': 'Weight', u'migr_cont': True, u'migration_dir': os.path.join(SAMPLE_DATA, 'input_lobster', 'Migrations'), u'population_csv_path': os.path.join(SAMPLE_DATA, 'input_lobster', 'population_params.csv'), u'population_type': 'Age-Based', u'recruitment_type': 'Beverton-Holt', u'sexsp': 'No', u'spawn_units': 'Weight', u'total_init_recruits': 1e5, u'total_recur_recruits': 2.16e11, u'total_timesteps': 100, u'val_cont': True, u'frac_post_process': 0.28633258, u'unit_price': 29.93, u'workspace_dir': self.workspace_dir, } validation_warnings = fisheries.validate(args) self.assertEqual(len(validation_warnings), 0)
def test_validation(self): """Fisheries: Full validation.""" from natcap.invest.fisheries import fisheries args = { u'alpha': 6050000.0, u'aoi_vector_path': os.path.join(SAMPLE_DATA, 'shapefile_galveston', 'Galveston_Subregion.shp'), u'beta': 4.14e-08, u'do_batch': False, u'harvest_units': 'Weight', u'migr_cont': False, u'population_csv_path': os.path.join(SAMPLE_DATA, 'input_shrimp', 'population_params.csv'), u'population_type': 'Stage-Based', u'recruitment_type': 'Fixed', u'sexsp': 'No', u'spawn_units': '', # should have a value u'total_init_recruits': 1e5, u'total_recur_recruits': 2.16e11, u'total_timesteps': 300, u'val_cont': False, u'results_suffix': 'foo', u'workspace_dir': self.workspace_dir, } validation_warnings = fisheries.validate(args) self.assertEqual(len(validation_warnings), 2) self.assertTrue('must have a value' in validation_warnings[0][1]) self.assertTrue( 'must be one of Individuals, Weight' in validation_warnings[1][1])
def test_validation_invalid_aoi_fields(self): """Fisheries: Validate AOI fields.""" from natcap.invest.fisheries import fisheries args = { 'aoi_vector_path': os.path.join(self.workspace_dir, 'aoi.gpkg') } gpkg_driver = gdal.GetDriverByName('GPKG') vector = gpkg_driver.Create(args['aoi_vector_path'], 0, 0, 0, gdal.GDT_Unknown) # Layer has no fields in it. layer = vector.CreateLayer('new_layer') layer = None vector = None validation_warnings = fisheries.validate(args, limit_to='aoi_vector_path') self.assertEqual(len(validation_warnings), 1) self.assertTrue( 'column name "Name" is missing' in validation_warnings[0][1])