mirror of
https://github.com/aljazceru/enclava.git
synced 2025-12-17 07:24:34 +01:00
clean commit
This commit is contained in:
186
backend/tests/integration/test_workflow_system.py
Normal file
186
backend/tests/integration/test_workflow_system.py
Normal file
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test the enhanced workflow system with brand-ai patterns
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import aiohttp
|
||||
import json
|
||||
import time
|
||||
|
||||
async def test_enhanced_workflow_system():
|
||||
async with aiohttp.ClientSession() as session:
|
||||
try:
|
||||
print("🔧 Testing Enhanced Workflow System")
|
||||
print("=" * 50)
|
||||
|
||||
# Register and login test user
|
||||
timestamp = int(time.time())
|
||||
user_data = {
|
||||
"email": f"workflowtest{timestamp}@example.com",
|
||||
"password": "TestPassword123!",
|
||||
"username": f"workflowtest{timestamp}"
|
||||
}
|
||||
|
||||
async with session.post("http://localhost:58000/api/v1/auth/register", json=user_data) as response:
|
||||
if response.status != 201:
|
||||
error_data = await response.json()
|
||||
print(f"❌ Registration failed: {error_data}")
|
||||
return
|
||||
print("✅ User registered")
|
||||
|
||||
# Login
|
||||
login_data = {"email": user_data["email"], "password": user_data["password"]}
|
||||
async with session.post("http://localhost:58000/api/v1/auth/login", json=login_data) as response:
|
||||
if response.status != 200:
|
||||
error_data = await response.json()
|
||||
print(f"❌ Login failed: {error_data}")
|
||||
return
|
||||
|
||||
login_result = await response.json()
|
||||
token = login_result['access_token']
|
||||
headers = {'Authorization': f'Bearer {token}'}
|
||||
print("✅ Login successful")
|
||||
|
||||
# Test 1: Check workflow module status
|
||||
print("\n📊 Test 1: Module Status")
|
||||
async with session.get("http://localhost:58000/api/v1/modules/", headers=headers) as response:
|
||||
if response.status == 200:
|
||||
modules_data = await response.json()
|
||||
workflow_module = None
|
||||
for module in modules_data.get('modules', []):
|
||||
if module.get('name') == 'workflow':
|
||||
workflow_module = module
|
||||
break
|
||||
|
||||
if workflow_module:
|
||||
print(f"✅ Workflow module found: {workflow_module.get('status', 'unknown')}")
|
||||
print(f" Initialized: {workflow_module.get('initialized', False)}")
|
||||
print(f" Version: {workflow_module.get('version', 'unknown')}")
|
||||
else:
|
||||
print("❌ Workflow module not found")
|
||||
return
|
||||
else:
|
||||
print(f"❌ Failed to get module status: {response.status}")
|
||||
return
|
||||
|
||||
# Test 2: Create a simple brand naming workflow
|
||||
print("\n🏭 Test 2: Brand Naming Workflow")
|
||||
brand_workflow = {
|
||||
"name": "Brand Name Generation",
|
||||
"description": "Generate brand names using AI generation step",
|
||||
"version": "1.0.0",
|
||||
"steps": [
|
||||
{
|
||||
"id": "ai_gen_step",
|
||||
"name": "Generate Brand Names",
|
||||
"type": "ai_generation",
|
||||
"config": {
|
||||
"operation": "brand_names",
|
||||
"category": "semantic",
|
||||
"model": "openrouter/anthropic/claude-3.5-sonnet",
|
||||
"temperature": 0.8,
|
||||
"max_tokens": 500,
|
||||
"output_key": "brand_names",
|
||||
"prompt_template": "Generate 3 creative brand names for a {industry} company targeting {target_audience}. Company description: {description}. Return as a JSON list with name and description fields."
|
||||
},
|
||||
"enabled": True
|
||||
},
|
||||
{
|
||||
"id": "filter_step",
|
||||
"name": "Filter Quality Names",
|
||||
"type": "filter",
|
||||
"config": {
|
||||
"input_key": "brand_names",
|
||||
"output_key": "filtered_names",
|
||||
"filter_expression": "len(item.get('name', '')) > 3",
|
||||
"keep_original": False
|
||||
},
|
||||
"enabled": True
|
||||
}
|
||||
],
|
||||
"variables": {
|
||||
"industry": "technology",
|
||||
"target_audience": "developers",
|
||||
"description": "A platform for AI development tools"
|
||||
}
|
||||
}
|
||||
|
||||
# Test workflow execution - FastAPI expects both parameters
|
||||
payload = {
|
||||
"workflow_def": brand_workflow,
|
||||
"input_data": {
|
||||
"industry": "technology",
|
||||
"target_audience": "developers",
|
||||
"description": "A platform for AI development tools"
|
||||
}
|
||||
}
|
||||
|
||||
async with session.post(
|
||||
"http://localhost:58000/api/modules/v1/workflow/execute",
|
||||
json=payload,
|
||||
headers=headers,
|
||||
timeout=aiohttp.ClientTimeout(total=30)
|
||||
) as response:
|
||||
print(f"Workflow execution status: {response.status}")
|
||||
if response.status == 200:
|
||||
result = await response.json()
|
||||
execution_id = result.get("execution_id")
|
||||
print(f"✅ Workflow started: {execution_id}")
|
||||
print(f" Status: {result.get('status', 'unknown')}")
|
||||
|
||||
# Check for results
|
||||
if result.get("results"):
|
||||
print(f" Results available: {len(result.get('results', {}))}")
|
||||
|
||||
# Display brand names if available
|
||||
brand_names = result.get("results", {}).get("brand_names", [])
|
||||
if brand_names:
|
||||
print(f" Generated brand names: {len(brand_names)}")
|
||||
for i, name_info in enumerate(brand_names[:3]): # Show first 3
|
||||
name = name_info.get('name', 'Unknown')
|
||||
desc = name_info.get('description', 'No description')
|
||||
print(f" {i+1}. {name}: {desc[:50]}...")
|
||||
|
||||
# Display filtered results
|
||||
filtered_names = result.get("results", {}).get("filtered_names", [])
|
||||
if filtered_names:
|
||||
print(f" Filtered to {len(filtered_names)} quality names")
|
||||
else:
|
||||
print(" No results yet (workflow may still be running)")
|
||||
|
||||
elif response.status == 503:
|
||||
print("⚠️ Workflow module not initialized (expected on first run)")
|
||||
else:
|
||||
error_data = await response.json()
|
||||
print(f"❌ Workflow execution failed: {error_data}")
|
||||
|
||||
# Test 3: Check workflow templates
|
||||
print("\n📈 Test 3: Workflow Templates")
|
||||
try:
|
||||
async with session.get("http://localhost:58000/api/modules/v1/workflow/templates", headers=headers) as response:
|
||||
if response.status == 200:
|
||||
templates = await response.json()
|
||||
print(f"✅ Workflow templates available: {len(templates.get('templates', []))}")
|
||||
for template in templates.get('templates', [])[:2]: # Show first 2
|
||||
print(f" - {template.get('name')}: {template.get('description')}")
|
||||
else:
|
||||
print(f"ℹ️ Templates not available: {response.status}")
|
||||
except Exception as e:
|
||||
print(f"ℹ️ Templates endpoint error: {e}")
|
||||
|
||||
print(f"\n🎯 Enhanced Workflow System Test Complete!")
|
||||
print("The workflow system now supports:")
|
||||
print(" ✅ Brand-AI inspired step types (AI Generation, Filter, Map, Reduce, etc.)")
|
||||
print(" ✅ AI-powered content generation")
|
||||
print(" ✅ Data transformation and filtering")
|
||||
print(" ✅ Complex workflow orchestration")
|
||||
print(" ✅ Variable templating and context management")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Test error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(test_enhanced_workflow_system())
|
||||
Reference in New Issue
Block a user