Resolve the boiler archetype by fuel when building a property's overlays 🟥

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-07-24 09:19:31 +00:00
parent 58e2186506
commit abbad2b44d

View file

@ -72,6 +72,46 @@ def test_resolve_boiler_archetype_leaves_other_cases_unchanged(
assert resolved == heating_value
def test_gas_boiler_override_on_oil_fuel_builds_the_oil_boiler_overlay() -> None:
# ADR-0067: a fuel-agnostic gas-boiler override sitting on an oil `main_fuel`
# must resolve to the oil boiler at overlay time (the join reads the sibling
# fuel row), so it scores the oil boiler code (127), not the gas default (102).
# Arrange
overrides = ResolvedPropertyOverrides(
rows=(
ResolvedPropertyOverride("main_heating_system", 0, "Gas boiler, regular"),
ResolvedPropertyOverride("main_fuel", 0, "oil"),
)
)
# Act
overlays = overlays_from(overrides)
# Assert — the heating overlay carries the oil boiler code.
heating = next(o.heating for o in overlays if o.heating is not None)
assert heating.sap_main_heating_code == 127
def test_gas_boiler_override_on_gas_fuel_stays_a_gas_boiler() -> None:
# The join only fires for non-gas fuels; a genuine gas boiler is untouched.
# Arrange
overrides = ResolvedPropertyOverrides(
rows=(
ResolvedPropertyOverride("main_heating_system", 0, "Gas boiler, regular"),
ResolvedPropertyOverride("main_fuel", 0, "mains gas"),
)
)
# Act
overlays = overlays_from(overrides)
# Assert — the gas regular condensing code (102).
heating = next(o.heating for o in overlays if o.heating is not None)
assert heating.sap_main_heating_code == 102
def test_roof_type_row_produces_a_roof_overlay() -> None:
# Arrange
overrides = ResolvedPropertyOverrides(