import unittest from src.sample_data import apply_chorwad_sample_fallbacks, is_sample_site class SampleDataTests(unittest.TestCase): def test_sample_detection_is_narrow(self): self.assertTrue(is_sample_site("Chorwad Coastal Thesis Sample", "", "sample drawn boundary")) self.assertFalse(is_sample_site("Real thesis", "Chorwad site", "faculty CAD")) self.assertFalse(is_sample_site("Sample", "Mumbai site", "manual pin")) self.assertTrue(is_sample_site("", "", "", anchor_lat=21.00248, anchor_lon=70.24537)) self.assertFalse(is_sample_site("", "", "", anchor_lat=19.076, anchor_lon=72.8777)) def test_sample_fallback_fills_missing_layers_and_warns(self): identity, climate, context, topo, soil, evidence, warnings = apply_chorwad_sample_fallbacks( project_name="Chorwad Coastal Thesis Sample", site_name="Chorwad site", boundary_source="sample drawn boundary", site_identity=None, climate={"forecast": None, "recent_historical": None, "climate_normal": None}, osm_context={"counts": {}, "features": []}, topography={}, soil={}, ) self.assertEqual(identity["state"], "Gujarat") self.assertIn("forecast", climate) self.assertGreater(context["counts"]["water"], 0) self.assertGreater(topo["mean_elevation_m"], 0) self.assertIn("texture_signal", soil) self.assertEqual(len(evidence), 1) self.assertIn("demo/testing", warnings[0]) def test_sample_fallback_replaces_non_useful_identity(self): identity, *_ = apply_chorwad_sample_fallbacks( project_name="Chorwad Coastal Thesis Sample", site_name="Chorwad site", boundary_source="sample drawn boundary", site_identity={"source_url": "https://nominatim.openstreetmap.org/"}, climate={"forecast": {"current_temperature_c": 30}}, osm_context={"counts": {"roads/access": 1}}, topography={"mean_elevation_m": 5}, soil={"texture_signal": "sample"}, ) self.assertEqual(identity["state"], "Gujarat") def test_non_sample_does_not_modify_missing_layers(self): identity, climate, context, topo, soil, evidence, warnings = apply_chorwad_sample_fallbacks( project_name="Real Project", site_name="Real site", boundary_source="drawn boundary", site_identity=None, climate={}, osm_context={}, topography={}, soil={}, ) self.assertIsNone(identity) self.assertEqual(climate, {}) self.assertEqual(context, {}) self.assertEqual(topo, {}) self.assertEqual(soil, {}) self.assertEqual(evidence, []) self.assertEqual(warnings, []) def test_coordinate_sample_fallback_supports_polygon_only_demo(self): identity, climate, context, topo, soil, evidence, warnings = apply_chorwad_sample_fallbacks( project_name="", site_name="", boundary_source="", site_identity=None, climate={"forecast": None, "recent_historical": None, "climate_normal": None}, osm_context={"counts": {}, "features": []}, topography={}, soil={}, anchor_lat=21.00248, anchor_lon=70.24537, ) self.assertEqual(identity["state"], "Gujarat") self.assertIn("forecast", climate) self.assertGreater(context["counts"]["water"], 0) self.assertGreater(topo["mean_elevation_m"], 0) self.assertIn("texture_signal", soil) self.assertEqual(len(evidence), 1) self.assertIn("demo/testing", warnings[0]) if __name__ == "__main__": unittest.main()