added initial test

This commit is contained in:
Khalim Conn-Kowlessar 2026-01-27 08:43:58 +00:00
parent ac749e427e
commit b81b04a6b8
3 changed files with 56 additions and 6 deletions

View file

@ -410,7 +410,12 @@ class RoofRecommendations:
# ~~~~~ Sloping Ceiling Insulation Recommendation Logic ~~~~~ # ~~~~~ Sloping Ceiling Insulation Recommendation Logic ~~~~~
#################################################################################################### ####################################################################################################
if needs_sloping_ceiling: 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") 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. 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 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 phase: Phase of the recommendation
:param is_pitched: Is the roof pitched :param is_pitched: Is the roof pitched
:param is_flat: Is the roof flat :param is_flat: Is the roof flat
@ -799,7 +803,7 @@ class RoofRecommendations:
) )
new_description = "Pitched, insulated" 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_ending_config = RoofAttributes(new_description).process()
roof_simulation_config = check_simulation_difference( roof_simulation_config = check_simulation_difference(

View file

@ -1,4 +1,5 @@
import pytest import pytest
from unittest.mock import Mock
from backend.Property import Property from backend.Property import Property
from etl.epc.Record import EPCRecord from etl.epc.Record import EPCRecord
from recommendations.RoofRecommendations import RoofRecommendations 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 self, roof, has_sloping_ceiling_recommendation, primary_roof_is_sloped, expected_result
): ):
assert RoofRecommendations.is_sloping_ceiling_appropriate( assert RoofRecommendations.is_sloping_ceiling_appropriate(
@ -440,3 +441,50 @@ class TestRoofRecommendations:
has_sloping_ceiling_recommendation=has_sloping_ceiling_recommendation, has_sloping_ceiling_recommendation=has_sloping_ceiling_recommendation,
primary_roof_is_sloped=primary_roof_is_sloped primary_roof_is_sloped=primary_roof_is_sloped
) == expected_result ) == 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'
}

View file

@ -1,6 +1,4 @@
import os
import pytest import pytest
import pickle
import numpy as np import numpy as np
from unittest.mock import Mock, MagicMock from unittest.mock import Mock, MagicMock