annator-command-center / tests /standalone /test_chat_process.py
techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 9)
81e3673 verified
Raw
History Blame Contribute Delete
4.79 kB
#!/usr/bin/env python3
"""
Test script for ChatProcessManager.
Run with: python test_chat_process.py
"""
import asyncio
import logging
import os
import sys
logging.basicConfig(level=logging.DEBUG)
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from core.chat_process_manager import get_process_manager
async def test_chat_process_manager():
"""Test the ChatProcessManager functionality"""
print("=== Testing ChatProcessManager ===\n")
manager = get_process_manager()
user_id = "test_user_123"
process_name = "Test Multi-Step Process"
# Define steps
steps = [
{
"id": "step1",
"title": "Get Name",
"description": "What is your name?",
"requiredInput": "name"
},
{
"id": "step2",
"title": "Get Email",
"description": "What is your email?",
"requiredInput": "email"
},
{
"id": "step3",
"title": "Confirmation",
"description": "Confirm details",
"requiredInput": ""
}
]
# 1. Create a new process
print("1. Creating new process...")
process_id = await manager.create_process(
user_id=user_id,
name=process_name,
steps=steps,
initial_context={"source": "test"}
)
print(f" Created process ID: {process_id}")
# 2. Retrieve the process
print("\n2. Retrieving process...")
process = await manager.get_process(process_id)
if not process:
print(" ERROR: Process not found!")
return
print(f" Process name: {process['name']}")
print(f" Current step: {process['current_step']}")
print(f" Total steps: {process['total_steps']}")
print(f" Status: {process['status']}")
# 3. Submit input for step 1
print("\n3. Submitting input for step 1...")
result = await manager.update_process_step(
process_id=process_id,
step_input={"name": "John Doe"},
step_output={"greeting": "Hello John"},
missing_parameters=None
)
print(f" Next step: {result['next_step']}")
print(f" Status: {result['status']}")
print(f" Missing parameters: {result['missing_parameters']}")
# 4. Check process state after step 1
process = await manager.get_process(process_id)
print(f" Current step after update: {process['current_step']}")
print(f" Inputs collected: {process['inputs']}")
print(f" Outputs collected: {process['outputs']}")
# 5. Submit input for step 2 with missing parameters
print("\n4. Submitting input for step 2 with missing parameters...")
result = await manager.update_process_step(
process_id=process_id,
step_input={"email": ""}, # Empty email
step_output=None,
missing_parameters=["email"] # Simulate missing parameter
)
print(f" Next step: {result['next_step']}")
print(f" Status: {result['status']}")
print(f" Missing parameters: {result['missing_parameters']}")
# 6. Check process is paused
process = await manager.get_process(process_id)
print(f" Process status after missing param: {process['status']}")
print(f" Missing parameters in DB: {process['missing_parameters']}")
# 7. Resume process with missing parameter
print("\n5. Resuming process with missing parameter...")
result = await manager.resume_process(
process_id=process_id,
new_inputs={"email": "john@example.com"}
)
print(f" Status after resume: {result['status']}")
print(f" Remaining missing: {result['remaining_missing']}")
# 8. Complete final step
print("\n6. Completing final step...")
result = await manager.update_process_step(
process_id=process_id,
step_input={"confirmed": True},
step_output={"final": "Process completed successfully"},
missing_parameters=None
)
print(f" Next step: {result['next_step']}")
print(f" Status: {result['status']}")
# 9. Get final process state
process = await manager.get_process(process_id)
print(f"\n7. Final process state:")
print(f" Status: {process['status']}")
print(f" Current step: {process['current_step']}")
print(f" Inputs: {process['inputs']}")
print(f" Outputs: {process['outputs']}")
# 10. Get user's processes
print("\n8. Listing user's processes...")
processes = await manager.get_user_processes(user_id)
print(f" Found {len(processes)} processes for user {user_id}")
for p in processes:
print(f" - {p['name']} (ID: {p['id']}, Status: {p['status']})")
print("\n=== Test completed successfully ===")
if __name__ == "__main__":
asyncio.run(test_chat_process_manager())