Files
thechart/scripts/integration_test.py
William Valentin b7a22524d7
Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
Feat: add export functionality with GUI for data and graphs
- Implemented ExportWindow class for exporting data and graphs in various formats (JSON, XML, PDF).
- Integrated ExportManager to handle export logic.
- Added export option in the main application menu.
- Enhanced user interface with data summary and export options.
- Included error handling and success messages for export operations.
- Updated dependencies in the lock file to include reportlab and lxml for PDF generation.
2025-08-02 10:00:24 -07:00

129 lines
3.9 KiB
Python

#!/usr/bin/env python3
"""
Integration test for TheChart export system
Tests the complete export workflow without GUI dependencies
"""
import sys
from pathlib import Path
# Add src to path
sys.path.insert(0, "src")
from data_manager import DataManager
from export_manager import ExportManager
from init import logger
from medicine_manager import MedicineManager
from pathology_manager import PathologyManager
class MockGraphManager:
"""Mock graph manager for testing."""
def __init__(self):
self.fig = None
def test_integration():
"""Test complete export system integration."""
print("TheChart Export System Integration Test")
print("=" * 45)
# 1. Initialize all managers
print("\n1. Initializing managers...")
try:
medicine_manager = MedicineManager(logger=logger)
pathology_manager = PathologyManager(logger=logger)
data_manager = DataManager(
"thechart_data.csv", logger, medicine_manager, pathology_manager
)
# Mock graph manager (no GUI dependencies)
graph_manager = MockGraphManager()
export_manager = ExportManager(
data_manager, graph_manager, medicine_manager, pathology_manager, logger
)
print(" ✓ All managers initialized successfully")
except Exception as e:
print(f" ✗ Manager initialization failed: {e}")
return False
# 2. Check data availability
print("\n2. Checking data availability...")
try:
export_info = export_manager.get_export_info()
print(f" Total entries: {export_info['total_entries']}")
print(f" Has data: {export_info['has_data']}")
if not export_info["has_data"]:
print(" ✗ No data available for export")
return False
print(
f" Date range: {export_info['date_range']['start']} "
f"to {export_info['date_range']['end']}"
)
print(f" Pathologies: {len(export_info['pathologies'])}")
print(f" Medicines: {len(export_info['medicines'])}")
print(" ✓ Data is available for export")
except Exception as e:
print(f" ✗ Data check failed: {e}")
return False
# 3. Test all export formats
export_dir = Path("integration_test_exports")
export_dir.mkdir(exist_ok=True)
formats_to_test = [
("JSON", "integration_test.json", export_manager.export_data_to_json),
("XML", "integration_test.xml", export_manager.export_data_to_xml),
(
"PDF",
"integration_test.pdf",
lambda path: export_manager.export_to_pdf(path, include_graph=False),
),
]
results = []
for format_name, filename, export_func in formats_to_test:
print(f"\n3.{len(results) + 1}. Testing {format_name} export...")
try:
file_path = export_dir / filename
success = export_func(str(file_path))
if success and file_path.exists():
file_size = file_path.stat().st_size
print(
f"{format_name} export successful: {filename} "
f"({file_size} bytes)"
)
results.append(True)
else:
print(f"{format_name} export failed")
results.append(False)
except Exception as e:
print(f"{format_name} export error: {e}")
results.append(False)
# 4. Summary
print("\n4. Test Summary")
print(f" Total tests: {len(results)}")
print(f" Passed: {sum(results)}")
print(f" Failed: {len(results) - sum(results)}")
if all(results):
print(" ✓ All export formats working correctly!")
print(f" Check '{export_dir}' directory for exported files.")
return True
else:
print(" ✗ Some export formats failed")
return False
if __name__ == "__main__":
success = test_integration()
sys.exit(0 if success else 1)