thuna / test_integration.py
Abinjithtk's picture
fix: pin gradio 5.31.0 for huggingface_hub compatibility
402b8ba
Raw
History Blame Contribute Delete
4.14 kB
"""Integration test — validates the full agent pipeline."""
import sys
sys.path.insert(0, '.')
from intent_parser import parse_intent
from health_store import HealthStore
from agent_engine import run_agent
def test_full_pipeline():
store = HealthStore()
print("=" * 60)
print("THUNA INTEGRATION TEST")
print("=" * 60)
# 1. Add condition
r = run_agent("I have diabetes", store)
assert r.intent_type == "add_condition", f"Expected add_condition, got {r.intent_type}"
assert r.badge == "🏥"
print("✓ Add condition: diabetes")
# 2. Add medication
r = run_agent("metformin 500mg twice daily after food", store)
assert r.intent_type == "add_medication", f"Expected add_medication, got {r.intent_type}"
assert r.badge == "💊 ⏰"
assert len(r.tools_executed) >= 2
print("✓ Add medication: metformin 500mg")
# 3. Add BP vital
r = run_agent("BP 145/92", store)
assert r.intent_type == "add_vital", f"Expected add_vital, got {r.intent_type}"
assert r.badge == "❤️"
assert r.alert and "ഉയർന്നത" in r.alert # High BP alert in Malayalam
print(f"✓ Add vital (BP 145/92) — Alert: {r.alert[:30]}...")
# 4. Add sugar vital (high - compound risk)
r = run_agent("sugar 250", store)
assert r.intent_type == "add_vital"
assert r.alert # Should trigger alert (diabetes + high sugar)
print(f"✓ Add vital (sugar 250) — Alert: {r.alert[:30]}...")
# 5. Mark taken
r = run_agent("took metformin", store)
assert r.intent_type == "mark_taken"
assert r.badge == "✅"
print("✓ Mark taken: metformin")
# 6. Query medications
r = run_agent("my medicines", store)
assert r.intent_type == "query_medications"
assert "metformin" in r.context_for_llm.lower() or "Metformin" in r.context_for_llm
print("✓ Query medications")
# 7. Query today's doses
r = run_agent("did I take medicine today", store)
assert r.intent_type == "query_today_doses"
print("✓ Query today's doses")
# 8. Set reminder
r = run_agent("remind me at 9pm to take medicine", store)
assert r.intent_type == "set_reminder"
assert r.badge == "⏰"
print("✓ Set reminder")
# 9. Symptom report
r = run_agent("I have headache and fever", store)
assert r.intent_type == "symptom_report"
assert r.badge == "🤒"
print("✓ Symptom report")
# 10. General chat (Malayalam)
r = run_agent("ബോറടിക്കുന്നു", store)
assert r.intent_type == "general_chat"
print("✓ General chat (Malayalam)")
# 11. Drug interaction
r = run_agent("glimepiride 2mg once daily morning", store)
assert r.intent_type == "add_medication"
assert r.alert and "hypoglycemia" in r.alert.lower() or "Monitor" in str(r.alert)
print(f"✓ Drug interaction detected: {r.alert[:50]}...")
# 12. Lab result
r = run_agent("HbA1c 7.2", store)
assert r.intent_type == "add_lab_result"
assert r.badge == "🧪"
print("✓ Lab result: HbA1c 7.2")
# 13. Health report
report = store.generate_health_report("Test Patient")
assert "THUNA HEALTH REPORT" in report
assert "Metformin" in report
assert "Diabetes" in report
print("✓ Health report generated")
# 14. Family status
status = store.generate_family_status("Test Patient")
assert "Test Patient" in status
print("✓ Family status generated")
# 15. Adherence
adherence = store.get_adherence_rate()
assert "rate" in adherence
print(f"✓ Adherence rate: {adherence['rate']}%")
# 16. Stop medication
r = run_agent("stop metformin", store)
assert r.intent_type == "stop_medication"
assert any(t['success'] for t in r.tools_executed)
print("✓ Stop medication")
# Verify it's stopped
active = store.get_active_medications()
assert not any(m.name == "Metformin" for m in active)
print("✓ Metformin confirmed deactivated")
print()
print("=" * 60)
print("ALL 16 TESTS PASSED ✓")
print("=" * 60)
if __name__ == "__main__":
test_full_pipeline()