Files
thechart/debug_dose_save.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

125 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""Debug test to see what happens to dose data during save."""
import logging
import os
import sys
import tkinter as tk
sys.path.append(os.path.join(os.path.dirname(__file__), "src"))
from medicine_manager import MedicineManager
from pathology_manager import PathologyManager
from ui_manager import UIManager
def debug_dose_save():
"""Debug test to track dose data through the save process."""
# Setup logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("test")
# Initialize managers
medicine_manager = MedicineManager()
pathology_manager = PathologyManager()
# Create root window
root = tk.Tk()
root.withdraw()
# Initialize UI manager
ui_manager = UIManager(
root=root,
logger=logger,
medicine_manager=medicine_manager,
pathology_manager=pathology_manager,
)
# Create test data with different medicines having different dose states
test_values = ["2025-07-31"] # date
# Add pathology values
pathologies = pathology_manager.get_all_pathologies()
for _ in pathologies:
test_values.append(3) # pathology value
# Add medicine values and doses - simulate one with history, others empty
medicines = medicine_manager.get_all_medicines()
medicine_keys = list(medicines.keys())
for i, _ in enumerate(medicines):
test_values.append(1) # medicine checkbox value
if i == 0: # First medicine has dose history
test_values.append(
"2025-07-31 08:00:00:150mg|2025-07-31 14:00:00:25mg"
) # existing doses in storage format
else: # Other medicines have no dose history
test_values.append("")
test_values.append("Test note") # note
print("Test setup:")
print(f" Medicine keys: {medicine_keys}")
print(f" First medicine ({medicine_keys[0]}) has dose history")
print(" Other medicines have no dose history")
print(f"Test values: {test_values}")
# Track what gets saved
saved_data = None
def mock_save_callback(*args):
nonlocal saved_data
saved_data = args
print("\n=== SAVE CALLBACK ===")
print(f"Save callback called with {len(args)} arguments")
if len(args) >= 2:
dose_data = args[-1] # Last argument should be dose data
print(f"Dose data type: {type(dose_data)}")
print("Dose data contents:")
if isinstance(dose_data, dict):
for med_key, dose_str in dose_data.items():
print(f" {med_key}: '{dose_str}' (length: {len(dose_str)})")
if dose_str:
doses = dose_str.split("|") if "|" in dose_str else [dose_str]
print(f" -> {len(doses)} dose(s): {doses}")
# Don't destroy window, just close it
root.quit()
def mock_delete_callback(win):
print("Delete callback called")
win.destroy()
root.quit()
callbacks = {"save": mock_save_callback, "delete": mock_delete_callback}
# Create edit window
edit_window = ui_manager.create_edit_window(tuple(test_values), callbacks)
print("\nEdit window created.")
print("Instructions:")
print("1. The first medicine tab should show existing dose history")
print("2. Add a new dose to a DIFFERENT medicine tab")
print("3. Click Save and observe the output")
# Show the window so user can interact
root.deiconify()
edit_window.lift()
edit_window.focus_force()
# Run main loop
root.mainloop()
if saved_data:
print("✅ Test completed - data was saved")
return True
else:
print("❌ Test failed - no data saved")
return False
if __name__ == "__main__":
debug_dose_save()