from pathlib import Path import sys SCRIPTS = Path(__file__).resolve().parents[1] / "scripts" sys.path.insert(0, str(SCRIPTS)) from heat_sink_model import ( # noqa: E402 HeatSinkOverride, HeatSinkRecord, merge_approved_override, public_properties, ) def modeled_record(public_release=True): return HeatSinkRecord( heat_sink_id="osm:way:1", sink_class="hospital", annual_heat_mwh=4200, winter_peak_mw=1.2, summer_min_mw=0.2, base_load_mw=0.25, supply_temp_c=70, return_temp_c=50, evidence_state="modeled_estimated", source_url="https://www.openstreetmap.org/way/1", data_date="2026-08-09", public_release=public_release, ) def test_metered_override_replaces_model_but_preserves_source_lineage(): override = HeatSinkOverride( annual_heat_mwh=3900, winter_peak_mw=1.1, summer_min_mw=0.31, base_load_mw=0.31, supply_temp_c=68, return_temp_c=48, evidence_state="metered_direct", source_url="partner:facility-meter", data_date="2026-07-31", public_release=False, ) merged = merge_approved_override(modeled_record(), override) assert merged.annual_heat_mwh == 3900 assert merged.evidence_state == "metered_direct" assert merged.model_source_url == "https://www.openstreetmap.org/way/1" def test_private_record_public_properties_are_aggregated(): properties = public_properties(modeled_record(public_release=False)) assert "annual_heat_mwh" not in properties assert properties["demand_band"] == "1-5 GWhth/year" def test_public_record_can_disclose_approved_exact_values(): properties = public_properties(modeled_record(public_release=True)) assert properties["annual_heat_mwh"] == 4200 assert properties["base_load_mw"] == 0.25