fixed recommendation unit tests

This commit is contained in:
Khalim Conn-Kowlessar 2024-01-19 18:28:26 +00:00
parent 40976fd395
commit bbb4892437
2 changed files with 80 additions and 58 deletions

View file

@ -7,6 +7,7 @@ from recommendations.WallRecommendations import WallRecommendations
from backend.Property import Property from backend.Property import Property
from recommendations.recommendation_utils import is_diminishing_returns from recommendations.recommendation_utils import is_diminishing_returns
from recommendations.tests.test_data.materials import materials from recommendations.tests.test_data.materials import materials
from etl.epc.Record import EPCRecord
# with open( # with open(
@ -231,7 +232,9 @@ class TestWallRecommendationsBase:
class TestCavityWallRecommensations: class TestCavityWallRecommensations:
def test_fill_empty_cavity(self): def test_fill_empty_cavity(self):
input_property = Property(id=1, postcode="F4k3", address="123 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"county": "Derbyshire"}
input_property = Property(id=1, postcode="F4k3", address="123 fake street", epc_record=epc_record)
input_property.walls = { input_property.walls = {
'original_description': 'Cavity wall, as built, no insulation (assumed)', 'original_description': 'Cavity wall, as built, no insulation (assumed)',
'clean_description': 'Cavity wall, as built, no insulation', 'clean_description': 'Cavity wall, as built, no insulation',
@ -245,7 +248,6 @@ class TestCavityWallRecommensations:
} }
input_property.age_band = "C" input_property.age_band = "C"
input_property.insulation_wall_area = 50 input_property.insulation_wall_area = 50
input_property.data = {"county": "Derbyshire"}
recommender = WallRecommendations( recommender = WallRecommendations(
property_instance=input_property, property_instance=input_property,
@ -265,7 +267,9 @@ class TestCavityWallRecommensations:
assert np.isclose(recommender.recommendations[1]["total"], 2004.6600000000003) assert np.isclose(recommender.recommendations[1]["total"], 2004.6600000000003)
def test_fill_partial_filled_cavity(self): def test_fill_partial_filled_cavity(self):
input_property = Property(id=1, postcode="F4k3", address="123 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"county": "County Durham"}
input_property = Property(id=1, postcode="F4k3", address="123 fake street", epc_record=epc_record)
input_property.walls = { input_property.walls = {
'original_description': 'Cavity wall, as built, partial insulation (assumed)', 'original_description': 'Cavity wall, as built, partial insulation (assumed)',
'clean_description': 'Cavity wall, as built, partial insulation', 'clean_description': 'Cavity wall, as built, partial insulation',
@ -279,7 +283,6 @@ class TestCavityWallRecommensations:
} }
input_property.age_band = "C" input_property.age_band = "C"
input_property.insulation_wall_area = 50 input_property.insulation_wall_area = 50
input_property.data = {"county": "County Durham"}
recommender = WallRecommendations( recommender = WallRecommendations(
property_instance=input_property, property_instance=input_property,
@ -299,7 +302,9 @@ class TestCavityWallRecommensations:
assert np.isclose(recommender.recommendations[1]["total"], 1999.9350000000002) assert np.isclose(recommender.recommendations[1]["total"], 1999.9350000000002)
def test_system_built_wall(self): def test_system_built_wall(self):
input_property2 = Property(id=1, postcode="F4k3 2", address="223 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"property-type": "House", "county": "Derbyshire", "built-form": "Detached"}
input_property2 = Property(id=1, postcode="F4k3 2", address="223 fake street", epc_record=epc_record)
input_property2.walls = { input_property2.walls = {
'original_description': 'System built, as built, no insulation (assumed)', 'original_description': 'System built, as built, no insulation (assumed)',
'clean_description': 'System built, as built, no insulation', 'clean_description': 'System built, as built, no insulation',
@ -314,7 +319,6 @@ class TestCavityWallRecommensations:
input_property2.age_band = "F" input_property2.age_band = "F"
input_property2.insulation_wall_area = 120 input_property2.insulation_wall_area = 120
input_property2.restricted_measures = False input_property2.restricted_measures = False
input_property2.data = {"property-type": "House", "county": "Derbyshire", "built-form": "Detached"}
assert input_property2.walls["is_system_built"] assert input_property2.walls["is_system_built"]
@ -346,7 +350,9 @@ class TestCavityWallRecommensations:
assert recommender2.recommendations[6]["parts"][0]["depth"] == 52.5 assert recommender2.recommendations[6]["parts"][0]["depth"] == 52.5
def test_timber_frame_wall(self): def test_timber_frame_wall(self):
input_property3 = Property(id=1, postcode="F4k3 2", address="223 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"property-type": "House", "county": "Derbyshire", "built-form": "Semi-Detached"}
input_property3 = Property(id=1, postcode="F4k3 2", address="223 fake street", epc_record=epc_record)
input_property3.walls = { input_property3.walls = {
'original_description': 'Timber frame, as built, no insulation (assumed)', 'original_description': 'Timber frame, as built, no insulation (assumed)',
'clean_description': 'Timber frame, as built, no insulation', 'clean_description': 'Timber frame, as built, no insulation',
@ -361,7 +367,6 @@ class TestCavityWallRecommensations:
input_property3.age_band = "B" input_property3.age_band = "B"
input_property3.insulation_wall_area = 99 input_property3.insulation_wall_area = 99
input_property3.restricted_measures = False input_property3.restricted_measures = False
input_property3.data = {"property-type": "House", "county": "Derbyshire", "built-form": "Semi-Detached"}
assert input_property3.walls["is_timber_frame"] assert input_property3.walls["is_timber_frame"]
@ -388,7 +393,9 @@ class TestCavityWallRecommensations:
assert recommender3.recommendations[1]["parts"][0]["depth"] == 150.0 assert recommender3.recommendations[1]["parts"][0]["depth"] == 150.0
def test_granite_or_whinstone_wall(self): def test_granite_or_whinstone_wall(self):
input_property4 = Property(id=1, postcode="F4k3 2", address="223 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"property-type": "Bungalow", "county": "Derbyshire", "built-form": "Detached"}
input_property4 = Property(id=1, postcode="F4k3 2", address="223 fake street", epc_record=epc_record)
input_property4.walls = { input_property4.walls = {
'original_description': 'Granite or whinstone, as built, no insulation (assumed)', 'original_description': 'Granite or whinstone, as built, no insulation (assumed)',
'clean_description': 'Granite or whinstone, as built, no insulation', 'clean_description': 'Granite or whinstone, as built, no insulation',
@ -403,7 +410,6 @@ class TestCavityWallRecommensations:
input_property4.age_band = "A" input_property4.age_band = "A"
input_property4.insulation_wall_area = 223 input_property4.insulation_wall_area = 223
input_property4.restricted_measures = False input_property4.restricted_measures = False
input_property4.data = {"property-type": "Bungalow", "county": "Derbyshire", "built-form": "Detached"}
assert input_property4.walls["is_granite_or_whinstone"] assert input_property4.walls["is_granite_or_whinstone"]
@ -430,7 +436,9 @@ class TestCavityWallRecommensations:
assert recommender4.recommendations[1]["parts"][0]["depth"] == 150 assert recommender4.recommendations[1]["parts"][0]["depth"] == 150
def test_cob_wall(self): def test_cob_wall(self):
input_property5 = Property(id=1, postcode="F4k3 2", address="223 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"property-type": "Bungalow", "county": "Derbyshire", "built-form": "Detached"}
input_property5 = Property(id=1, postcode="F4k3 2", address="223 fake street", epc_record=epc_record)
input_property5.walls = { input_property5.walls = {
'original_description': 'Cob, as built', 'original_description': 'Cob, as built',
'clean_description': 'Cob, as built', 'clean_description': 'Cob, as built',
@ -445,7 +453,6 @@ class TestCavityWallRecommensations:
input_property5.age_band = "E" input_property5.age_band = "E"
input_property5.insulation_wall_area = 77 input_property5.insulation_wall_area = 77
input_property5.restricted_measures = False input_property5.restricted_measures = False
input_property5.data = {"property-type": "Bungalow", "county": "Derbyshire", "built-form": "Detached"}
assert input_property5.walls["is_cob"] assert input_property5.walls["is_cob"]
@ -472,7 +479,9 @@ class TestCavityWallRecommensations:
assert recommender5.recommendations[3]["parts"][0]["depth"] == 100 assert recommender5.recommendations[3]["parts"][0]["depth"] == 100
def test_sandstone_or_limestone_wall(self): def test_sandstone_or_limestone_wall(self):
input_property6 = Property(id=1, postcode="F4k3 6", address="623 fake street") epc_record = EPCRecord()
epc_record.prepared_epc = {"property-type": "House", "county": "Derbyshire", "built-form": "Mid-Terrace"}
input_property6 = Property(id=1, postcode="F4k3 6", address="623 fake street", epc_record=epc_record)
input_property6.walls = { input_property6.walls = {
'original_description': 'Sandstone or limestone, as built, no insulation (assumed)', 'original_description': 'Sandstone or limestone, as built, no insulation (assumed)',
'clean_description': 'Sandstone or limestone, as built, no insulation', 'clean_description': 'Sandstone or limestone, as built, no insulation',
@ -487,7 +496,6 @@ class TestCavityWallRecommensations:
input_property6.age_band = "F" input_property6.age_band = "F"
input_property6.insulation_wall_area = 350 input_property6.insulation_wall_area = 350
input_property6.restricted_measures = False input_property6.restricted_measures = False
input_property6.data = {"property-type": "House", "county": "Derbyshire", "built-form": "Mid-Terrace"}
assert input_property6.walls["is_sandstone_or_limestone"] assert input_property6.walls["is_sandstone_or_limestone"]

View file

@ -1,6 +1,7 @@
from recommendations.WindowsRecommendations import WindowsRecommendations from recommendations.WindowsRecommendations import WindowsRecommendations
from backend.Property import Property from backend.Property import Property
from recommendations.tests.test_data.materials import materials from recommendations.tests.test_data.materials import materials
from etl.epc.Record import EPCRecord
class TestWindowRecommendations: class TestWindowRecommendations:
@ -10,16 +11,17 @@ class TestWindowRecommendations:
For this property, we expect all windows to be single glazed and should recommend full double glazing For this property, we expect all windows to be single glazed and should recommend full double glazing
:return: :return:
""" """
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 0,
"uprn": 0
}
property_1 = Property( property_1 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 0,
"uprn": 0
}
) )
property_1.windows = { property_1.windows = {
'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': 'full', 'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': 'full',
@ -47,16 +49,17 @@ class TestWindowRecommendations:
double glazing double glazing
:return: :return:
""" """
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 33,
"uprn": 0
}
property_2 = Property( property_2 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 33,
"uprn": 0
}
) )
property_2.windows = {'original_description': 'Mostly double glazing', 'has_glazing': True, property_2.windows = {'original_description': 'Mostly double glazing', 'has_glazing': True,
'glazing_coverage': 'most', 'glazing_coverage': 'most',
@ -81,16 +84,17 @@ class TestWindowRecommendations:
This property has full double glazing so we shouldn't recommend anything This property has full double glazing so we shouldn't recommend anything
:return: :return:
""" """
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 100,
"uprn": 0
}
property_3 = Property( property_3 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 80,
"uprn": 0
}
) )
property_3.windows = {'original_description': 'Fully double glazed', 'has_glazing': True, property_3.windows = {'original_description': 'Fully double glazed', 'has_glazing': True,
'glazing_coverage': 'full', 'glazing_coverage': 'full',
@ -106,15 +110,17 @@ class TestWindowRecommendations:
assert not recommender3.recommendation assert not recommender3.recommendation
def test_fully_secondary_glazed(self): def test_fully_secondary_glazed(self):
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 100,
"uprn": 0
}
property_4 = Property( property_4 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 100,
"uprn": 0
}
) )
property_4.windows = {'original_description': 'Full secondary glazing', 'has_glazing': True, property_4.windows = {'original_description': 'Full secondary glazing', 'has_glazing': True,
'glazing_coverage': 'full', 'glazing_coverage': 'full',
@ -130,15 +136,17 @@ class TestWindowRecommendations:
assert not recommender4.recommendation assert not recommender4.recommendation
def test_partial_secondary_glazing(self): def test_partial_secondary_glazing(self):
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 50,
"uprn": 0
}
property_5 = Property( property_5 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 50,
"uprn": 0
}
) )
property_5.windows = {'original_description': 'Partial secondary glazing', 'has_glazing': True, property_5.windows = {'original_description': 'Partial secondary glazing', 'has_glazing': True,
'glazing_coverage': 'partial', 'glazing_coverage': 'partial',
@ -160,15 +168,18 @@ class TestWindowRecommendations:
'labour_days': 0.8125, 'is_secondary_glazing': True}] 'labour_days': 0.8125, 'is_secondary_glazing': True}]
def test_single_glazed_restricted_measures(self): def test_single_glazed_restricted_measures(self):
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 0,
"uprn": 0
}
property_6 = Property( property_6 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 0,
"uprn": 0
}
) )
property_6.windows = {'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': None, property_6.windows = {'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': None,
'glazing_type': 'single', 'glazing_type': 'single',
@ -195,15 +206,17 @@ class TestWindowRecommendations:
] ]
def test_full_triple_glazed(self): def test_full_triple_glazed(self):
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 100,
"uprn": 0
}
property_7 = Property( property_7 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 100,
"uprn": 0
}
) )
property_7.windows = {'original_description': 'Fully triple glazed', 'has_glazing': True, property_7.windows = {'original_description': 'Fully triple glazed', 'has_glazing': True,
'glazing_coverage': 'full', 'glazing_coverage': 'full',
@ -222,16 +235,17 @@ class TestWindowRecommendations:
""" """
We should just recommend double glazing to the remaining windows, since it's a cheaper option We should just recommend double glazing to the remaining windows, since it's a cheaper option
""" """
epc_record = EPCRecord()
epc_record.prepared_epc = {
"county": "Wychavon",
"multi-glaze-proportion": 80,
"uprn": 1
}
property_8 = Property( property_8 = Property(
id=1, id=1,
postcode='1', postcode='1',
address='1', address='1',
data={ epc_record=epc_record
"county": "Wychavon",
"multi-glaze-proportion": 80,
"uprn": 1
}
) )
property_8.windows = {'original_description': 'Mostly triple glazing', 'has_glazing': True, property_8.windows = {'original_description': 'Mostly triple glazing', 'has_glazing': True,
'glazing_coverage': 'most', 'glazing_coverage': 'most',