diff --git a/recommendations/RoofRecommendations.py b/recommendations/RoofRecommendations.py index 06ff306b..d7eb5fbb 100644 --- a/recommendations/RoofRecommendations.py +++ b/recommendations/RoofRecommendations.py @@ -410,7 +410,12 @@ class RoofRecommendations: # ~~~~~ Sloping Ceiling Insulation Recommendation Logic ~~~~~ #################################################################################################### if needs_sloping_ceiling: - self.recommend_sloping_ceiling() + self.recommend_sloping_ceiling( + phase=phase, + u_value=u_value, + non_invasive_recommendations=non_invasive_recommendations + ) + return raise NotImplementedError("Implement me") @@ -453,7 +458,6 @@ class RoofRecommendations: could be traditional roofing materials like bitumen-based felt, rubber membranes like EPDM, or fiberglass. :param u_value: U-value of the roof before any retrofit measures have been installed - :param insulation_thickness: Existing Insulation thickness of the loft :param phase: Phase of the recommendation :param is_pitched: Is the roof pitched :param is_flat: Is the roof flat @@ -799,7 +803,7 @@ class RoofRecommendations: ) new_description = "Pitched, insulated" - new_efficiency = "Good" + new_efficiency = "Average" # 75mm insulation only results in average performance category roof_ending_config = RoofAttributes(new_description).process() roof_simulation_config = check_simulation_difference( diff --git a/recommendations/tests/test_roof_recommendations.py b/recommendations/tests/test_roof_recommendations.py index ef02d050..aa11fd28 100644 --- a/recommendations/tests/test_roof_recommendations.py +++ b/recommendations/tests/test_roof_recommendations.py @@ -1,4 +1,5 @@ import pytest +from unittest.mock import Mock from backend.Property import Property from etl.epc.Record import EPCRecord from recommendations.RoofRecommendations import RoofRecommendations @@ -430,7 +431,7 @@ class TestRoofRecommendations: ) ] ) - def test_sloping_ceiling_valid( + def test_is_sloping_ceiling_appropriate( self, roof, has_sloping_ceiling_recommendation, primary_roof_is_sloped, expected_result ): assert RoofRecommendations.is_sloping_ceiling_appropriate( @@ -440,3 +441,50 @@ class TestRoofRecommendations: has_sloping_ceiling_recommendation=has_sloping_ceiling_recommendation, primary_roof_is_sloped=primary_roof_is_sloped ) == expected_result + + def test_sloping_ceiling_pitched_no_insulation(self): + property_instance = Mock( + id=0, + roof={ + 'original_description': 'Pitched, no insulation', 'clean_description': 'Pitched, no insulation', + 'thermal_transmittance': None, 'thermal_transmittance_unit': None, 'is_pitched': True, + 'is_roof_room': False, 'is_loft': False, 'is_flat': False, 'is_thatched': False, + 'is_at_rafters': False, 'is_assumed': False, 'has_dwelling_above': False, 'is_valid': True, + 'insulation_thickness': 'none' + }, + roof_area=64.085, + data={"county": None, "local-authority-label": "Manchester"} + ) + property_instance.age_band = "D" + property_instance.already_installed = [] + property_instance.non_invasive_recommendations = [ + {'type': 'flat_roof_insulation', 'sap_points': 9, 'survey': True}, + {'type': 'sloping_ceiling_insulation', 'sap_points': 9, 'survey': True}, + {'type': 'cavity_wall_insulation', 'sap_points': 6, 'survey': True}, + {'type': 'suspended_floor_insulation', 'sap_points': 2, 'survey': True}, + {'type': 'roomstat_programmer_trvs', 'sap_points': 3, 'survey': True}, + {'type': 'time_temperature_zone_control', 'sap_points': 3, 'survey': True}, + {'type': 'solar_pv', 'sap_points': 5, 'survey': True, 'suitable': True} + ] + + roof_recommender = RoofRecommendations(property_instance=property_instance, materials=[]) + assert not roof_recommender.recommendations + + roof_recommender.recommend(phase=0) + assert len(roof_recommender.recommendations) == 1 + + assert roof_recommender.recommendations[0]["type"] == "sloping_ceiling_insulation" + assert roof_recommender.recommendations[0]["measure_type"] == "sloping_ceiling_insulation" + assert ( + roof_recommender.recommendations[0]["description"] == + "Insulate sloping ceilings at the rafters and re-decorate" + ) + assert roof_recommender.recommendations[0]["simulation_config"] == { + 'roof_insulation_thickness_ending': 'average', + 'roof_thermal_transmittance_ending': 0.5, + 'roof_energy_eff_ending': 'Average' + } + + assert roof_recommender.recommendations[0]["description_simulation"] == { + 'roof-description': 'Pitched, insulated', 'roof-energy-eff': 'Good' + } diff --git a/recommendations/tests/test_wall_recommendations.py b/recommendations/tests/test_wall_recommendations.py index 18560118..c54582ad 100644 --- a/recommendations/tests/test_wall_recommendations.py +++ b/recommendations/tests/test_wall_recommendations.py @@ -1,6 +1,4 @@ -import os import pytest -import pickle import numpy as np from unittest.mock import Mock, MagicMock