#!/usr/bin/env python3 """ Test script to isolate and verify the multiple dose saving issue. """ import os import sys import tkinter as tk # Add the src directory to the path sys.path.insert(0, os.path.join(os.path.dirname(__file__), "src")) import logging from ui_manager import UIManager def test_parse_dose_text(): """Test the _parse_dose_text function directly.""" print("๐Ÿงช Testing _parse_dose_text function...") # Create a minimal UIManager for testing root = tk.Tk() root.withdraw() logger = logging.getLogger("test") ui_manager = UIManager(root, logger) # Test data: multiple doses in the format shown in the text widget test_text = """21:30: 150mg 21:35: 300mg 21:40: 75mg""" test_date = "07/29/2025" result = ui_manager._parse_dose_text(test_text, test_date) print(f"Input text:\n{test_text}") print(f"Date: {test_date}") print(f"Parsed result: {result}") # Count how many doses were parsed if result: dose_count = len(result.split("|")) print(f"Number of doses parsed: {dose_count}") if dose_count == 3: print("โœ… _parse_dose_text is working correctly!") return True else: print("โŒ _parse_dose_text is not parsing all doses!") return False else: print("โŒ _parse_dose_text returned empty result!") return False root.destroy() def test_punch_button_accumulation(): """Test that punch buttons properly accumulate in the text widget.""" print("\n๐Ÿงช Testing punch button dose accumulation...") root = tk.Tk() root.title("Punch Button Test") root.geometry("400x300") logger = logging.getLogger("test") ui_manager = UIManager(root, logger) # Sample values for creating edit window sample_values = ( "07/29/2025", # date 5, 3, 7, 6, # symptoms 1, "", # bupropion, bupropion_doses 0, "", # hydroxyzine, hydroxyzine_doses 0, "", # gabapentin, gabapentin_doses 0, "", # propranolol, propranolol_doses "Test entry", # note ) save_called = False saved_dose_data = None def test_save(*args): nonlocal save_called, saved_dose_data save_called = True saved_dose_data = args[-1] if args else None print("\n๐Ÿ’พ Save callback triggered") if saved_dose_data: print("Dose data received:") for med, doses in saved_dose_data.items(): if doses: dose_count = len(doses.split("|")) if "|" in doses else 1 print(f" {med}: {dose_count} dose(s) - {doses}") else: print(f" {med}: No doses") # Close window if args and hasattr(args[0], "destroy"): args[0].destroy() callbacks = {"save": test_save, "delete": lambda x: x.destroy()} try: edit_window = ui_manager.create_edit_window(sample_values, callbacks) edit_window.lift() edit_window.focus_force() print("\n๐Ÿ“ TEST INSTRUCTIONS:") print("1. Select ANY medicine (e.g., Bupropion)") print("2. Enter '100mg' in the dose field") print("3. Click 'Take [Medicine]' button") print("4. Enter '200mg' in the dose field") print("5. Click 'Take [Medicine]' button again") print("6. Enter '300mg' in the dose field") print("7. Click 'Take [Medicine]' button a third time") print("8. Verify you see THREE entries in the text area") print("9. Click 'Save'") print("\nโณ Please perform the test...") edit_window.wait_window() if save_called and saved_dose_data: # Check if any medicine has multiple doses multiple_found = False for med, doses in saved_dose_data.items(): if doses and "|" in doses: dose_count = len(doses.split("|")) if dose_count > 1: print(f"โœ… Multiple doses found for {med}: {dose_count} doses") multiple_found = True if multiple_found: print("โœ… Multiple dose accumulation is working!") return True else: print("โŒ No multiple doses found in save data") return False else: print("โŒ Save was not called or no dose data received") return False except Exception as e: print(f"โŒ Error during test: {e}") import traceback traceback.print_exc() return False finally: root.destroy() def main(): print("๐Ÿ”ฌ Multiple Dose Issue Investigation") print("=" * 50) os.chdir("/home/will/Code/thechart") # Test 1: Parse function parse_test = test_parse_dose_text() # Test 2: UI workflow ui_test = test_punch_button_accumulation() print("\n๐Ÿ“Š Results:") print(f" Parse function test: {'โœ… PASS' if parse_test else 'โŒ FAIL'}") print(f" UI workflow test: {'โœ… PASS' if ui_test else 'โŒ FAIL'}") if parse_test and ui_test: print("\n๐ŸŽฏ Multiple dose functionality appears to be working correctly") print("If you're still experiencing issues, please describe the exact steps") else: print("\n๐Ÿšจ Issues found with multiple dose functionality") if __name__ == "__main__": main()