not-sure / tests /test_integration.py
mabuseif's picture
Upload 25 files
6cc22a6 verified
"""
Integration test script for HVAC Load Calculator.
This script tests the integration of all components of the HVAC Load Calculator.
"""
import os
import sys
import json
import unittest
from pathlib import Path
# Add parent directory to path
sys.path.append(str(Path(__file__).parent.parent))
# Import modules
from models.building import Building, CoolingLoadResult
from controllers.enhanced_cooling_load_calculator import calculate_cooling_load
from controllers.monthly_breakdown import calculate_monthly_breakdown, generate_monthly_report
from controllers.building_manager import BuildingManager
from utils.data_io import export_building_to_json, import_building_from_json
from utils.data_io import export_result_to_json, import_result_from_json
from utils.data_io import export_monthly_breakdown_to_csv
from utils.data_io import create_project_archive
class TestIntegration(unittest.TestCase):
"""Integration test cases for HVAC Load Calculator."""
def setUp(self):
"""Set up test fixtures."""
# Create test buildings
self.building1 = self._create_test_building("Test Building 1", "New York", 100)
self.building2 = self._create_test_building("Test Building 2", "Chicago", 150)
self.building3 = self._create_test_building("Test Building 3", "Los Angeles", 200)
# Create building manager
self.building_manager = BuildingManager()
# Create test directory
os.makedirs("test_output", exist_ok=True)
def tearDown(self):
"""Tear down test fixtures."""
# Remove test files
for file in os.listdir("test_output"):
os.remove(os.path.join("test_output", file))
# Remove test directory
os.rmdir("test_output")
def _create_test_building(self, name, city, area):
"""Create a test building."""
building = Building()
building.settings.name = name
building.settings.floor_area = area
building.settings.ceiling_height = 3
building.settings.indoor_temp = 24
building.settings.indoor_humidity = 50
building.location.city = city
building.location.latitude = 40.7128
building.location.longitude = -74.0060
# Add walls
building.add_wall("North", 10, 3, 0.5, "Medium")
building.add_wall("South", 10, 3, 0.5, "Medium")
building.add_wall("East", 10, 3, 0.5, "Medium")
building.add_wall("West", 10, 3, 0.5, "Medium")
# Add roof
building.roof.area = area
building.roof.u_value = 0.3
building.roof.construction_type = "Medium"
# Add glass
building.add_glass("North", 2, 1.5, 0.4, 0.8, "Single")
building.add_glass("South", 2, 1.5, 0.4, 0.8, "Single")
# Add people
building.people.count = 5
building.people.activity = "Office Work"
# Add lighting
building.lighting.power = 500
building.lighting.type = "LED"
# Add equipment
building.equipment.power = 1000
building.equipment.type = "General"
return building
def test_building_manager(self):
"""Test building manager functionality."""
# Add buildings
self.assertTrue(self.building_manager.add_building(self.building1))
self.assertTrue(self.building_manager.add_building(self.building2))
self.assertTrue(self.building_manager.add_building(self.building3))
# Check buildings
buildings = self.building_manager.get_buildings()
self.assertEqual(len(buildings), 3)
self.assertIn("Test Building 1", buildings)
self.assertIn("Test Building 2", buildings)
self.assertIn("Test Building 3", buildings)
# Set current building
self.building_manager.set_current_building("Test Building 2")
self.assertEqual(self.building_manager.get_current_building(), "Test Building 2")
# Update building
self.building2.settings.floor_area = 200
self.assertTrue(self.building_manager.update_building(self.building2))
# Check updated building
buildings = self.building_manager.get_buildings()
self.assertEqual(buildings["Test Building 2"].settings.floor_area, 200)
# Rename building
self.assertTrue(self.building_manager.rename_building("Test Building 3", "Renamed Building"))
# Check renamed building
buildings = self.building_manager.get_buildings()
self.assertNotIn("Test Building 3", buildings)
self.assertIn("Renamed Building", buildings)
# Duplicate building
self.assertTrue(self.building_manager.duplicate_building("Test Building 1", "Duplicated Building"))
# Check duplicated building
buildings = self.building_manager.get_buildings()
self.assertIn("Duplicated Building", buildings)
self.assertEqual(buildings["Duplicated Building"].settings.floor_area, 100)
# Calculate building
result, monthly_breakdown = self.building_manager.calculate_building("Test Building 1")
# Check calculation results
self.assertIsNotNone(result)
self.assertIsNotNone(monthly_breakdown)
# Check results in building manager
results = self.building_manager.get_results()
monthly_breakdowns = self.building_manager.get_monthly_breakdowns()
self.assertIn("Test Building 1", results)
self.assertIn("Test Building 1", monthly_breakdowns)
# Remove building
self.assertTrue(self.building_manager.remove_building("Test Building 1"))
# Check removed building
buildings = self.building_manager.get_buildings()
self.assertNotIn("Test Building 1", buildings)
# Check removed results
results = self.building_manager.get_results()
monthly_breakdowns = self.building_manager.get_monthly_breakdowns()
self.assertNotIn("Test Building 1", results)
self.assertNotIn("Test Building 1", monthly_breakdowns)
def test_end_to_end_workflow(self):
"""Test end-to-end workflow."""
# 1. Create buildings
building1 = self._create_test_building("Office Building", "New York", 1000)
building2 = self._create_test_building("Retail Building", "Chicago", 1500)
# 2. Calculate cooling loads
result1 = calculate_cooling_load(building1)
result2 = calculate_cooling_load(building2)
# 3. Calculate monthly breakdowns
monthly_breakdown1 = calculate_monthly_breakdown(building1)
monthly_breakdown2 = calculate_monthly_breakdown(building2)
# 4. Generate monthly reports
report1 = generate_monthly_report(building1, monthly_breakdown1)
report2 = generate_monthly_report(building2, monthly_breakdown2)
# 5. Export buildings to JSON
json_str1 = export_building_to_json(building1)
json_str2 = export_building_to_json(building2)
# 6. Save JSON to files
with open(os.path.join("test_output", "building1.json"), "w") as f:
f.write(json_str1)
with open(os.path.join("test_output", "building2.json"), "w") as f:
f.write(json_str2)
# 7. Import buildings from JSON
imported_building1 = import_building_from_json(json_str1)
imported_building2 = import_building_from_json(json_str2)
# 8. Calculate cooling loads for imported buildings
imported_result1 = calculate_cooling_load(imported_building1)
imported_result2 = calculate_cooling_load(imported_building2)
# 9. Compare original and imported results
self.assertEqual(result1.peak_total_load, imported_result1.peak_total_load)
self.assertEqual(result2.peak_total_load, imported_result2.peak_total_load)
# 10. Create project archives
archive1 = create_project_archive(building1, result1, monthly_breakdown1)
archive2 = create_project_archive(building2, result2, monthly_breakdown2)
# 11. Save archives to files
with open(os.path.join("test_output", "project1.zip"), "wb") as f:
f.write(archive1)
with open(os.path.join("test_output", "project2.zip"), "wb") as f:
f.write(archive2)
# 12. Check files exist
self.assertTrue(os.path.exists(os.path.join("test_output", "building1.json")))
self.assertTrue(os.path.exists(os.path.join("test_output", "building2.json")))
self.assertTrue(os.path.exists(os.path.join("test_output", "project1.zip")))
self.assertTrue(os.path.exists(os.path.join("test_output", "project2.zip")))
# 13. Add buildings to building manager
building_manager = BuildingManager()
building_manager.add_building(building1)
building_manager.add_building(building2)
# 14. Check buildings in building manager
buildings = building_manager.get_buildings()
self.assertEqual(len(buildings), 2)
self.assertIn("Office Building", buildings)
self.assertIn("Retail Building", buildings)
if __name__ == "__main__":
unittest.main()