#!/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()