feat: Add tests for verifying multiple dose functionality and CSV saving

This commit is contained in:
William Valentin
2025-07-28 22:04:33 -07:00
parent a4a71380ef
commit 3df610fc95
3 changed files with 277 additions and 1 deletions
+2 -1
View File
@@ -602,7 +602,8 @@ class UIManager:
punch_button.grid(row=idx, column=3, sticky="w", padx=5, pady=2) punch_button.grid(row=idx, column=3, sticky="w", padx=5, pady=2)
# Parse and format doses for editing # Parse and format doses for editing
if doses_str: if doses_str and str(doses_str) != "nan":
doses_str = str(doses_str) # Convert to string in case it's a float/NaN
formatted_doses = [] formatted_doses = []
for dose_entry_str in doses_str.split("|"): for dose_entry_str in doses_str.split("|"):
if ":" in dose_entry_str: if ":" in dose_entry_str:
+171
View File
@@ -0,0 +1,171 @@
#!/usr/bin/env python3
"""
Step-by-step test to demonstrate multiple dose functionality.
"""
import os
import sys
import tkinter as tk
import pandas as pd
# Add the src directory to the path so we can import our modules
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "src"))
import logging
from ui_manager import UIManager
def demonstrate_multiple_doses():
"""Demonstrate the complete multiple dose workflow."""
print("🧪 Multiple Dose Demonstration")
print("=" * 40)
# Check current CSV state
try:
df = pd.read_csv("thechart_data.csv")
print(f"📋 Current CSV has {len(df)} entries")
latest = df.iloc[-1]
print(f"📅 Latest entry date: {latest['date']}")
# Show current dose state for latest entry
dose_columns = [col for col in df.columns if col.endswith("_doses")]
print("💊 Current doses in latest entry:")
for dose_col in dose_columns:
medicine = dose_col.replace("_doses", "")
dose_data = str(latest[dose_col])
if dose_data and dose_data != "nan" and dose_data.strip():
dose_count = len(dose_data.split("|"))
print(f" {medicine}: {dose_count} dose(s)")
else:
print(f" {medicine}: No doses")
except Exception as e:
print(f"❌ Error reading CSV: {e}")
return
print("\n🔬 Testing Edit Window Workflow:")
print("1. Create edit window for latest entry")
print("2. Add multiple doses using punch buttons")
print("3. Save and verify CSV is updated")
print("\nStarting test...")
# Create test environment
root = tk.Tk()
root.title("Dose Test")
root.geometry("300x200")
logger = logging.getLogger("dose_test")
logger.setLevel(logging.DEBUG)
ui_manager = UIManager(root, logger)
# Use the actual latest CSV data for testing
if len(latest) >= 14:
sample_values = tuple(latest.iloc[:14])
else:
# Pad with empty values if needed
sample_values = tuple(list(latest) + [""] * (14 - len(latest)))
# Track save operations
save_called = False
saved_dose_data = None
def test_save(*args):
nonlocal save_called, saved_dose_data
save_called = True
if len(args) >= 12:
saved_dose_data = args[-1] # dose_data is last argument
print("\n✅ Save called!")
print("💾 Dose data being saved:")
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 the window
if args and hasattr(args[0], "destroy"):
args[0].destroy()
def test_delete(*args):
print("🗑️ Delete called")
if args and hasattr(args[0], "destroy"):
args[0].destroy()
callbacks = {
"save": test_save,
"delete": test_delete,
}
try:
# Create edit window
edit_window = ui_manager.create_edit_window(sample_values, callbacks)
edit_window.geometry("700x500")
edit_window.lift()
edit_window.focus_force()
print("\n📝 INSTRUCTIONS:")
print("1. In any medicine dose field, enter a dose amount (e.g., '100mg')")
print("2. Click the 'Take [Medicine]' button")
print("3. Enter another dose amount")
print("4. Click the 'Take [Medicine]' button again")
print("5. You should see both doses in the text area")
print("6. Click 'Save' to persist changes")
print("\n⏳ Waiting for your interaction...")
# Wait for user interaction
edit_window.wait_window()
if save_called:
print("\n🎉 SUCCESS: Save operation completed!")
print("📊 Multiple doses should now be saved to CSV")
# Verify the save actually updated the CSV
try:
df_after = pd.read_csv("thechart_data.csv")
if len(df_after) > len(df):
print("✅ New entry added to CSV")
else:
print("✅ Existing entry updated in CSV")
print("\n🔍 Verifying saved data...")
latest_after = df_after.iloc[-1]
for dose_col in dose_columns:
medicine = dose_col.replace("_doses", "")
dose_data = str(latest_after[dose_col])
if dose_data and dose_data != "nan" and dose_data.strip():
dose_count = len(dose_data.split("|"))
print(f" {medicine}: {dose_count} dose(s) in CSV")
except Exception as e:
print(f"❌ Error verifying CSV: {e}")
return True
else:
print("\n❌ Save was not called - test incomplete")
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 = demonstrate_multiple_doses()
if success:
print("\n🎯 Multiple dose functionality verified!")
else:
print("\n❓ Test incomplete or failed")
+104
View File
@@ -0,0 +1,104 @@
#!/usr/bin/env python3
"""
Script to verify dose saving functionality by examining CSV data.
"""
import os
import sys
import pandas as pd
def verify_dose_saving():
"""Verify that multiple doses are being saved correctly."""
# Read the CSV data
try:
df = pd.read_csv("thechart_data.csv")
print("📊 Examining CSV data for dose entries...")
print(f" Total entries: {len(df)}")
# Check for dose columns
dose_columns = [col for col in df.columns if col.endswith("_doses")]
print(f" Dose columns found: {dose_columns}")
# Look for entries with multiple doses
entries_with_doses = 0
entries_with_multiple_doses = 0
for _, row in df.iterrows():
row_has_doses = False
row_has_multiple = False
for dose_col in dose_columns:
dose_data = str(row[dose_col])
if dose_data and dose_data != "nan" and dose_data.strip():
row_has_doses = True
# Count doses (separated by |)
dose_count = len(dose_data.split("|"))
medicine_name = dose_col.replace("_doses", "")
print(f" {row['date']} - {medicine_name}: {dose_count} dose(s)")
if dose_count > 1:
row_has_multiple = True
print(f" → Multiple doses: {dose_data}")
if row_has_doses:
entries_with_doses += 1
if row_has_multiple:
entries_with_multiple_doses += 1
print("\n📈 Summary:")
print(f" Entries with doses: {entries_with_doses}")
print(f" Entries with multiple doses: {entries_with_multiple_doses}")
if entries_with_multiple_doses > 0:
print("✅ Multiple dose saving IS working!")
return True
else:
print("⚠️ No multiple dose entries found")
return False
except Exception as e:
print(f"❌ Error reading CSV: {e}")
return False
def check_latest_entry():
"""Check the most recent entry for dose data."""
try:
df = pd.read_csv("thechart_data.csv")
latest = df.iloc[-1]
print(f"\n🔍 Latest entry ({latest['date']}):")
dose_columns = [col for col in df.columns if col.endswith("_doses")]
for dose_col in dose_columns:
medicine = dose_col.replace("_doses", "")
dose_data = str(latest[dose_col])
if dose_data and dose_data != "nan" and dose_data.strip():
dose_count = len(dose_data.split("|"))
print(f" {medicine}: {dose_count} dose(s) - {dose_data}")
else:
print(f" {medicine}: No doses")
except Exception as e:
print(f"❌ Error checking latest entry: {e}")
if __name__ == "__main__":
print("🔬 Dose Verification Test")
print("=" * 30)
# Change to the directory containing the CSV
os.chdir("/home/will/Code/thechart")
success = verify_dose_saving()
check_latest_entry()
if success:
print("\n✅ Multiple dose functionality is working correctly!")
else:
print("\n❌ Multiple dose functionality needs investigation")
sys.exit(1)