mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Added uvalue unit tests
This commit is contained in:
parent
0da24a955c
commit
9ee8b53cae
4 changed files with 46 additions and 18 deletions
|
|
@ -65,7 +65,7 @@ class WallRecommendations(Definitions):
|
|||
|
||||
# Current logic: If the property is in a conservation area/heritage building/listed building or a flat,
|
||||
# it is not suitable for EWI
|
||||
if (not self.property.restricted_measures) or (self.property.data["property-type"].lower() == "flat"):
|
||||
if self.property.restricted_measures or (self.property.data["property-type"].lower() == "flat"):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ solid_floor_insulation_parts = [
|
|||
parts = suspended_floor_insulation_parts + solid_floor_insulation_parts
|
||||
|
||||
|
||||
class TestWallRecommendations:
|
||||
class TestFloorRecommendations:
|
||||
|
||||
@pytest.fixture
|
||||
def input_properties(self):
|
||||
|
|
@ -86,23 +86,20 @@ class TestWallRecommendations:
|
|||
property_mock.full_sap_epc = {"lodgement-date": "2000-01-01"} # or any date you want
|
||||
property_mock.data = {"construction-age-band": "1950"} # or any other data that fits your tests
|
||||
|
||||
mock_wall_rec_instance = FloorRecommendations(property_mock, "Decile 1", parts)
|
||||
mock_wall_rec_instance = FloorRecommendations(property_mock, parts)
|
||||
return mock_wall_rec_instance
|
||||
|
||||
def test_init(self, input_properties):
|
||||
obj = FloorRecommendations(
|
||||
property_instance=input_properties[0],
|
||||
total_floor_area_group_decile="Decile 1",
|
||||
materials=parts
|
||||
)
|
||||
assert obj
|
||||
assert obj.property
|
||||
assert obj.total_floor_area_group_decile == "Decile 1"
|
||||
|
||||
def test_other_premises_below(self, input_properties):
|
||||
recommender = FloorRecommendations(
|
||||
property_instance=input_properties[0],
|
||||
total_floor_area_group_decile="Decile 1",
|
||||
materials=parts
|
||||
)
|
||||
recommender.recommend()
|
||||
|
|
@ -119,16 +116,17 @@ class TestWallRecommendations:
|
|||
input_properties[2].floor_area = 50
|
||||
input_properties[2].walls["is_park_home"] = False
|
||||
input_properties[2].age_band = "A"
|
||||
input_properties[2].perimeter = 20
|
||||
input_properties[2].wall_type = "solid brick"
|
||||
|
||||
recommender = FloorRecommendations(
|
||||
property_instance=input_properties[2],
|
||||
total_floor_area_group_decile="Decile 1",
|
||||
materials=parts
|
||||
)
|
||||
assert recommender.estimated_u_value is None
|
||||
recommender.recommend()
|
||||
assert recommender.property.floor["is_suspended"]
|
||||
assert recommender.estimated_u_value == 0.52
|
||||
assert recommender.estimated_u_value == 0.39
|
||||
assert recommender.recommendations
|
||||
|
||||
types = {part["type"] for x in recommender.recommendations for part in x["parts"]}
|
||||
|
|
@ -143,7 +141,6 @@ class TestWallRecommendations:
|
|||
"""
|
||||
recommender = FloorRecommendations(
|
||||
property_instance=input_properties[3],
|
||||
total_floor_area_group_decile="Decile 1",
|
||||
materials=parts
|
||||
)
|
||||
assert recommender.estimated_u_value is None
|
||||
|
|
@ -161,17 +158,18 @@ class TestWallRecommendations:
|
|||
input_properties[4].floor_area = 100
|
||||
input_properties[4].walls["is_park_home"] = False
|
||||
input_properties[4].age_band = "B"
|
||||
input_properties[4].perimeter = 50
|
||||
input_properties[4].wall_type = "solid brick"
|
||||
|
||||
recommender = FloorRecommendations(
|
||||
property_instance=input_properties[4],
|
||||
total_floor_area_group_decile="Decile 1",
|
||||
materials=parts
|
||||
)
|
||||
assert recommender.estimated_u_value is None
|
||||
recommender.recommend()
|
||||
assert not recommender.property.floor["is_suspended"]
|
||||
assert recommender.property.floor["is_solid"]
|
||||
assert recommender.estimated_u_value == 0.63
|
||||
assert recommender.estimated_u_value == 0.71
|
||||
assert recommender.recommendations
|
||||
|
||||
types = {part["type"] for x in recommender.recommendations for part in x["parts"]}
|
||||
|
|
@ -185,7 +183,6 @@ class TestWallRecommendations:
|
|||
|
||||
recommender = FloorRecommendations(
|
||||
property_instance=input_properties[6],
|
||||
total_floor_area_group_decile="Decile 1",
|
||||
materials=parts
|
||||
)
|
||||
assert recommender.estimated_u_value is None
|
||||
|
|
|
|||
|
|
@ -304,3 +304,32 @@ def test_estimate_perimeter_invalid_inputs():
|
|||
recommendation_utils.estimate_perimeter(-100, 5)
|
||||
with pytest.raises(ValueError):
|
||||
recommendation_utils.estimate_perimeter(100, -5)
|
||||
|
||||
|
||||
def test_solid_floor():
|
||||
assert math.isclose(
|
||||
recommendation_utils.get_floor_u_value(
|
||||
'solid', 100, 40, 'A', 'stone', insulation_thickness="20mm"
|
||||
),
|
||||
0.4, rel_tol=1e-2)
|
||||
|
||||
|
||||
def test_suspended_floor():
|
||||
assert math.isclose(
|
||||
recommendation_utils.get_floor_u_value(
|
||||
'suspended', 100, 40, 'A', 'timber frame', insulation_thickness="20mm"
|
||||
),
|
||||
0.49, rel_tol=1e-2)
|
||||
|
||||
|
||||
def test_invalid_floor_type():
|
||||
with pytest.raises(ValueError):
|
||||
recommendation_utils.get_floor_u_value(
|
||||
'invalid_type', 100, 40, 'A', 'stone', insulation_thickness="20mm"
|
||||
)
|
||||
|
||||
|
||||
def test_park_home():
|
||||
assert recommendation_utils.get_floor_u_value(
|
||||
'suspended', 100, 40, 'A', 'park home', insulation_thickness="20mm"
|
||||
) == 0
|
||||
|
|
|
|||
|
|
@ -11,12 +11,6 @@ from recommendations.recommendation_utils import is_diminishing_returns
|
|||
# os.path.abspath(os.path.dirname(__file__)) + "/recommendations/tests/test_data/input_properties.pkl", "rb"
|
||||
# ) as f:
|
||||
# input_properties = pickle.load(f)
|
||||
#
|
||||
# with open(
|
||||
# os.path.abspath(os.path.dirname(__file__)) + "/recommendations/tests/test_data/uvalue_estimates.pkl", "rb"
|
||||
# ) as f:
|
||||
# uvalue_estimates = pickle.load(f)
|
||||
|
||||
|
||||
external_wall_insulation_parts = [
|
||||
{
|
||||
|
|
@ -248,6 +242,9 @@ class TestWallRecommendations:
|
|||
already has really good insulation, we do NOT recommend any measures for this property
|
||||
"""
|
||||
input_properties[0].year_built = 2014
|
||||
input_properties[0].in_conservation_area = None
|
||||
input_properties[0].restricted_measures = False
|
||||
|
||||
recommender = WallRecommendations(
|
||||
property_instance=input_properties[0],
|
||||
materials=wall_parts
|
||||
|
|
@ -271,6 +268,7 @@ class TestWallRecommendations:
|
|||
input_properties[1].walls["clean_description"] = "Solid brick, as built, no insulation"
|
||||
input_properties[1].walls["is_sandstone_or_limestone"] = False
|
||||
input_properties[1].age_band = "A"
|
||||
input_properties[1].restricted_measures = False
|
||||
|
||||
recommender = WallRecommendations(
|
||||
property_instance=input_properties[1],
|
||||
|
|
@ -307,6 +305,7 @@ class TestWallRecommendations:
|
|||
"""
|
||||
|
||||
input_properties[6].year_built = 1991
|
||||
input_properties[6].restricted_measures = False
|
||||
recommender = WallRecommendations(
|
||||
property_instance=input_properties[6],
|
||||
materials=wall_parts
|
||||
|
|
@ -383,6 +382,7 @@ class TestWallRecommendationsBase:
|
|||
property_mock = MagicMock(spec=Property)
|
||||
property_mock.full_sap_epc = {"lodgement-date": "1999-12-31"}
|
||||
property_mock.in_conservation_area = "not_in_conservation_area"
|
||||
property_mock.restricted_measures = False
|
||||
return property_mock
|
||||
|
||||
@pytest.fixture
|
||||
|
|
@ -394,6 +394,7 @@ class TestWallRecommendationsBase:
|
|||
|
||||
def test_ewi_valid_in_conservation_area(self, wall_recommendations_instance):
|
||||
wall_recommendations_instance.property.in_conservation_area = "in_conversation_area"
|
||||
wall_recommendations_instance.property.restricted_measures = True
|
||||
assert wall_recommendations_instance.ewi_valid is False
|
||||
|
||||
def test_ewi_valid_is_flat(self, wall_recommendations_instance):
|
||||
|
|
@ -402,6 +403,7 @@ class TestWallRecommendationsBase:
|
|||
|
||||
def test_ewi_valid_not_in_conservation_area_and_not_flat(self, wall_recommendations_instance):
|
||||
wall_recommendations_instance.property.in_conservation_area = "not_in_conversation_area"
|
||||
wall_recommendations_instance.property.restricted_measures = False
|
||||
wall_recommendations_instance.property.data = {"property-type": "house"}
|
||||
assert wall_recommendations_instance.ewi_valid is True
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue