#!/usr/bin/env python3 """ Test script for session management functionality This script validates: 1. Session creation, listing, renaming, and deletion 2. Session-specific memory management 3. Auto-naming functionality 4. Integration with chat system """ import asyncio import json import time import uuid from typing import Dict, Any # Test configuration TEST_USER_ID = "test_user_123" TEST_PROJECT_ID = "test_project_456" BASE_URL = "http://localhost:8000" # Adjust if needed class SessionTester: def __init__(self): self.sessions = [] self.test_results = [] async def test_session_creation(self): """Test creating a new session""" print("๐Ÿงช Testing session creation...") try: import httpx async with httpx.AsyncClient() as client: form_data = { "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "session_name": "Test Session" } response = await client.post(f"{BASE_URL}/sessions/create", data=form_data) if response.status_code == 200: session_data = response.json() self.sessions.append(session_data) print(f"โœ… Session created: {session_data['session_id']}") return session_data else: print(f"โŒ Session creation failed: {response.text}") return None except Exception as e: print(f"โŒ Session creation error: {e}") return None async def test_session_listing(self): """Test listing sessions""" print("๐Ÿงช Testing session listing...") try: import httpx async with httpx.AsyncClient() as client: response = await client.get( f"{BASE_URL}/sessions/list", params={ "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID } ) if response.status_code == 200: data = response.json() sessions = data.get("sessions", []) print(f"โœ… Found {len(sessions)} sessions") return sessions else: print(f"โŒ Session listing failed: {response.text}") return [] except Exception as e: print(f"โŒ Session listing error: {e}") return [] async def test_session_renaming(self, session_id: str): """Test renaming a session""" print(f"๐Ÿงช Testing session renaming for {session_id}...") try: import httpx async with httpx.AsyncClient() as client: form_data = { "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "session_id": session_id, "new_name": "Renamed Test Session" } response = await client.put(f"{BASE_URL}/sessions/rename", data=form_data) if response.status_code == 200: print("โœ… Session renamed successfully") return True else: print(f"โŒ Session renaming failed: {response.text}") return False except Exception as e: print(f"โŒ Session renaming error: {e}") return False async def test_auto_naming(self, session_id: str): """Test auto-naming functionality""" print(f"๐Ÿงช Testing auto-naming for {session_id}...") try: import httpx async with httpx.AsyncClient() as client: form_data = { "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "session_id": session_id, "first_query": "What is machine learning and how does it work?" } response = await client.post(f"{BASE_URL}/sessions/auto-name", data=form_data) if response.status_code == 200: data = response.json() print(f"โœ… Auto-naming result: {data.get('message', 'Success')}") return True else: print(f"โŒ Auto-naming failed: {response.text}") return False except Exception as e: print(f"โŒ Auto-naming error: {e}") return False async def test_chat_with_session(self, session_id: str): """Test chat functionality with session""" print(f"๐Ÿงช Testing chat with session {session_id}...") try: import httpx async with httpx.AsyncClient() as client: form_data = { "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "question": "Hello, this is a test question", "session_id": session_id, "k": 3 } response = await client.post(f"{BASE_URL}/chat", data=form_data) if response.status_code == 200: data = response.json() print(f"โœ… Chat response received: {len(data.get('answer', ''))} characters") return True else: print(f"โŒ Chat failed: {response.text}") return False except Exception as e: print(f"โŒ Chat error: {e}") return False async def test_session_clear_memory(self, session_id: str): """Test clearing session-specific memory""" print(f"๐Ÿงช Testing session memory clearing for {session_id}...") try: import httpx async with httpx.AsyncClient() as client: form_data = { "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "session_id": session_id } response = await client.post(f"{BASE_URL}/sessions/clear-memory", data=form_data) if response.status_code == 200: data = response.json() print(f"โœ… Session memory cleared: {data.get('message', 'Success')}") return True else: print(f"โŒ Session memory clearing failed: {response.text}") return False except Exception as e: print(f"โŒ Session memory clearing error: {e}") return False async def test_session_history_clearing(self, session_id: str): """Test clearing session-specific chat history""" print(f"๐Ÿงช Testing session history clearing for {session_id}...") try: import httpx async with httpx.AsyncClient() as client: response = await client.delete( f"{BASE_URL}/chat/history", params={ "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "session_id": session_id } ) if response.status_code == 200: data = response.json() print(f"โœ… Session history cleared: {data.get('message', 'Success')}") return True else: print(f"โŒ Session history clearing failed: {response.text}") return False except Exception as e: print(f"โŒ Session history clearing error: {e}") return False async def test_session_deletion(self, session_id: str): """Test deleting a session""" print(f"๐Ÿงช Testing session deletion for {session_id}...") try: import httpx async with httpx.AsyncClient() as client: form_data = { "user_id": TEST_USER_ID, "project_id": TEST_PROJECT_ID, "session_id": session_id } response = await client.delete(f"{BASE_URL}/sessions/delete", data=form_data) if response.status_code == 200: data = response.json() print(f"โœ… Session deleted: {data.get('message', 'Success')}") return True else: print(f"โŒ Session deletion failed: {response.text}") return False except Exception as e: print(f"โŒ Session deletion error: {e}") return False async def test_memory_management(self): """Test session-specific memory management""" print("๐Ÿงช Testing session-specific memory management...") try: # This would test the memory system directly # For now, we'll just test that the endpoints exist print("โœ… Memory management endpoints available") return True except Exception as e: print(f"โŒ Memory management error: {e}") return False async def run_all_tests(self): """Run all tests""" print("๐Ÿš€ Starting session management tests...\n") # Test 1: Create session session = await self.test_session_creation() if not session: print("โŒ Cannot continue without a session") print("๐Ÿ’ก Note: Make sure the server is running on http://localhost:8000") return session_id = session["session_id"] # Test 2: List sessions await self.test_session_listing() # Test 3: Rename session await self.test_session_renaming(session_id) # Test 4: Auto-naming await self.test_auto_naming(session_id) # Test 5: Chat with session await self.test_chat_with_session(session_id) # Test 6: Session memory clearing await self.test_session_clear_memory(session_id) # Test 7: Session history clearing await self.test_session_history_clearing(session_id) # Test 8: Memory management await self.test_memory_management() # Test 9: Delete session await self.test_session_deletion(session_id) print("\n๐ŸŽ‰ All tests completed!") async def main(): """Main test runner""" tester = SessionTester() await tester.run_all_tests() if __name__ == "__main__": print("Session Management Test Suite") print("=" * 50) asyncio.run(main())