Files
thechart/test_dose_save_simple.py
William Valentin c755f0affc Add comprehensive tests for dose tracking functionality
- Implemented `test_dose_parsing_simple.py` to validate the dose parsing workflow.
- Created `test_dose_save.py` to verify the saving functionality of dose tracking.
- Added `test_dose_save_simple.py` for programmatic testing of dose saving without UI interaction.
- Developed `test_final_workflow.py` to test the complete dose tracking workflow, ensuring doses are preserved during edits.
- Enhanced `conftest.py` with a mock pathology manager for testing.
- Updated `test_data_manager.py` to include pathology manager in DataManager tests and ensure compatibility with new features.
2025-07-31 09:50:45 -07:00

136 lines
4.3 KiB
Python

#!/usr/bin/env python3
"""
Test dose tracking functionality programmatically.
"""
import os
import sys
import tempfile
import tkinter as tk
sys.path.append(os.path.join(os.path.dirname(__file__), "src"))
import logging
from data_manager import DataManager
from medicine_manager import MedicineManager
from pathology_manager import PathologyManager
from ui_manager import UIManager
def test_dose_save_programmatically():
"""Test dose saving functionality without UI interaction."""
# Setup logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("test")
# Initialize managers
medicine_manager = MedicineManager()
pathology_manager = PathologyManager()
# Create temporary CSV file
with tempfile.NamedTemporaryFile(mode="w", suffix=".csv", delete=False) as f:
temp_csv = f.name
try:
# Create data manager
data_manager = DataManager(
temp_csv, logger, medicine_manager, pathology_manager
)
# Create root window (hidden)
root = tk.Tk()
root.withdraw()
# Initialize UI manager
ui_manager = UIManager(
root=root,
logger=logger,
medicine_manager=medicine_manager,
pathology_manager=pathology_manager,
)
# Test the parsing directly
test_dose_text = "• 08:00 AM - 150mg\n• 02:00 PM - 25mg"
date_str = "2025-07-31"
print("Testing dose parsing...")
parsed_result = ui_manager._parse_dose_history_for_saving(
test_dose_text, date_str
)
print(f"Input: {test_dose_text}")
print(f"Date: {date_str}")
print(f"Parsed result: {parsed_result}")
# Verify the format is correct
if "|" in parsed_result:
doses = parsed_result.split("|")
print(f"Number of parsed doses: {len(doses)}")
for i, dose in enumerate(doses):
print(f" Dose {i + 1}: {dose}")
# Should be in format: YYYY-MM-DD HH:MM:SS:dose
if ":" in dose and len(dose.split(":")) >= 4:
print(" ✅ Dose format looks correct")
else:
print(" ❌ Dose format looks incorrect")
# Test with simple format
print("\nTesting simple format...")
simple_test = "08:00: 150mg\n14:00: 25mg"
simple_result = ui_manager._parse_dose_history_for_saving(simple_test, date_str)
print(f"Input: {simple_test}")
print(f"Parsed result: {simple_result}")
# Test saving to data manager
print("\nTesting data save...")
# Create entry data in the expected format
entry_data = ["2025-07-31"] # date
# Add pathology values
pathologies = pathology_manager.get_all_pathologies()
for _ in pathologies:
entry_data.append(3) # pathology value
# Add medicine values and doses
medicines = medicine_manager.get_all_medicines()
for med_key in medicines:
entry_data.append(1) # medicine checkbox value
# Use the parsed result for the dose
if med_key == "bupropion": # Test with first medicine
entry_data.append(parsed_result)
else:
entry_data.append("") # Empty doses for other medicines
entry_data.append("Test note") # note
print(f"Entry data length: {len(entry_data)}")
print(f"Entry data: {entry_data}")
# Try to add the entry
success = data_manager.add_entry(entry_data)
print(f"Data manager add_entry result: {success}")
if success:
# Load data back and check
df = data_manager.load_data()
print(f"Data loaded back, shape: {df.shape}")
if len(df) > 0:
bupropion_doses = df.iloc[0]["bupropion_doses"]
print(f"Saved bupropion doses: '{bupropion_doses}'")
print("✅ Dose data was successfully saved and retrieved!")
else:
print("❌ No data found after saving")
else:
print("❌ Failed to save entry to data manager")
finally:
# Clean up
os.unlink(temp_csv)
root.destroy()
if __name__ == "__main__":
test_dose_save_programmatically()