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