File size: 4,753 Bytes
250bf8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
"""
Test script for Interactive Quiz functionality
"""
import asyncio
import json
import sys
from pathlib import Path

# Add the current directory to the Python path
current_dir = Path(__file__).parent
sys.path.insert(0, str(current_dir))

# Import the interactive quiz tools
from mcp_server.tools.quiz_tools import (
    generate_quiz_tool,
    start_interactive_quiz_tool,
    submit_quiz_answer_tool,
    get_quiz_hint_tool,
    get_quiz_session_status_tool
)

async def test_interactive_quiz():
    """Test the complete interactive quiz workflow"""
    print("πŸ§ͺ Testing Interactive Quiz Functionality")
    print("=" * 50)
    
    try:
        # Test 1: Generate a quiz
        print("\n1. πŸ“ Generating Quiz...")
        quiz_data = await generate_quiz_tool("Linear Equations", "medium")
        print(f"   βœ… Quiz generated: {quiz_data.get('quiz_title', 'N/A')}")
        
        if "error" in quiz_data:
            print(f"   ❌ Error generating quiz: {quiz_data['error']}")
            return
        
        # Test 2: Start interactive quiz session
        print("\n2. πŸš€ Starting Interactive Quiz Session...")
        session_result = await start_interactive_quiz_tool(quiz_data, "test_student_001")
        print(f"   βœ… Session started: {session_result.get('session_id', 'N/A')}")
        
        if "error" in session_result:
            print(f"   ❌ Error starting session: {session_result['error']}")
            return
        
        session_id = session_result.get('session_id')
        first_question = session_result.get('question', {})
        
        print(f"   πŸ“Š Total questions: {session_result.get('total_questions', 0)}")
        print(f"   ❓ First question: {first_question.get('question', 'N/A')[:50]}...")
        
        # Test 3: Get a hint for the first question
        print("\n3. πŸ’‘ Getting Hint...")
        question_id = first_question.get('question_id')
        hint_result = await get_quiz_hint_tool(session_id, question_id)
        print(f"   βœ… Hint: {hint_result.get('hint', 'N/A')[:50]}...")
        
        # Test 4: Submit an answer (let's try the first option)
        print("\n4. ✍️ Submitting Answer...")
        options = first_question.get('options', [])
        if options:
            selected_answer = options[0]  # Select first option
            answer_result = await submit_quiz_answer_tool(session_id, question_id, selected_answer)
            
            print(f"   βœ… Answer submitted: {selected_answer}")
            print(f"   πŸ“Š Correct: {answer_result.get('is_correct', False)}")
            print(f"   πŸ’― Score: {answer_result.get('score', 0)}/{answer_result.get('total_questions', 0)}")
            
            if answer_result.get('explanation'):
                print(f"   πŸ“– Explanation: {answer_result['explanation'][:100]}...")
            
            # Check if there's a next question
            if answer_result.get('next_question'):
                next_q = answer_result['next_question']
                print(f"   ➑️ Next question: {next_q.get('question', 'N/A')[:50]}...")
                
                # Test 5: Submit answer for second question
                print("\n5. ✍️ Submitting Second Answer...")
                next_question_id = next_q.get('question_id')
                next_options = next_q.get('options', [])
                if next_options:
                    # Try the second option this time
                    selected_answer2 = next_options[1] if len(next_options) > 1 else next_options[0]
                    answer_result2 = await submit_quiz_answer_tool(session_id, next_question_id, selected_answer2)
                    
                    print(f"   βœ… Answer submitted: {selected_answer2}")
                    print(f"   πŸ“Š Correct: {answer_result2.get('is_correct', False)}")
                    print(f"   πŸ’― Score: {answer_result2.get('score', 0)}/{answer_result2.get('total_questions', 0)}")
        
        # Test 6: Check session status
        print("\n6. πŸ“Š Checking Session Status...")
        status_result = await get_quiz_session_status_tool(session_id)
        print(f"   βœ… Session status retrieved")
        print(f"   πŸ“ˆ Progress: {status_result.get('current_question', 0)}/{status_result.get('total_questions', 0)}")
        print(f"   πŸ’― Final Score: {status_result.get('score', 0)}")
        print(f"   βœ… Completed: {status_result.get('completed', False)}")
        
        print("\nπŸŽ‰ Interactive Quiz Test Completed Successfully!")
        
    except Exception as e:
        print(f"\n❌ Test failed with error: {str(e)}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    asyncio.run(test_interactive_quiz())