diff --git a/recommendations/tests/test_lighting_recommendations.py b/recommendations/tests/test_lighting_recommendations.py new file mode 100644 index 00000000..06d1163f --- /dev/null +++ b/recommendations/tests/test_lighting_recommendations.py @@ -0,0 +1,47 @@ +import pytest +from unittest.mock import Mock +from backend.Property import Property +from recommendations.LightingRecommendations import LightingRecommendations + +from recommendations.tests.test_data.materials import materials + + +class TestLightingRecommendations: + + def test_init_invalid_materials(self): + input_property0 = Property(id=1, postcode="F4k3 6", address1="623 fake street", epc_client=Mock()) + input_property0.lighting = {"low_energy_proportion": 0} + input_property0.data = {"county": "Greater London Authority"} + # Test for invalid materials + with pytest.raises(ValueError): + LightingRecommendations(input_property0, []) + + def test_recommend_no_action_needed(self): + # Case where no recommendation is needed + input_property1 = Property(id=1, postcode="F4k3 6", address1="623 fake street", epc_client=Mock()) + input_property1.lighting = {"low_energy_proportion": 100} + input_property1.data = {"county": "Greater London Authority"} + + lr = LightingRecommendations(input_property1, materials) + lr.recommend() + assert lr.recommendation == [] + + def test_recommend_action_needed(self): + # Case where recommendation is needed + input_property1 = Property(id=1, postcode="F4k3 6", address1="623 fake street", epc_client=Mock()) + input_property1.lighting = {"low_energy_proportion": 100} + input_property1.data = {"county": "Greater London Authority"} + input_property1.lighting = {"low_energy_proportion": 0.80} + input_property1.number_lighting_outlets = 20 + + lr = LightingRecommendations(input_property1, materials) + lr.recommend() + assert len(lr.recommendation) == 1 + + assert lr.recommendation == [ + {'parts': [], 'type': 'low_energy_lighting', 'description': 'Install low energy lighting in 4 outlets', + 'starting_u_value': None, 'new_u_value': None, 'sap_points': 0.4, 'total': 458.976, 'subtotal': 382.48, + 'vat': 76.49600000000001, 'contingency': 27.320000000000007, 'preliminaries': 27.320000000000007, + 'material': 80.0, 'profit': 54.640000000000015, 'labour_hours': 3.2, 'labour_days': 0.4, + 'labour_cost': 193.20000000000002} + ]