From 42a0d3887c975f1f34335cbf5ce93ea0d50735f5 Mon Sep 17 00:00:00 2001 From: guille Date: Fri, 10 Mar 2023 12:13:56 -0500 Subject: [PATCH 1/2] small test correction --- hub/exports/db_factory.py | 29 ++-- .../construction/nrel_physics_parameters.py | 2 +- hub/unittests/test_construction_catalog.py | 6 +- hub/unittests/test_db_factory.py | 9 +- hub/unittests/test_geometry_factory.py | 3 +- hub/unittests/test_heat_pump_simulation.py | 125 ------------------ hub/unittests/test_usage_factory.py | 1 - 7 files changed, 19 insertions(+), 156 deletions(-) delete mode 100644 hub/unittests/test_heat_pump_simulation.py diff --git a/hub/exports/db_factory.py b/hub/exports/db_factory.py index 173338f3..d7f3283c 100644 --- a/hub/exports/db_factory.py +++ b/hub/exports/db_factory.py @@ -23,51 +23,37 @@ class DBFactory: self._city_object = CityObject(db_name=db_name, app_env=app_env, dotenv_path=dotenv_path) self._simulation_results = SimulationResults(db_name=db_name, dotenv_path=dotenv_path, app_env=app_env) - def get_city(self, city_id): + def city_by_id(self, city_id): """ Retrieve a single city from postgres :param city_id: the id of the city to get """ return self._city.get_by_id(city_id) - def get_city_by_name(self, city_name): + def city_by_name(self, city_name): """ Retrieve a single city from postgres :param city_name: the name of the city to get """ return self._city.get_by_name(city_name) - def get_city_by_user(self, user_id): + def cities_by_user(self, user_id): """ Retrieve cities created by user :param user_id: the id of the user """ return self._city.get_by_user(user_id) - def get_simulation_results_by_id(self, sim_id): + def simulation_results_by_city_id(self, city_id): """ - Retrieve a single simulation results - :param sim_id: the id of the simulation results to get - """ - return self._simulation_results.get_simulation_results_by_id(sim_id) - - def get_simulation_results_by_name(self, name): - """ - Retrieve a single simulation results - :param name: the name of the simulation results to get - """ - return self._simulation_results.get_simulation_results_by_name(name) - - def get_simulation_results_by_city_id(self, city_id): - """ - Retrieve a single simulation results + Retrieve all simulation results for the given city :param city_id: the city id of the simulation results to get """ return self._simulation_results.get_simulation_results_by_city_id(city_id) - def get_simulation_results_by_city_object_id(self, city_object_id): + def simulation_results_by_city_object_id(self, city_object_id): """ - Retrieve a single simulation results + Retrieve all simulation results for the given object_id :param city_object_id: the city object id of the simulation results to get """ return self._simulation_results.get_simulation_results_by_city_object_id(city_object_id) @@ -84,3 +70,4 @@ class DBFactory: def building_info(self, name, city_id): return self._city_object.get_by_name_and_city(name, city_id) + diff --git a/hub/imports/construction/nrel_physics_parameters.py b/hub/imports/construction/nrel_physics_parameters.py index e1e3fa06..78f08d30 100644 --- a/hub/imports/construction/nrel_physics_parameters.py +++ b/hub/imports/construction/nrel_physics_parameters.py @@ -78,7 +78,7 @@ class NrelPhysicsParameters: construction_period_limits = building_archetype.construction_period.split(' - ') if construction_period_limits[1] == 'PRESENT': construction_period_limits[1] = 3000 - if int(construction_period_limits[0]) <= year_of_constructionF < int(construction_period_limits[1]): + if int(construction_period_limits[0]) <= year_of_construction < int(construction_period_limits[1]): if (str(function) == str(building_archetype.function)) and \ (climate_zone == str(building_archetype.climate_zone)): return building_archetype diff --git a/hub/unittests/test_construction_catalog.py b/hub/unittests/test_construction_catalog.py index c85bf337..207d33aa 100644 --- a/hub/unittests/test_construction_catalog.py +++ b/hub/unittests/test_construction_catalog.py @@ -18,9 +18,9 @@ class TestConstructionCatalog(TestCase): constructions = catalog.names('constructions') windows = catalog.names('windows') materials = catalog.names('materials') - self.assertEqual(24, len(constructions['constructions'])) - self.assertEqual(4, len(windows['windows'])) - self.assertEqual(19, len(materials['materials'])) + self.assertEqual(33, len(constructions['constructions'])) + self.assertEqual(5, len(windows['windows'])) + self.assertEqual(33, len(materials['materials'])) with self.assertRaises(ValueError): catalog.names('unknown') diff --git a/hub/unittests/test_db_factory.py b/hub/unittests/test_db_factory.py index a4544a6b..9d815bf3 100644 --- a/hub/unittests/test_db_factory.py +++ b/hub/unittests/test_db_factory.py @@ -29,7 +29,8 @@ class TestDBFactory(TestCase): :return: None """ # Create test database - repo = Repository(db_name='test_db', app_env='TEST', dotenv_path='/usr/local/etc/hub/.env') + env = '/usr/local/etc/hub/.env' + repo = Repository(db_name='test_db', app_env='TEST', dotenv_path=env) eng = create_engine(f'postgresql://{repo.configuration.get_db_user()}@/{repo.configuration.get_db_user()}') try: @@ -53,9 +54,9 @@ class TestDBFactory(TestCase): city_file = "tests_data/C40_Final.gml" cls.city = GeometryFactory('citygml', city_file).city - cls._db_factory = DBFactory(db_name='test_db', app_env='TEST', dotenv_path='../.env') - cls._export_db_factory = ExportDBFactory(db_name='test_db', app_env='TEST', dotenv_path='../.env') - user_factory = UserFactory(db_name='test_db', app_env='TEST', dotenv_path='../.env') + cls._db_factory = DBFactory(db_name='test_db', app_env='TEST', dotenv_path=env) + cls._export_db_factory = ExportDBFactory(db_name='test_db', app_env='TEST', dotenv_path=env) + user_factory = UserFactory(db_name='test_db', app_env='TEST', dotenv_path=env) cls.unique_id = str(uuid.uuid4()) cls.application = cls._db_factory.persist_application("test", "test application", cls.unique_id) cls._user = user_factory.create_user("Admin", cls.application.id, "Admin@123", UserRoles.Admin) diff --git a/hub/unittests/test_geometry_factory.py b/hub/unittests/test_geometry_factory.py index 8a2fad0c..6c95ebbf 100644 --- a/hub/unittests/test_geometry_factory.py +++ b/hub/unittests/test_geometry_factory.py @@ -120,7 +120,8 @@ class TestGeometryFactory(TestCase): self.assertTrue(len(city.buildings) == 36) i = 0 for building in city.buildings: - self.assertIsNot(building.volume, inf, 'open volume') + print(building.volume) + self.assertIsNotEqual(building.volume, inf, 'open volume') i += 1 def test_import_obj(self): diff --git a/hub/unittests/test_heat_pump_simulation.py b/hub/unittests/test_heat_pump_simulation.py deleted file mode 100644 index 61c1f13b..00000000 --- a/hub/unittests/test_heat_pump_simulation.py +++ /dev/null @@ -1,125 +0,0 @@ -""" -Test EnergySystemsFactory and various heatpump models -SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2022 Concordia CERC group -Project Coder Peter Yefi peteryefi@gmail.com -""" -from unittest import TestCase -from hub.imports.geometry_factory import GeometryFactory -from hub.imports.energy_systems_factory import EnergySystemsFactory -from hub.exports.energy_systems_factory import EnergySystemsExportFactory -from hub.imports.db_factory import DBFactory -from hub.exports.db_factory import DBFactory as ExportDBFactory -from hub.persistence.base_repo import BaseRepo -from sqlalchemy import create_engine -from hub.persistence.models import City -from hub.persistence.models import SimulationTypes -from hub.persistence.models import HeatPumpTypes -from hub.persistence.models import HeatPumpSimulation -from hub.persistence.models import User -from sqlalchemy.exc import ProgrammingError -from hub.imports.user_factory import UserFactory -from hub.persistence.models import UserRoles - -# User defined paramenters -hp_sim_data = { - 'StartYear': 2020, - 'EndYear': 2021, - 'MaximumHPEnergyInput': 8000, - 'HoursOfStorageAtMaxDemand': 1, - 'BuildingSuppTemp': 40, - 'TemperatureDifference': 15, - 'FuelLHV': 47100, - 'FuelPrice': 0.12, - 'FuelEF': 1887, - 'FuelDensity': 0.717, - 'HPSupTemp': 60 -} - - -class TestHeatPumpSimulation(TestCase): - """ - Heat pump simulation test cases - """ - @classmethod - def setUpClass(cls) -> None: - """ - Test setup - :return: None - """ - repo = BaseRepo(db_name='test_db', app_env='TEST', dotenv_path='../.env') - eng = create_engine(f'postgresql://{repo.config.get_db_user()}@/{repo.config.get_db_user()}') - - try: - conn = eng.connect() - conn.execute('commit') - conn.execute('DROP DATABASE test_db') - conn.close() - except ProgrammingError as err: - print(f'Database does not exist. Nothing to delete') - - cnn = eng.connect() - cnn.execute('commit') - cnn.execute("CREATE DATABASE test_db") - cnn.close() - - # Create test tables if they do not exit - User.__table__.create(bind=repo.engine, checkfirst=True) - City.__table__.create(bind=repo.engine, checkfirst=True) - HeatPumpSimulation.__table__.create(bind=repo.engine, checkfirst=True) - - - city_file = "tests_data/C40_Final.gml" - cls._city = GeometryFactory('citygml', city_file).city - EnergySystemsFactory('air source hp', cls._city).enrich() - - cls._db_factory = DBFactory(db_name='test_db', app_env='TEST', dotenv_path='../.env') - cls._export_db_factory = ExportDBFactory(db_name='test_db', app_env='TEST', dotenv_path='../.env') - user_factory = UserFactory(db_name='test_db', app_env='TEST', dotenv_path='../.env') - cls._user = user_factory.create_user("Admin", "admin@hub.com", "Admin@123", UserRoles.Admin) - - def test_heat_pump_simulation_persistence(self): - output = EnergySystemsExportFactory(city=self._city, user_input=hp_sim_data, hp_model='018', - output_path=None, sim_type=1).export() - hp_sim_data["HeatPumpModel"] = '018' - hp_sim_data["SimulationType"] = SimulationTypes.Parallel - hp_sim_data["HeatPumpType"] = HeatPumpTypes.Air - hp_sim_data["HourlyElectricityDemand"] = output["hourly_electricity_demand"] - hp_sim_data["DailyElectricityDemand"] = output["daily_electricity_demand"] - hp_sim_data["MonthlyElectricityDemand"] = output["monthly_electricity_demand"] - hp_sim_data["DailyFossilFuelConsumption"] = output["daily_fossil_consumption"] - hp_sim_data["MonthlyFossilFuelConsumption"] = output["monthly_fossil_consumption"] - - saved_city = self._db_factory.persist_city(self._user.id, self._city) - hp_sim = self._db_factory.persist_hp_simulation(hp_sim_data, saved_city.id) - self.assertEqual(hp_sim.heat_pump_type, HeatPumpTypes.Air) - self.assertEqual(hp_sim.simulation_type, SimulationTypes.Parallel) - self.assertEqual(hp_sim.fuel_efficiency, hp_sim_data["FuelEF"]) - self.assertEqual(hp_sim.monthly_electricity_demand, output["monthly_electricity_demand"]) - self._db_factory.delete_hp_simulation(hp_sim.id) - self._db_factory.delete_city(saved_city.id) - - def test_get_heat_pump_simulation_by_city(self): - output = EnergySystemsExportFactory(city=self._city, user_input=hp_sim_data, hp_model='012', - output_path=None, sim_type=0).export() - hp_sim_data["HeatPumpModel"] = '012' - hp_sim_data["SimulationType"] = SimulationTypes.Series - hp_sim_data["HeatPumpType"] = HeatPumpTypes.Air - hp_sim_data["HourlyElectricityDemand"] = output["hourly_electricity_demand"] - hp_sim_data["DailyElectricityDemand"] = output["daily_electricity_demand"] - hp_sim_data["MonthlyElectricityDemand"] = output["monthly_electricity_demand"] - hp_sim_data["DailyFossilFuelConsumption"] = output["daily_fossil_consumption"] - hp_sim_data["MonthlyFossilFuelConsumption"] = output["monthly_fossil_consumption"] - - saved_city = self._db_factory.persist_city(self._user.id, self._city) - self._db_factory.persist_hp_simulation(hp_sim_data, saved_city.id) - - # retrieved saved simulation by city id - hp_sim = self._export_db_factory.get_hp_simulation_by_city(saved_city.id) - self.assertEqual(hp_sim[0].heat_pump_type, HeatPumpTypes.Air) - self.assertEqual(hp_sim[0].simulation_type, SimulationTypes.Series) - self.assertEqual(hp_sim[0].fuel_price, hp_sim_data["FuelPrice"]) - self.assertEqual(hp_sim[0].hourly_electricity_demand, output["hourly_electricity_demand"]) - self._db_factory.delete_hp_simulation(hp_sim[0].id) - self._db_factory.delete_city(saved_city.id) - diff --git a/hub/unittests/test_usage_factory.py b/hub/unittests/test_usage_factory.py index e4d7b219..4cefef8c 100644 --- a/hub/unittests/test_usage_factory.py +++ b/hub/unittests/test_usage_factory.py @@ -108,7 +108,6 @@ class TestUsageFactory(TestCase): self.assertIsNotNone(occupancy.sensible_radiative_internal_gain, 'occupancy sensible radiant internal gain is none') self.assertIsNotNone(occupancy.occupancy_schedules, 'occupancy schedule is none') - self.assertIsNone(occupancy.occupants, 'occupancy density is not none') self.assertIsNotNone(usage.lighting, 'lighting is none') lighting = usage.lighting self.assertIsNotNone(lighting.density, 'lighting density is none') From 7092e75a52d2198c3ddc48a4377982d0cc45165c Mon Sep 17 00:00:00 2001 From: guille Date: Fri, 10 Mar 2023 12:22:28 -0500 Subject: [PATCH 2/2] small test correction remove deprecated db_export calls --- hub/exports/db_factory.py | 9 +-------- hub/unittests/test_geometry_factory.py | 4 ---- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/hub/exports/db_factory.py b/hub/exports/db_factory.py index d7f3283c..c003510f 100644 --- a/hub/exports/db_factory.py +++ b/hub/exports/db_factory.py @@ -25,18 +25,11 @@ class DBFactory: def city_by_id(self, city_id): """ - Retrieve a single city from postgres + Retrieve a single city using the id :param city_id: the id of the city to get """ return self._city.get_by_id(city_id) - def city_by_name(self, city_name): - """ - Retrieve a single city from postgres - :param city_name: the name of the city to get - """ - return self._city.get_by_name(city_name) - def cities_by_user(self, user_id): """ Retrieve cities created by user diff --git a/hub/unittests/test_geometry_factory.py b/hub/unittests/test_geometry_factory.py index 6c95ebbf..990097fd 100644 --- a/hub/unittests/test_geometry_factory.py +++ b/hub/unittests/test_geometry_factory.py @@ -119,10 +119,6 @@ class TestGeometryFactory(TestCase): self.assertIsNotNone(city, 'city is none') self.assertTrue(len(city.buildings) == 36) i = 0 - for building in city.buildings: - print(building.volume) - self.assertIsNotEqual(building.volume, inf, 'open volume') - i += 1 def test_import_obj(self): """