125 lines
3.9 KiB
Python
125 lines
3.9 KiB
Python
"""Simple test configuration for Archon - Essential tests only."""
|
|
|
|
import os
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
# Set test environment
|
|
os.environ["TEST_MODE"] = "true"
|
|
os.environ["TESTING"] = "true"
|
|
# Set fake database credentials to prevent connection attempts
|
|
os.environ["SUPABASE_URL"] = "https://test.supabase.co"
|
|
os.environ["SUPABASE_SERVICE_KEY"] = "test-key"
|
|
# Set required port environment variables for ServiceDiscovery
|
|
os.environ.setdefault("ARCHON_SERVER_PORT", "8181")
|
|
os.environ.setdefault("ARCHON_MCP_PORT", "8051")
|
|
os.environ.setdefault("ARCHON_AGENTS_PORT", "8052")
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def prevent_real_db_calls():
|
|
"""Automatically prevent any real database calls in all tests."""
|
|
with patch("supabase.create_client") as mock_create:
|
|
# Make create_client raise an error if called without our mock
|
|
mock_create.side_effect = Exception("Real database calls are not allowed in tests!")
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_supabase_client():
|
|
"""Mock Supabase client for testing."""
|
|
mock_client = MagicMock()
|
|
|
|
# Mock table operations with chaining support
|
|
mock_table = MagicMock()
|
|
mock_select = MagicMock()
|
|
mock_insert = MagicMock()
|
|
mock_update = MagicMock()
|
|
mock_delete = MagicMock()
|
|
|
|
# Setup method chaining for select
|
|
mock_select.execute.return_value.data = []
|
|
mock_select.eq.return_value = mock_select
|
|
mock_select.neq.return_value = mock_select
|
|
mock_select.order.return_value = mock_select
|
|
mock_select.limit.return_value = mock_select
|
|
mock_table.select.return_value = mock_select
|
|
|
|
# Setup method chaining for insert
|
|
mock_insert.execute.return_value.data = [{"id": "test-id"}]
|
|
mock_table.insert.return_value = mock_insert
|
|
|
|
# Setup method chaining for update
|
|
mock_update.execute.return_value.data = [{"id": "test-id"}]
|
|
mock_update.eq.return_value = mock_update
|
|
mock_table.update.return_value = mock_update
|
|
|
|
# Setup method chaining for delete
|
|
mock_delete.execute.return_value.data = []
|
|
mock_delete.eq.return_value = mock_delete
|
|
mock_table.delete.return_value = mock_delete
|
|
|
|
# Make table() return the mock table
|
|
mock_client.table.return_value = mock_table
|
|
|
|
# Mock auth operations
|
|
mock_client.auth = MagicMock()
|
|
mock_client.auth.get_user.return_value = None
|
|
|
|
# Mock storage operations
|
|
mock_client.storage = MagicMock()
|
|
|
|
return mock_client
|
|
|
|
|
|
@pytest.fixture
|
|
def client(mock_supabase_client):
|
|
"""FastAPI test client with mocked database."""
|
|
# Patch all the ways Supabase client can be created
|
|
with patch(
|
|
"src.server.services.client_manager.create_client", return_value=mock_supabase_client
|
|
):
|
|
with patch(
|
|
"src.server.services.credential_service.create_client",
|
|
return_value=mock_supabase_client,
|
|
):
|
|
with patch(
|
|
"src.server.services.client_manager.get_supabase_client",
|
|
return_value=mock_supabase_client,
|
|
):
|
|
with patch("supabase.create_client", return_value=mock_supabase_client):
|
|
# Import app after patching to ensure mocks are used
|
|
from src.server.main import app
|
|
|
|
return TestClient(app)
|
|
|
|
|
|
@pytest.fixture
|
|
def test_project():
|
|
"""Simple test project data."""
|
|
return {"title": "Test Project", "description": "A test project for essential tests"}
|
|
|
|
|
|
@pytest.fixture
|
|
def test_task():
|
|
"""Simple test task data."""
|
|
return {
|
|
"title": "Test Task",
|
|
"description": "A test task for essential tests",
|
|
"status": "todo",
|
|
"assignee": "User",
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def test_knowledge_item():
|
|
"""Simple test knowledge item data."""
|
|
return {
|
|
"url": "https://example.com/test",
|
|
"title": "Test Knowledge Item",
|
|
"content": "This is test content for knowledge base",
|
|
"source_id": "test-source",
|
|
}
|