Archon/python/tests/test_service_integration.py

96 lines
3.4 KiB
Python

"""Service integration tests - Test core service interactions."""
def test_project_with_tasks_flow(client):
"""Test creating a project and adding tasks."""
# Create project
project_response = client.post("/api/projects", json={"title": "Test Project"})
assert project_response.status_code in [200, 201, 422]
# List projects to verify
list_response = client.get("/api/projects")
assert list_response.status_code in [200, 500] # 500 is OK in test environment
def test_crawl_to_knowledge_flow(client):
"""Test crawling workflow."""
# Start crawl
crawl_data = {"url": "https://example.com", "max_depth": 1, "max_pages": 5}
response = client.post("/api/knowledge/crawl", json=crawl_data)
assert response.status_code in [200, 201, 400, 404, 422, 500]
def test_document_storage_flow(client):
"""Test document upload endpoint."""
# Test multipart form upload
files = {"file": ("test.txt", b"Test content", "text/plain")}
response = client.post("/api/knowledge/documents", files=files)
assert response.status_code in [200, 201, 400, 404, 422, 500]
def test_code_extraction_flow(client):
"""Test code extraction endpoint."""
response = client.post(
"/api/knowledge/extract-code", json={"document_id": "test-doc-id", "languages": ["python"]}
)
assert response.status_code in [200, 400, 404, 422, 500]
def test_search_and_retrieve_flow(client):
"""Test search functionality."""
# Search
search_response = client.post("/api/knowledge/search", json={"query": "test"})
assert search_response.status_code in [200, 400, 404, 422, 500]
# Get specific item (might not exist)
item_response = client.get("/api/knowledge/items/test-id")
assert item_response.status_code in [200, 404, 500]
def test_mcp_tool_execution(client):
"""Test MCP tool execution endpoint."""
response = client.post("/api/mcp/tools/execute", json={"tool": "test_tool", "params": {}})
assert response.status_code in [200, 400, 404, 422, 500]
def test_socket_io_events(client):
"""Test Socket.IO connectivity."""
# Just verify the endpoint exists
response = client.get("/socket.io/")
assert response.status_code in [200, 400, 404]
def test_background_task_progress(client):
"""Test background task tracking."""
# Check if task progress endpoint exists
response = client.get("/api/tasks/test-task-id/progress")
assert response.status_code in [200, 404, 500]
def test_database_operations(client):
"""Test pagination and filtering."""
# Test with query params
response = client.get("/api/projects?limit=10&offset=0")
assert response.status_code in [200, 500] # 500 is OK in test environment
# Test filtering
response = client.get("/api/tasks?status=todo")
assert response.status_code in [200, 400, 422, 500]
def test_concurrent_operations(client):
"""Test API handles concurrent requests."""
import concurrent.futures
def make_request():
return client.get("/api/projects")
# Make 3 concurrent requests
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
futures = [executor.submit(make_request) for _ in range(3)]
results = [f.result() for f in futures]
# All should succeed or fail with 500 in test environment
for result in results:
assert result.status_code in [200, 500] # 500 is OK in test environment