mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
268 lines
10 KiB
Python
268 lines
10 KiB
Python
from recommendations.WindowsRecommendations import WindowsRecommendations
|
|
from backend.Property import Property
|
|
from recommendations.tests.test_data.materials import materials
|
|
from etl.epc.Record import EPCRecord
|
|
|
|
|
|
class TestWindowRecommendations:
|
|
|
|
def test_fully_single_glazed(self):
|
|
"""
|
|
For this property, we expect all windows to be single glazed and should recommend full double glazing
|
|
:return:
|
|
"""
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 0,
|
|
"uprn": 0
|
|
}
|
|
property_1 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_1.windows = {
|
|
'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': 'full',
|
|
'glazing_type': 'single',
|
|
'no_data': False
|
|
}
|
|
property_1.number_of_windows = 7
|
|
|
|
recommender = WindowsRecommendations(property_instance=property_1, materials=materials)
|
|
|
|
assert not recommender.recommendation
|
|
|
|
recommender.recommend()
|
|
|
|
assert recommender.recommendation == [
|
|
{'phase': 0, 'parts': [], 'type': 'windows_glazing', 'description': 'Install double glazing to all windows',
|
|
'starting_u_value': None, 'new_u_value': None, 'sap_points': None, 'already_installed': False,
|
|
'total': 7980.0, 'labour_hours': 0.0, 'labour_days': 0.0, 'is_secondary_glazing': False,
|
|
'description_simulation': {'multi-glaze-proportion': 100, 'windows-energy-eff': 'Average',
|
|
'windows-description': 'Fully double glazed',
|
|
'glazed-type': 'double glazing installed during or after 2002'}}
|
|
]
|
|
|
|
def test_partial_double_glazed(self):
|
|
"""
|
|
For this property, the double glazing is describes as partial, therefore we recommend completion of
|
|
double glazing
|
|
:return:
|
|
"""
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 33,
|
|
"uprn": 0
|
|
}
|
|
property_2 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_2.windows = {'original_description': 'Mostly double glazing', 'has_glazing': True,
|
|
'glazing_coverage': 'most',
|
|
'glazing_type': 'double', 'no_data': False}
|
|
property_2.number_of_windows = 7
|
|
|
|
recommender2 = WindowsRecommendations(property_instance=property_2, materials=materials)
|
|
|
|
assert not recommender2.recommendation
|
|
|
|
recommender2.recommend()
|
|
|
|
assert recommender2.recommendation == [
|
|
{'phase': 0, 'parts': [], 'type': 'windows_glazing',
|
|
'description': 'Install double glazing to the remaining windows', 'starting_u_value': None,
|
|
'new_u_value': None, 'sap_points': None, 'already_installed': False, 'total': 5700.0, 'labour_hours': 0.0,
|
|
'labour_days': 0.0, 'is_secondary_glazing': False,
|
|
'description_simulation': {'multi-glaze-proportion': 100, 'windows-energy-eff': 'Average',
|
|
'windows-description': 'Fully double glazed',
|
|
'glazed-type': 'double glazing installed during or after 2002'}}
|
|
]
|
|
|
|
def test_fully_double_glazed(self):
|
|
"""
|
|
This property has full double glazing so we shouldn't recommend anything
|
|
:return:
|
|
"""
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 100,
|
|
"uprn": 0
|
|
}
|
|
property_3 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_3.windows = {'original_description': 'Fully double glazed', 'has_glazing': True,
|
|
'glazing_coverage': 'full',
|
|
'glazing_type': 'double', 'no_data': False}
|
|
property_3.number_of_windows = 7
|
|
|
|
recommender3 = WindowsRecommendations(property_instance=property_3, materials=materials)
|
|
|
|
assert not recommender3.recommendation
|
|
|
|
recommender3.recommend()
|
|
|
|
assert not recommender3.recommendation
|
|
|
|
def test_fully_secondary_glazed(self):
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 100,
|
|
"uprn": 0
|
|
}
|
|
property_4 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_4.windows = {'original_description': 'Full secondary glazing', 'has_glazing': True,
|
|
'glazing_coverage': 'full',
|
|
'glazing_type': 'secondary', 'no_data': False}
|
|
property_4.number_of_windows = 7
|
|
|
|
recommender4 = WindowsRecommendations(property_instance=property_4, materials=materials)
|
|
|
|
assert not recommender4.recommendation
|
|
|
|
recommender4.recommend()
|
|
|
|
assert not recommender4.recommendation
|
|
|
|
def test_partial_secondary_glazing(self):
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 50,
|
|
"uprn": 0
|
|
}
|
|
property_5 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_5.windows = {'original_description': 'Partial secondary glazing', 'has_glazing': True,
|
|
'glazing_coverage': 'partial',
|
|
'glazing_type': 'secondary', 'no_data': False}
|
|
property_5.number_of_windows = 7
|
|
|
|
recommender5 = WindowsRecommendations(property_instance=property_5, materials=materials)
|
|
|
|
assert not recommender5.recommendation
|
|
|
|
recommender5.recommend()
|
|
|
|
assert recommender5.recommendation == [
|
|
{'phase': 0, 'parts': [], 'type': 'windows_glazing',
|
|
'description': 'Install secondary glazing to the remaining windows', 'starting_u_value': None,
|
|
'new_u_value': None, 'sap_points': None, 'already_installed': False, 'total': 4560.0, 'labour_hours': 0.0,
|
|
'labour_days': 0.0, 'is_secondary_glazing': True,
|
|
'description_simulation': {'multi-glaze-proportion': 100, 'windows-energy-eff': 'Good',
|
|
'windows-description': 'Full secondary glazing',
|
|
'glazed-type': 'secondary glazing'}}
|
|
]
|
|
|
|
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(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_6.windows = {'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': None,
|
|
'glazing_type': 'single',
|
|
'no_data': False}
|
|
property_6.number_of_windows = 7
|
|
property_6.restricted_measures = True
|
|
property_6.is_heritage = True
|
|
|
|
recommender6 = WindowsRecommendations(property_instance=property_6, materials=materials)
|
|
|
|
assert not recommender6.recommendation
|
|
|
|
recommender6.recommend()
|
|
|
|
assert recommender6.recommendation == [
|
|
{'phase': 0, 'parts': [], 'type': 'windows_glazing',
|
|
'description': 'Install secondary glazing to all windows. Secondary glazing recommended due to herigate '
|
|
'building status',
|
|
'starting_u_value': None, 'new_u_value': None, 'sap_points': None, 'already_installed': False,
|
|
'total': 7980.0, 'labour_hours': 0.0, 'labour_days': 0.0, 'is_secondary_glazing': True,
|
|
'description_simulation': {'multi-glaze-proportion': 100, 'windows-energy-eff': 'Good',
|
|
'windows-description': 'Full secondary glazing',
|
|
'glazed-type': 'secondary glazing'}}
|
|
]
|
|
|
|
def test_full_triple_glazed(self):
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 100,
|
|
"uprn": 0
|
|
}
|
|
property_7 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_7.windows = {'original_description': 'Fully triple glazed', 'has_glazing': True,
|
|
'glazing_coverage': 'full',
|
|
'glazing_type': 'triple', 'no_data': False}
|
|
property_7.number_of_windows = 7
|
|
|
|
recommender7 = WindowsRecommendations(property_instance=property_7, materials=materials)
|
|
|
|
assert not recommender7.recommendation
|
|
|
|
recommender7.recommend()
|
|
|
|
assert not recommender7.recommendation
|
|
|
|
def test_partial_triple_glazed(self):
|
|
"""
|
|
We don't recommend anything here
|
|
"""
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Wychavon",
|
|
"multi-glaze-proportion": 80,
|
|
"uprn": 1
|
|
}
|
|
property_8 = Property(
|
|
id=1,
|
|
postcode='1',
|
|
address='1',
|
|
epc_record=epc_record
|
|
)
|
|
property_8.windows = {'original_description': 'Mostly triple glazing', 'has_glazing': True,
|
|
'glazing_coverage': 'most',
|
|
'glazing_type': 'triple', 'no_data': False}
|
|
property_8.number_of_windows = 7
|
|
|
|
recommender8 = WindowsRecommendations(property_instance=property_8, materials=materials)
|
|
|
|
assert not recommender8.recommendation
|
|
|
|
recommender8.recommend()
|
|
|
|
assert not recommender8.recommendation
|