From 8261a61454bc8de9f828f6afbb060e74ae102554 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 18 Oct 2023 14:59:02 +1100 Subject: [PATCH] added new wall recommendations tests --- recommendations/WallRecommendations.py | 17 ++- .../tests/test_wall_recommendations.py | 108 +++++++++++++++++- 2 files changed, 114 insertions(+), 11 deletions(-) diff --git a/recommendations/WallRecommendations.py b/recommendations/WallRecommendations.py index 66ecdf3b..b3eea7e0 100644 --- a/recommendations/WallRecommendations.py +++ b/recommendations/WallRecommendations.py @@ -112,15 +112,6 @@ class WallRecommendations(Definitions): self.estimated_u_value = u_value - if self.property.walls["is_solid_brick"] | self.property.walls["is_system_built"]: - - if u_value >= self.BUILDING_REGULATIONS_PART_L_MAX_U_VALUE: - self.find_insulation(u_value) - return - - # If the u-value is within regulations, we don't do anything - return - if is_cavity_wall: if u_value >= self.BUILDING_REGULATIONS_PART_L_MAX_U_VALUE: # Test filling cavity @@ -128,7 +119,13 @@ class WallRecommendations(Definitions): return - raise NotImplementedError("Not implemented yet") + # Remaining wall types are treated with IWI or EWI + if u_value >= self.BUILDING_REGULATIONS_PART_L_MAX_U_VALUE: + self.find_insulation(u_value) + return + + # If the u-value is within regulations, we don't do anything + return def find_cavity_insulation(self, u_value, insulation_thickness): """ diff --git a/recommendations/tests/test_wall_recommendations.py b/recommendations/tests/test_wall_recommendations.py index c25c00f9..334c02b7 100644 --- a/recommendations/tests/test_wall_recommendations.py +++ b/recommendations/tests/test_wall_recommendations.py @@ -519,6 +519,10 @@ class TestCavityWallRecommensations: } input_property2.age_band = "F" input_property2.insulation_wall_area = 120 + input_property2.restricted_measures = False + input_property2.data = {"property-type": "house"} + + assert input_property2.walls["is_system_built"] recommender2 = WallRecommendations( property_instance=input_property2, @@ -527,4 +531,106 @@ class TestCavityWallRecommensations: assert not recommender2.recommendations - recommender2.recommend() \ No newline at end of file + recommender2.recommend() + + assert recommender2.recommendations + assert len(recommender2.recommendations) == 6 + assert recommender2.estimated_u_value == 1 + assert np.isclose(recommender2.recommendations[0]["new_u_value"], 0.29) + assert np.isclose(recommender2.recommendations[0]["cost"], 10800) + assert recommender2.recommendations[0]["parts"][0]["type"] == "external_wall_insulation" + assert recommender2.recommendations[0]["parts"][0]["depths"] == [90] + + assert np.isclose(recommender2.recommendations[5]["new_u_value"], 0.29) + assert np.isclose(recommender2.recommendations[5]["cost"], 2400) + assert recommender2.recommendations[5]["parts"][0]["type"] == "internal_wall_insulation" + assert recommender2.recommendations[5]["parts"][0]["depths"] == [20] + + assert np.isclose(recommender2.recommendations[3]["new_u_value"], 0.28) + assert np.isclose(recommender2.recommendations[3]["cost"], 4800) + assert recommender2.recommendations[3]["parts"][0]["type"] == "external_wall_insulation" + assert recommender2.recommendations[3]["parts"][0]["depths"] == [40] + + def test_timber_frame_wall(self): + input_property3 = Property(id=1, postcode="F4k3 2", address1="223 fake street", epc_client=Mock()) + input_property3.walls = { + 'original_description': 'Timber frame, as built, no insulation (assumed)', + 'clean_description': 'Timber frame, as built, no insulation', + 'thermal_transmittance': None, 'thermal_transmittance_unit': None, + 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': True, 'is_granite_or_whinstone': False, + 'is_as_built': True, 'is_cob': False, 'is_assumed': True, + 'is_sandstone_or_limestone': False, 'is_park_home': False, + 'insulation_thickness': 'none', 'external_insulation': False, + 'internal_insulation': False + } + input_property3.age_band = "B" + input_property3.insulation_wall_area = 99 + input_property3.restricted_measures = False + input_property3.data = {"property-type": "house"} + + assert input_property3.walls["is_timber_frame"] + + recommender3 = WallRecommendations( + property_instance=input_property3, + materials=internal_wall_insulation_parts + external_wall_insulation_parts + ) + + assert not recommender3.recommendations + + recommender3.recommend() + + assert recommender3.recommendations + assert len(recommender3.recommendations) == 2 + assert recommender3.estimated_u_value == 1.9 + assert np.isclose(recommender3.recommendations[0]["new_u_value"], 0.26) + assert np.isclose(recommender3.recommendations[0]["cost"], 12375) + assert recommender3.recommendations[0]["parts"][0]["type"] == "external_wall_insulation" + assert recommender3.recommendations[0]["parts"][0]["depths"] == [125] + + assert np.isclose(recommender3.recommendations[1]["new_u_value"], 0.26) + assert np.isclose(recommender3.recommendations[1]["cost"], 4950) + assert recommender3.recommendations[1]["parts"][0]["type"] == "external_wall_insulation" + assert recommender3.recommendations[1]["parts"][0]["depths"] == [50] + + def test_granite_or_whinstone_wall(self): + input_property4 = Property(id=1, postcode="F4k3 2", address1="223 fake street", epc_client=Mock()) + input_property4.walls = { + 'original_description': 'Granite or whinstone, as built, no insulation (assumed)', + 'clean_description': 'Granite or whinstone, as built, no insulation', + 'thermal_transmittance': None, 'thermal_transmittance_unit': None, + 'is_cavity_wall': False, 'is_filled_cavity': False, 'is_solid_brick': False, + 'is_system_built': False, 'is_timber_frame': False, 'is_granite_or_whinstone': True, + 'is_as_built': True, 'is_cob': False, 'is_assumed': True, + 'is_sandstone_or_limestone': False, 'is_park_home': False, + 'insulation_thickness': 'none', 'external_insulation': False, + 'internal_insulation': False + } + input_property4.age_band = "A" + input_property4.insulation_wall_area = 223 + input_property4.restricted_measures = False + input_property4.data = {"property-type": "Bungalow"} + + assert input_property4.walls["is_granite_or_whinstone"] + + recommender4 = WallRecommendations( + property_instance=input_property4, + materials=internal_wall_insulation_parts + external_wall_insulation_parts + ) + + assert not recommender4.recommendations + + recommender4.recommend() + + assert recommender4.recommendations + assert len(recommender4.recommendations) == 2 + assert recommender4.estimated_u_value == 2.3 + assert np.isclose(recommender4.recommendations[0]["new_u_value"], 0.27) + assert np.isclose(recommender4.recommendations[0]["cost"], 27875) + assert recommender4.recommendations[0]["parts"][0]["type"] == "external_wall_insulation" + assert recommender4.recommendations[0]["parts"][0]["depths"] == [125] + + assert np.isclose(recommender4.recommendations[1]["new_u_value"], 0.27) + assert np.isclose(recommender4.recommendations[1]["cost"], 11150) + assert recommender4.recommendations[1]["parts"][0]["type"] == "external_wall_insulation" + assert recommender4.recommendations[1]["parts"][0]["depths"] == [50]