Files
thechart/test_punch_diagnosis.py

180 lines
5.5 KiB
Python

#!/usr/bin/env python3
"""
Comprehensive test to diagnose and fix punch button accumulation issue.
"""
import os
import sys
import tkinter as tk
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "src"))
import logging
from ui_manager import UIManager
def test_punch_button_step_by_step():
"""Test punch button functionality step by step with detailed logging."""
print("🔬 Punch Button Step-by-Step Diagnosis")
print("=" * 50)
root = tk.Tk()
root.title("Punch Button Diagnosis")
root.geometry("800x600")
logger = logging.getLogger("punch_diagnosis")
logger.setLevel(logging.DEBUG)
ui_manager = UIManager(root, logger)
sample_values = (
"07/29/2025",
5,
3,
7,
6,
1,
"",
0,
"",
0,
"",
0,
"",
"Punch diagnosis test",
)
punch_calls = []
save_calls = []
def track_save(*args):
save_calls.append(args)
if len(args) >= 12:
dose_data = args[-1]
print("\n💾 SAVE CAPTURED:")
for med, doses in dose_data.items():
if doses:
count = len(doses.split("|")) if "|" in doses else 1
print(f" {med}: {count} dose(s) - {doses}")
else:
print(f" {med}: No doses")
if args and hasattr(args[0], "destroy"):
args[0].destroy()
callbacks = {"save": track_save, "delete": lambda x: x.destroy()}
try:
edit_window = ui_manager.create_edit_window(sample_values, callbacks)
# Let's manually patch the _punch_dose_in_edit method to add logging
original_punch = ui_manager._punch_dose_in_edit
def logged_punch(medicine_name, dose_vars):
print(f"\n🥊 PUNCH CALLED: {medicine_name}")
dose_entry_var = dose_vars.get(f"{medicine_name}_entry_var")
dose_text_widget = dose_vars.get(f"{medicine_name}_doses_text")
if not dose_entry_var or not dose_text_widget:
print(f"❌ Missing variables for {medicine_name}")
return
dose = dose_entry_var.get().strip()
print(f"📝 Dose entered: '{dose}'")
if not dose:
print("❌ No dose entered")
return
# Get current content BEFORE modification
before_content = dose_text_widget.get(1.0, tk.END).strip()
print(f"📋 Content BEFORE: '{before_content}'")
# Call original method
result = original_punch(medicine_name, dose_vars)
# Get content AFTER modification
after_content = dose_text_widget.get(1.0, tk.END).strip()
print(f"📋 Content AFTER: '{after_content}'")
punch_calls.append(
{
"medicine": medicine_name,
"dose": dose,
"before": before_content,
"after": after_content,
}
)
return result
# Patch the method
ui_manager._punch_dose_in_edit = logged_punch
print("\n📝 TEST INSTRUCTIONS:")
print("1. Enter '100mg' in Bupropion dose field")
print("2. Click 'Take Bupropion' - watch for PUNCH CALLED message")
print("3. Enter '200mg' in Bupropion dose field")
print("4. Click 'Take Bupropion' again - watch content changes")
print("5. Enter '300mg' in Bupropion dose field")
print("6. Click 'Take Bupropion' a third time")
print("7. Verify the text area shows all three doses")
print("8. Click Save")
print("\n⏳ Please perform the test sequence...")
edit_window.wait_window()
print("\n📊 ANALYSIS:")
print(f" Punch calls made: {len(punch_calls)}")
print(f" Save calls made: {len(save_calls)}")
if punch_calls:
print("\n🥊 PUNCH CALL DETAILS:")
for i, call in enumerate(punch_calls, 1):
print(f" Call {i}: {call['medicine']} - {call['dose']}")
print(f" Before: '{call['before']}'")
print(f" After: '{call['after']}'")
print()
# Check if multiple punches accumulated properly
if len(punch_calls) >= 2:
last_call = punch_calls[-1]
lines_in_final = (
last_call["after"].count("\n") + 1 if last_call["after"] else 0
)
print("🔍 ACCUMULATION CHECK:")
print(f" Final content has {lines_in_final} lines")
print(f" Expected: {len(punch_calls)} lines")
if lines_in_final >= len(punch_calls):
print("✅ Punch button accumulation appears to be working!")
return True
else:
print("❌ Punch button accumulation is NOT working correctly!")
return False
else:
print("⚠️ Not enough punch calls to test accumulation")
return False
except Exception as e:
print(f"❌ Error during test: {e}")
import traceback
traceback.print_exc()
return False
finally:
root.destroy()
if __name__ == "__main__":
os.chdir("/home/will/Code/thechart")
success = test_punch_button_step_by_step()
if success:
print("\n🎯 Punch button test completed - accumulation working!")
else:
print("\n🚨 Punch button test revealed accumulation issues!")