mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
Assert every water-heating reclassify target round-trips to a resolvable archetype 🟩
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
51abd15289
commit
1debf5f5a3
1 changed files with 33 additions and 0 deletions
|
|
@ -4,6 +4,11 @@ and already-correct rows alone, and is idempotent (#1376 / ADR-0043)."""
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from domain.epc.property_overlays.water_heating_overlay import (
|
||||
water_heating_overlay_for,
|
||||
)
|
||||
from domain.epc.property_overrides.water_heating_guard import water_heating_guard
|
||||
from domain.epc.property_overrides.water_heating_type import WaterHeatingType
|
||||
from scripts.reclassify_water_heating import water_heating_corrections
|
||||
|
||||
|
||||
|
|
@ -58,6 +63,34 @@ def test_house_coal_bucket_rows_are_remapped_to_faithful_fuels() -> None:
|
|||
}
|
||||
|
||||
|
||||
def test_every_guard_target_round_trips_to_a_resolvable_archetype() -> None:
|
||||
# The reclassify decides via the guard; every archetype the guard can emit for
|
||||
# the house-coal bucket must be a real member that decodes to SAP water-heating
|
||||
# codes — a guard/overlay drift can't silently write an unmodellable value to
|
||||
# the DB (ADR-0043).
|
||||
house_coal_bucket = [
|
||||
"from main heating system: wood logs",
|
||||
"from main heating system: dual fuel: mineral and wood",
|
||||
"hot-water only community scheme - boilers: biomass (community)",
|
||||
"hot-water only community scheme - boilers: heat from boilers using "
|
||||
"biodiesel from any source (community)",
|
||||
"no hot water system present - electric immersion assumed: "
|
||||
"no heating or hot water",
|
||||
"from main heating system: house coal",
|
||||
]
|
||||
|
||||
for description in house_coal_bucket:
|
||||
member = water_heating_guard(description)
|
||||
|
||||
assert member is not None, description
|
||||
assert member in WaterHeatingType, description
|
||||
simulation = water_heating_overlay_for(member.value, 0)
|
||||
assert simulation is not None, description
|
||||
assert simulation.heating is not None, description
|
||||
assert simulation.heating.water_heating_code is not None, description
|
||||
assert simulation.heating.water_heating_fuel is not None, description
|
||||
|
||||
|
||||
def test_already_corrected_rows_need_no_change() -> None:
|
||||
# Act / Assert — idempotent: a re-run against corrected data is a no-op.
|
||||
assert (
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue