File size: 3,644 Bytes
ed0b977
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

import sys
import os
import json
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')))
from main import app, db
from utils.db.db import Doctor, ChatSession, ChatMessage, Patient

def verify_workflow():
    with app.test_client() as client:
        # Preamble: Create context
        with app.app_context():
            # Ensure Test Patient
            if not Patient.query.get(999):
                p = Patient(id=999, name="Test Patient", email="test@patient.com", password="pwd")
                db.session.add(p)
            
            # Ensure Test Doctor
            doc = Doctor.query.filter_by(email="testdoc@example.com").first()
            if not doc:
                doc = Doctor(name="Test Doc", specialization="General", email="testdoc@example.com", phone="123", password="password", bio="Test Bio")
                db.session.add(doc)
            
            db.session.commit()

        # 1. Login
        print("\n--- Test 1: Login ---")
        client.post('/login/doctor', data={'name': 'Test Doc', 'password': 'password'}, follow_redirects=True)
        print("PASS: Login attempt made.")

        # 2. Start Session (Patient Search)
        print("\n--- Test 2: Start Session with Patient ID ---")
        # Simulating frontend call: sends "patient search on" then calls ID
        resp = client.post('/api/chat', json={'message': 'patient search on'}) # session_id=None
        
        # Now send ID (simulating modal submit)
        # Note: In real flow, frontend clears session_id then sends ID.
        # Main.py logic: if no session_id provided, it creates one.
        # If we send patient ID logic keywords, backend links it.
        # Actually frontend sends `patientId` *as message body*? Yes: fetchAIResponse(patientId)
        
        resp = client.post('/api/chat', json={'message': '999'}) 
        data = resp.get_json()
        session_id = data.get('session_id')
        
        print(f"Response Session ID: {session_id}")
        if session_id:
            print("PASS: Session created.")
        else:
            print("FAIL: No session ID returned.")
            return

        # 3. Chat in Session
        print("\n--- Test 3: Chat in Session ---")
        resp = client.post('/api/chat', json={'message': 'Hello Doctor', 'session_id': session_id})
        data = resp.get_json()
        # Verify message count in DB
        with app.app_context():
            count = ChatMessage.query.filter_by(session_id=session_id).count()
            print(f"Messages in DB for Session {session_id}: {count}")
            if count >= 2: # At least User + AI response from step 2 and step 3... wait, step 2 was search result.
                print("PASS: Messages saved.")
            else:
                print("FAIL: Messages not saved correctly.")

        # 4. Get History
        print("\n--- Test 4: Get History ---")
        resp = client.get('/api/history')
        hist = resp.get_json()['history']
        print(f"History Sessions: {len(hist)}")
        found = any(s['session_id'] == session_id for s in hist)
        if found:
            print("PASS: Session found in history.")
        else:
            print("FAIL: Session NOT found in history.")

        # 5. Restore Session
        print("\n--- Test 5: Restore Session ---")
        resp = client.get(f'/api/history/{session_id}')
        msgs = resp.get_json()['messages']
        print(f"Restored Messages: {len(msgs)}")
        if len(msgs) > 0:
            print("PASS: Messages restored.")
        else:
            print("FAIL: Restoration failed.")

if __name__ == "__main__":
    verify_workflow()