From a975d870c93be1cc828d0e7257e14ca968df7966 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Thu, 25 Jun 2026 21:41:41 +0000 Subject: [PATCH] =?UTF-8?q?Map=20main=5Fheating=5Fcontrols=20in=20the=20ol?= =?UTF-8?q?der=20RdSAP=20mappers=20for=20the=20FE=20panel=20=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../domain/tests/test_from_rdsap_schema.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/datatypes/epc/domain/tests/test_from_rdsap_schema.py b/datatypes/epc/domain/tests/test_from_rdsap_schema.py index 2e689f69..a8d5261f 100644 --- a/datatypes/epc/domain/tests/test_from_rdsap_schema.py +++ b/datatypes/epc/domain/tests/test_from_rdsap_schema.py @@ -2653,3 +2653,52 @@ def test_gov_mappers_split_non_separated_conservatory(fixture: str) -> None: ) assert len(epc.sap_building_parts) == base_parts assert all(bp.construction_age_band is not None for bp in epc.sap_building_parts) + + +@pytest.mark.parametrize( + "schema_cls, mapper, fixture, expected", + [ + ( + RdSapSchema17_1, + EpcPropertyDataMapper.from_rdsap_schema_17_1, + "17_1.json", + "Programmer and room thermostat", + ), + ( + RdSapSchema18_0, + EpcPropertyDataMapper.from_rdsap_schema_18_0, + "18_0.json", + "Programmer, room thermostat and TRVs", + ), + ( + RdSapSchema19_0, + EpcPropertyDataMapper.from_rdsap_schema_19_0, + "19_0.json", + "Programmer, room thermostat and TRVs", + ), + ( + RdSapSchema20_0_0, + EpcPropertyDataMapper.from_rdsap_schema_20_0_0, + "20_0_0.json", + "Programmer, room thermostat and TRVs", + ), + ( + RdSapSchema21_0_0, + EpcPropertyDataMapper.from_rdsap_schema_21_0_0, + "21_0_0.json", + "Programmer, room thermostat and TRVs", + ), + ], +) +def test_rdsap_mappers_carry_main_heating_controls_display( + schema_cls: Any, mapper: Any, fixture: str, expected: str +) -> None: + # "Heating Control" panel row. 17.0 and 21.0.1 already map it; these five + # dropped it, leaving the FE "Unknown" despite the cert lodging it. Display + # only — the calculator reads the control CODE separately (ADR-0037 family). + schema = from_dict(schema_cls, load(fixture)) + + result = mapper(schema) + + assert result.main_heating_controls is not None + assert result.main_heating_controls.description == expected