Files
enclava/backend/tests/integration/test_workflow_system.py
2025-08-19 09:50:15 +02:00

186 lines
8.8 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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())