From 3501bb8c5d7688975fbe30d2d7f881a2cb1d421e Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Fri, 23 Jun 2023 15:25:06 +0100 Subject: [PATCH] Adding tests but still got a bug --- model_data/tests/test_wall_recommendations.py | 89 ++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/model_data/tests/test_wall_recommendations.py b/model_data/tests/test_wall_recommendations.py index 78ca3eaf..7a6d1f1c 100644 --- a/model_data/tests/test_wall_recommendations.py +++ b/model_data/tests/test_wall_recommendations.py @@ -1,8 +1,13 @@ import os + +import pandas as pd import pytest import pickle -from unittest.mock import Mock +import numpy as np +from unittest.mock import Mock, MagicMock from model_data.recommendations.WallRecommendations import WallRecommendations +from model_data.analysis.UvalueEstimations import UvalueEstimations +from model_data.Property import Property class TestWallRecommendations: @@ -180,3 +185,85 @@ class TestWallRecommendations: mock_wall_rec_instance.recommendations = [] with pytest.raises(ValueError): mock_wall_rec_instance._is_diminishing_returns(0.2, 0.24) + + +class TestWallRecommendationsBase: + @pytest.fixture + def property_mock(self): + property_instance = MagicMock(spec=Property) + property_instance.full_sap_epc = {"lodgement-date": "1999-12-31"} + property_instance.in_conservation_area = "not_in_conservation_area" + return property_instance + + @pytest.fixture + def uvalue_estimations_mock(self): + uvalue_estimations_mock = MagicMock(spec=UvalueEstimations) + + uvalue_estimations_mock.walls = pd.DataFrame([ + { + 'local-authority': 'E09000012', + 'property-type': 'Bungalow', + 'walls-energy-eff': 'Very Good', + 'walls-env-eff': 'Very Good', + 'built-form': 'End-Terrace', + 'number-habitable-rooms': '', 'number-heated-rooms': '', 'total-floor-area_group': 'Decile 1', + 'median_thermal_transmittance': 0.15, 'n_samples': 1 + } + ]) + + uvalue_estimations_mock.walls_decile_data = { + 'decile_labels': ['Decile 1', 'Decile 2', 'Decile 3', 'Decile 4', 'Decile 5', 'Decile 6', 'Decile 7', + 'Decile 8', 'Decile 9', 'Decile 10'], + 'decile_boundaries': np.array([11., 49., 52., 56., 63., 70., 74., 79., + 90., 103.8, 1936.])} + + uvalue_estimations_mock.classify_decile_newvalues.return_value = "Decile 1" + return uvalue_estimations_mock + + @pytest.fixture + def wall_recommendations_instance(self, property_mock, uvalue_estimations_mock): + wall_recommendations_instance = WallRecommendations(property_mock, uvalue_estimations_mock) + wall_recommendations_instance.uvalue_estimates.walls_decile_data = { + "decile_labels": MagicMock(), + "decile_boundaries": MagicMock() + } + uvalue_estimations_mock.classify_decile_newvalues.return_value = "Decile 1" + return wall_recommendations_instance + + def test_ewi_valid_in_conservation_area(self, wall_recommendations_instance): + wall_recommendations_instance.property.in_conservation_area = "in_conversation_area" + assert wall_recommendations_instance.ewi_valid is False + + def test_ewi_valid_is_flat(self, wall_recommendations_instance): + wall_recommendations_instance.property.data = {"property-type": "flat"} + assert wall_recommendations_instance.ewi_valid is False + + 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.data = {"property-type": "house"} + assert wall_recommendations_instance.ewi_valid is True + + def test_get_walls_uvalue_estimate(self, wall_recommendations_instance, uvalue_estimations_mock): + wall_recommendations_instance.uvalue_estimates = uvalue_estimations_mock + wall_recommendations_instance.property.data = { + "local-authority": "E09000012", + "property-type": "Bungalow", + "built-form": "End-Terrace", + "walls-energy-eff": "Very Good", + "walls-env-eff": "Very Good", + "total-floor-area": 10, + "number-habitable-rooms": "", + "number-heated-rooms": "" + } + + assert wall_recommendations_instance._get_walls_uvalue_estimate() == 0.2 + + def test_recommend_without_u_value(self, wall_recommendations_instance): + wall_recommendations_instance.property.walls = { + "thermal_transmittance": None, + "is_solid_brick": False, + "is_cavity_wall": False, + "insulation_thickness": "none" + } + with pytest.raises(NotImplementedError): + wall_recommendations_instance.recommend()