mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
84 lines
3.8 KiB
Python
84 lines
3.8 KiB
Python
import pytest
|
|
from recommendations.SolarPvRecommendations import SolarPvRecommendations
|
|
from backend.Property import Property
|
|
from etl.epc.Record import EPCRecord
|
|
|
|
|
|
class TestSolarPvRecommendations:
|
|
@pytest.fixture
|
|
def property_instance_invalid_type(self):
|
|
# Setup the property_instance with an invalid property type
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"property-type": "InvalidType", "county": "Broxbourne", "photo-supply": None
|
|
}
|
|
property_instance_invalid_type = Property(id=1, address="", postcode="", epc_record=epc_record)
|
|
property_instance_invalid_type.roof = {"is_flat": False, "is_pitched": False, "is_roof_room": False}
|
|
return property_instance_invalid_type
|
|
|
|
@pytest.fixture
|
|
def property_instance_invalid_roof(self):
|
|
# Setup the property_instance with invalid roof type
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {
|
|
"county": "Huntingdonshire", "property-type": "House", "photo-supply": None
|
|
}
|
|
property_instance_invalid_roof = Property(id=1, address="", postcode="", epc_record=epc_record)
|
|
property_instance_invalid_roof.roof = {"is_flat": False, "is_pitched": False, "is_roof_room": False}
|
|
return property_instance_invalid_roof
|
|
|
|
@pytest.fixture
|
|
def property_instance_has_solar_pv(self):
|
|
# Setup the property_instance without existing solar pv
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {"photo-supply": "40", "county": "Huntingdonshire",
|
|
"property-type": "House"}
|
|
property_instance_has_solar_pv = Property(id=1, address="", postcode="", epc_record=epc_record)
|
|
property_instance_has_solar_pv.roof = {"is_flat": True}
|
|
return property_instance_has_solar_pv
|
|
|
|
@pytest.fixture
|
|
def property_instance_valid_all(self):
|
|
# Setup a valid property_instance that passes all conditions
|
|
epc_record = EPCRecord()
|
|
epc_record.prepared_epc = {"property-type": "House", "photo-supply": None, "county": "Huntingdonshire"}
|
|
property_instance_valid_all = Property(id=1, address="", postcode="", epc_record=epc_record)
|
|
property_instance_valid_all.solar_pv_roof_area = 20
|
|
property_instance_valid_all.solar_pv_percentage = 40
|
|
property_instance_valid_all.roof = {"is_flat": True}
|
|
return property_instance_valid_all
|
|
|
|
def test_invalid_property_type(self, property_instance_invalid_type):
|
|
solar_pv = SolarPvRecommendations(property_instance_invalid_type)
|
|
solar_pv.recommend()
|
|
assert not solar_pv.recommendation
|
|
|
|
def test_invalid_roof_type(self, property_instance_invalid_roof):
|
|
solar_pv = SolarPvRecommendations(property_instance_invalid_roof)
|
|
solar_pv.recommend()
|
|
assert not solar_pv.recommendation
|
|
|
|
def test_existing_solar_pv(self, property_instance_has_solar_pv):
|
|
solar_pv = SolarPvRecommendations(property_instance_has_solar_pv)
|
|
solar_pv.recommend()
|
|
assert not solar_pv.recommendation
|
|
|
|
def test_valid_all_conditions(self, property_instance_valid_all):
|
|
solar_pv = SolarPvRecommendations(property_instance_valid_all)
|
|
solar_pv.recommend()
|
|
assert solar_pv.recommendation == [
|
|
{
|
|
'parts': [],
|
|
'type': 'solar_pv',
|
|
'description': 'Install a 4 kilowatt-peak (kWp) solar photovoltaic (PV) panel system on the roof',
|
|
'starting_u_value': None,
|
|
'new_u_value': None,
|
|
'sap_points': None,
|
|
'total': 8527.0752,
|
|
'subtotal': 7105.896,
|
|
'vat': 1421.1791999999996,
|
|
'labour_hours': 72,
|
|
'labour_days': 2,
|
|
'photo_supply': 4000
|
|
}
|
|
]
|