diff --git a/datatypes/epc/domain/tests/test_from_rdsap_schema.py b/datatypes/epc/domain/tests/test_from_rdsap_schema.py index 5a2218d3..2e689f69 100644 --- a/datatypes/epc/domain/tests/test_from_rdsap_schema.py +++ b/datatypes/epc/domain/tests/test_from_rdsap_schema.py @@ -458,6 +458,23 @@ class TestFromRdSapSchema21_0_1: assert result.led_fixed_lighting_bulbs_count == 0 + def test_banded_flat_location_string_coerced_to_band_floor_int(self) -> None: + # The gov API lodges flat_location (the flat's floor number) as a plain + # int on most certs, but on high floors as a banded string "20+" (floor + # 20 or above) — e.g. cert 2481-2122-4211-1172-4722 (UPRN 6027561). + # The epc_flat_details.flat_location column is a NOT-NULL integer, so the + # raw string crashed the modelling_e2e insert (psycopg2 + # InvalidTextRepresentation, portfolio 796 run). Coerce the band to its + # floor (20); Elmhurst caps the floor number at 30. + data = load("21_0_1.json") + data["sap_flat_details"]["flat_location"] = "20+" + schema = from_dict(RdSapSchema21_0_1, data) + + result = EpcPropertyDataMapper.from_rdsap_schema_21_0_1(schema) + + assert result.sap_flat_details is not None + assert result.sap_flat_details.flat_location == 20 + def test_uprn(self, result: EpcPropertyData) -> None: assert result.uprn == 12457