| # End-to-End Testing Suite for Atom | |
| Comprehensive E2E tests validating Atom's critical workflows with real service integration (PostgreSQL, Redis, LLM providers). | |
| ## Overview | |
| This directory contains end-to-end tests that validate complete user journeys with **real services** (not mocked). E2E tests catch integration issues between components and ensure the system works as users expect. | |
| **Testing Philosophy:** | |
| - **Real Service Integration**: PostgreSQL, Redis, Docker, LLM providers (not mocked) | |
| - **Complete User Journeys**: Test workflows end-to-end, not individual components | |
| - **Production Confidence**: Validate actual behavior, not mocked responses | |
| - **Performance Validation**: Ensure workflows complete within time thresholds | |
| - **Coverage Targets**: 60-70% for MCP service (vs 26.56% with mocks) | |
| ### Why E2E Testing Matters | |
| Unit tests validate individual components in isolation. Integration tests validate component interactions. **E2E tests validate complete user journeys** from start to finish, catching integration issues that unit/integration tests miss. | |
| **Example**: Unit test might verify `AgentGovernanceService.can_perform_action()` returns `True`. E2E test verifies that an agent can actually execute a workflow end-to-end, including database writes, audit trails, and canvas presentations. | |
| ### Test Categories | |
| | Category | File | Purpose | Tests | | |
| |----------|------|---------|-------| | |
| | **MCP Tools** | `test_mcp_tools_e2e.py` | MCP tool integration with real PostgreSQL | 66 | | |
| | **Database** | `test_database_integration_e2e.py` | PostgreSQL, SQLite, migrations, pooling | 31 | | |
| | **LLM Providers** | `test_llm_providers_e2e.py` | OpenAI, Anthropic, DeepSeek, BYOK | 36 | | |
| | **Critical Workflows** | `test_critical_workflows_e2e.py` | Complete user journey validation | 20 | | |
| | **Governance** | `test_scenario_01_governance.py` | Agent governance & routing | 8 | | |
| | **Streaming** | `test_scenario_02_streaming.py` | Multi-provider LLM streaming | 6 | | |
| | **Canvas** | `test_scenario_03_canvas.py` | Canvas presentations with governance | 5 | | |
| | **Guidance** | `test_scenario_04_guidance.py` | Real-time agent guidance | 7 | | |
| | **Browser** | `test_scenario_05_browser.py` | Browser automation with Playwright | 6 | | |
| | **Episodes** | `test_scenario_06_episodes.py` | Episodic memory & retrieval | 8 | | |
| | **Graduation** | `test_scenario_07_graduation.py` | Agent graduation framework | 7 | | |
| | **Training** | `test_scenario_08_training.py` | Student agent training | 8 | | |
| | **Device** | `test_scenario_09_device.py` | Device capabilities & permissions | 9 | | |
| | **Deeplinks** | `test_scenario_10_deeplinks_feedback.py` | Deep linking & feedback | 8 | | |
| ## Setup Instructions | |
| ### Prerequisites | |
| ```bash | |
| # 1. Install Python dependencies | |
| cd /Users/rushiparikh/projects/atom/backend | |
| pip install -e . | |
| # 2. Install Docker (required for PostgreSQL and Redis) | |
| # Download from: https://www.docker.com/products/docker-desktop | |
| # 3. Install Playwright for browser automation tests (optional) | |
| playwright install chromium | |
| ``` | |
| ### Environment Configuration | |
| ```bash | |
| # Required for E2E testing with real services | |
| export E2E_TESTING=true | |
| # Database configuration (default: PostgreSQL on port 5433) | |
| export DATABASE_URL="postgresql://atom:atom@localhost:5433/atom_e2e" | |
| # Or for Personal Edition testing: | |
| # export DATABASE_URL="sqlite:///./atom_e2e.db" | |
| # Redis configuration (default: localhost:6380) | |
| export REDIS_URL="redis://localhost:6380" | |
| # LLM Provider API Keys (optional - tests skip if not set) | |
| export OPENAI_API_KEY="sk-..." | |
| export ANTHROPIC_API_KEY="sk-ant-..." | |
| export DEEPSEEK_API_KEY="sk-..." | |
| export GEMINI_API_KEY="..." | |
| # Feature flags (automatically set by conftest.py) | |
| export STREAMING_GOVERNANCE_ENABLED=true | |
| export CANVAS_GOVERNANCE_ENABLED=true | |
| export BROWSER_AUTOMATION_ENABLED=true | |
| export EPISODIC_MEMORY_ENABLED=true | |
| ``` | |
| ### Docker Service Setup | |
| ```bash | |
| # Start PostgreSQL and Redis for E2E testing | |
| cd /Users/rushiparikh/projects/atom | |
| docker-compose -f docker-compose-e2e.yml up -d | |
| # Verify services are running | |
| docker ps | |
| # Stop services when done | |
| docker-compose -f docker-compose-e2e.yml down | |
| ``` | |
| **Services:** | |
| - **PostgreSQL 16**: `localhost:5433` (user: `atom`, pass: `atom`, db: `atom_e2e`) | |
| - **Valkey 8** (Redis-compatible): `localhost:6380` | |
| ## Test Execution Guide | |
| ### Running All E2E Tests | |
| ```bash | |
| # Run all E2E tests with real services | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v | |
| # Run with timeout enforcement (10 minutes total) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v --timeout=600 | |
| # Run with coverage (MCP service target: 60-70%) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v --cov=integrations/mcp_service --cov-report=term-missing | |
| ``` | |
| ### Running Specific Test Suites | |
| ```bash | |
| # MCP Tool E2E Tests (PostgreSQL integration) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_mcp_tools_e2e.py -v | |
| # Database Integration E2E Tests (PostgreSQL, SQLite, migrations) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_database_integration_e2e.py -v | |
| # LLM Provider E2E Tests (requires API keys) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_llm_providers_e2e.py -v | |
| # Critical Workflow E2E Tests (complete user journeys) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_critical_workflows_e2e.py -v | |
| ``` | |
| ### Running with Coverage | |
| ```bash | |
| # Generate HTML coverage report | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v \ | |
| --cov=integrations/mcp_service \ | |
| --cov=core \ | |
| --cov-report=html \ | |
| --cov-report=term-missing | |
| # View coverage report | |
| open htmlcov/index.html | |
| # Check coverage for specific module | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v \ | |
| --cov=integrations/mcp_service.mcp_service \ | |
| --cov-report=term-missing | |
| ``` | |
| ### Debugging Failed Tests | |
| ```bash | |
| # Run with verbose output | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_critical_workflows_e2e.py -v -s | |
| # Drop into debugger on failure | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_critical_workflows_e2e.py -v -s --pdb | |
| # Run last failed tests | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v --lf | |
| # Run until first failure | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v -x | |
| ``` | |
| ## Test Organization | |
| ### E2E Test Files | |
| #### 1. MCP Tool E2E Tests (`test_mcp_tools_e2e.py`) | |
| **Purpose**: Validate MCP tool integration with real PostgreSQL operations | |
| **Test Coverage**: | |
| - CRM tools (Salesforce, HubSpot, Pipedrive): 5 tests | |
| - Task management (Asana, Trello, Jira): 6 tests | |
| - Ticketing systems (Zendesk, Freshdesk): 4 tests | |
| - Knowledge base (Notion, Confluence): 6 tests | |
| - Canvas presentations: 5 tests | |
| - Finance tools (QuickBooks, Xero): 3 tests | |
| - WhatsApp integration: 3 tests | |
| - Shopify integration: 4 tests | |
| - Error handling (404, 500, timeout): 8 tests | |
| - Concurrency (parallel operations): 4 tests | |
| - Performance (bulk operations): 4 tests | |
| - Data validation (SQL injection, XSS): 10 tests | |
| **Key Fixtures**: | |
| - `e2e_docker_compose`: Start/stop Docker services | |
| - `e2e_postgres_db`: PostgreSQL database connection | |
| - `mcp_service`: MCP service instance with DB | |
| - `crm_data_factory`: Create test CRM records | |
| #### 2. Database Integration E2E Tests (`test_database_integration_e2e.py`) | |
| **Purpose**: Validate database operations across PostgreSQL and SQLite | |
| **Test Coverage**: | |
| - PostgreSQL CRUD operations: 4 tests | |
| - PostgreSQL transactions: 3 tests | |
| - PostgreSQL foreign keys: 3 tests | |
| - SQLite Personal Edition: 2 tests | |
| - SQLite WAL mode: 1 test | |
| - Connection pooling: 3 tests | |
| - Alembic migrations: 4 tests | |
| - Backup/restore: 3 tests | |
| - Performance benchmarks: 3 tests | |
| **Key Fixtures**: | |
| - `e2e_postgres_db`: PostgreSQL database | |
| - `e2e_sqlite_db`: SQLite in-memory database | |
| - `migration_runner`: Run Alembic migrations | |
| - `database_backup`: Backup/restore utilities | |
| #### 3. LLM Provider E2E Tests (`test_llm_providers_e2e.py`) | |
| **Purpose**: Validate multi-provider LLM integration with real API calls | |
| **Test Coverage**: | |
| - OpenAI integration: 6 tests | |
| - Anthropic integration: 6 tests | |
| - DeepSeek integration: 5 tests | |
| - BYOK handler: 7 tests | |
| - Context management: 3 tests | |
| - Cross-provider comparison: 2 tests | |
| - Error handling: 3 tests | |
| - Performance benchmarks: 2 tests | |
| **Key Fixtures**: | |
| - `llm_api_keys`: Detect available API keys | |
| - `openai_client`: OpenAI client (skips if no key) | |
| - `anthropic_client`: Anthropic client (skips if no key) | |
| - `byok_handler`: BYOK handler with multiple providers | |
| **Note**: Tests gracefully skip when API keys not configured (CI-friendly) | |
| #### 4. Critical Workflow E2E Tests (`test_critical_workflows_e2e.py`) | |
| **Purpose**: Validate complete user journeys end-to-end | |
| **Test Coverage**: | |
| - **Agent Execution Workflow** (3 tests): | |
| - Complete agent lifecycle (creation, execution, monitoring, results) | |
| - Failure scenarios with error handling | |
| - Multi-agent coordination | |
| - **Skill Loading Workflow** (3 tests): | |
| - Skill import, security scanning, storage, execution | |
| - Package dependency detection | |
| - Invalid SKILL.md handling | |
| - **Package Installation Workflow** (3 tests): | |
| - Governance approval, vulnerability scanning, installation | |
| - Dependency resolution | |
| - Graceful failure handling | |
| - **Multi-Provider LLM Workflow** (3 tests): | |
| - Provider failure and fallback | |
| - Cost optimization | |
| - Budget enforcement | |
| - **Canvas Presentation Workflow** (3 tests): | |
| - Canvas creation, LLM content generation, presentation | |
| - LLM-generated content on canvas | |
| - Feedback loop and linkage | |
| - **End-to-End Smoke Tests** (5 tests): | |
| - Complete agent-to-canvas journey | |
| - Skill-to-package integration | |
| - Performance threshold validation | |
| - Data integrity checks | |
| - Error recovery and audit trail validation | |
| **Key Fixtures**: | |
| - `agent_workflow`: Agent execution workflow setup | |
| - `skill_workflow`: Skill loading workflow setup | |
| - `package_workflow`: Package installation workflow setup | |
| - `llm_workflow`: Multi-provider LLM workflow setup | |
| - `canvas_workflow`: Canvas presentation workflow setup | |
| - `composite_workflow`: All workflows combined | |
| - `workflow_performance_thresholds`: Performance validation | |
| ### Fixture Modules | |
| #### `conftest.py` - Root E2E Configuration | |
| - Docker Compose lifecycle management | |
| - PostgreSQL and Redis fixtures | |
| - LLM API key detection | |
| - Test data factories | |
| - Performance monitoring | |
| #### `fixtures/workflow_fixtures.py` - Workflow-Specific Fixtures | |
| - Agent workflow fixture | |
| - Skill workflow fixture | |
| - Package workflow fixture | |
| - LLM workflow fixture | |
| - Canvas workflow fixture | |
| - Composite workflow fixture | |
| - Performance threshold fixture | |
| - Audit trail helper | |
| #### `fixtures/database_fixtures.py` - Database Fixtures | |
| - PostgreSQL engine fixture | |
| - SQLite engine fixture | |
| - Migration runner fixture | |
| - Backup/restore fixture | |
| - Connection pool fixture | |
| #### `fixtures/llm_fixtures.py` - LLM Provider Fixtures | |
| - API key detection | |
| - OpenAI client fixture | |
| - Anthropic client fixture | |
| - BYOK handler fixture | |
| - Mock response fixture | |
| #### `fixtures/test_data_factory.py` - Test Data Generation | |
| - CRM data factory | |
| - Task data factory | |
| - Ticket data factory | |
| - Knowledge base factory | |
| - Canvas data factory | |
| - Finance data factory | |
| ## CI/CD Integration | |
| ### GitHub Actions Configuration | |
| ```yaml | |
| name: E2E Tests | |
| on: | |
| push: | |
| branches: [main, develop] | |
| pull_request: | |
| branches: [main, develop] | |
| schedule: | |
| # Run daily at 2 AM UTC | |
| - cron: '0 2 * * *' | |
| jobs: | |
| e2e-tests: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| services: | |
| postgres: | |
| image: postgres:16-alpine | |
| env: | |
| POSTGRES_USER: atom | |
| POSTGRES_PASSWORD: atom | |
| POSTGRES_DB: atom_e2e | |
| ports: | |
| - 5433:5432 | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| redis: | |
| image: valkey/valkey:8 | |
| ports: | |
| - 6380:6379 | |
| options: >- | |
| --health-cmd "redis-cli ping" | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| cd backend | |
| pip install -e . | |
| pip install pytest pytest-timeout pytest-cov | |
| - name: Run E2E tests | |
| env: | |
| E2E_TESTING: true | |
| DATABASE_URL: postgresql://atom:atom@localhost:5433/atom_e2e | |
| REDIS_URL: redis://localhost:6380 | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| run: | | |
| PYTHONPATH=./backend pytest backend/tests/e2e/ -v \ | |
| --timeout=600 \ | |
| --cov=integrations/mcp_service \ | |
| --cov-report=xml \ | |
| --cov-report=term-missing | |
| - name: Check coverage threshold | |
| run: | | |
| coverage=$(coverage report | grep integrations/mcp_service | awk '{print $4}' | sed 's/%//') | |
| if (( $(echo "$coverage < 60" | bc -l) )); then | |
| echo "Coverage $coverage% below 60% threshold" | |
| exit 1 | |
| fi | |
| echo "Coverage $coverage% meets threshold" | |
| - name: Upload coverage | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| files: ./coverage.xml | |
| flags: e2e | |
| name: e2e-coverage | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v3 | |
| with: | |
| name: e2e-test-results | |
| path: | | |
| backend/htmlcov/ | |
| backend/.coverage* | |
| ``` | |
| ### Parallel Execution | |
| ```bash | |
| # Run E2E tests in parallel (faster on CI) | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v -n auto | |
| # Run specific suites in parallel | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest \ | |
| backend/tests/e2e/test_mcp_tools_e2e.py \ | |
| backend/tests/e2e/test_database_integration_e2e.py \ | |
| -v -n auto | |
| ``` | |
| ## Performance Benchmarks | |
| ### Expected Execution Times | |
| | Test Suite | Tests | Target | Notes | | |
| |------------|-------|--------|-------| | |
| | MCP Tools E2E | 66 | 2-3 min | PostgreSQL operations | | |
| | Database Integration | 31 | 1-2 min | PostgreSQL + SQLite | | |
| | LLM Providers | 36 | 2-4 min | API calls (if keys set) | | |
| | Critical Workflows | 20 | 1-2 min | Workflow validation | | |
| | Scenarios (01-10) | 64 | 3-5 min | Feature scenarios | | |
| | **TOTAL** | **217+** | **<10 min** | **Full suite target** | | |
| ### Performance Targets | |
| | Workflow | Target | Validation | | |
| |----------|--------|------------| | |
| | Agent creation | <1s | `test_workflow_performance_within_thresholds` | | |
| | Agent execution | <10s | `test_agent_execution_workflow` | | |
| | Skill import | <5s | `test_skill_loading_workflow` | | |
| | Package install | <60s | `test_python_package_installation` | | |
| | LLM streaming | <5s | `test_multi_provider_fallback` | | |
| | Canvas presentation | <2s | `test_canvas_presentation_workflow` | | |
| | **Total workflow** | **<2 min** | `test_complete_agent_to_canvas_workflow` | | |
| ### Timeout Enforcement | |
| ```bash | |
| # Set 10-minute timeout for entire suite | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v --timeout=600 | |
| # Set per-test timeout | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v --timeout=30 | |
| ``` | |
| ## Coverage Targets | |
| ### Current Baseline (Phase 62) | |
| | Module | Coverage | Target | Gap | | |
| |--------|----------|--------|-----| | |
| | MCP Service | 26.56% | 60-70% | **-33% to -43%** | | |
| | Core Services | 24.4% | 50-60% | -26% to -36% | | |
| | API Routes | 38.2% | 70-80% | -32% to -42% | | |
| ### E2E Test Contribution | |
| E2E tests with real services should improve MCP service coverage from **26.56% to 60-70%**: | |
| **Why E2E Improves Coverage**: | |
| - Unit tests mock external dependencies (database, APIs) | |
| - E2E tests use real PostgreSQL, Redis, LLM providers | |
| - Real service integration covers actual code paths | |
| - No mocking = actual code execution = better coverage | |
| **Validation**: | |
| ```bash | |
| # Run E2E tests with coverage | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v \ | |
| --cov=integrations/mcp_service \ | |
| --cov-report=term-missing | |
| # Check MCP service coverage | |
| # Target: 60-70% (vs 26.56% baseline) | |
| ``` | |
| ## Troubleshooting | |
| ### Docker Issues | |
| **Issue**: Docker services not starting | |
| ```bash | |
| # Check Docker is running | |
| docker ps | |
| # Restart Docker Desktop (macOS/Windows) | |
| # Or restart Docker daemon (Linux) | |
| sudo systemctl restart docker | |
| # Re-create services | |
| docker-compose -f docker-compose-e2e.yml down | |
| docker-compose -f docker-compose-e2e.yml up -d | |
| ``` | |
| **Issue**: PostgreSQL connection refused | |
| ```bash | |
| # Check PostgreSQL is running | |
| docker ps | grep postgres | |
| # Check PostgreSQL logs | |
| docker-compose -f docker-compose-e2e.yml logs postgres | |
| # Verify connection | |
| psql -h localhost -p 5433 -U atom -d atom_e2e | |
| ``` | |
| **Issue**: Redis connection refused | |
| ```bash | |
| # Check Redis is running | |
| docker ps | grep redis | |
| # Check Redis logs | |
| docker-compose -f docker-compose-e2e.yml logs redis | |
| # Verify connection | |
| redis-cli -p 6380 ping | |
| ``` | |
| ### Database Issues | |
| **Issue**: "Database is locked" (SQLite) | |
| ```bash | |
| # Remove stale database files | |
| rm -f atom_e2e.db atom_e2e.db-wal atom_e2e.db-shm | |
| # Re-run tests | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v | |
| ``` | |
| **Issue**: Migration failures | |
| ```bash | |
| # Reset database | |
| docker-compose -f docker-compose-e2e.yml down | |
| docker volume rm atom_postgres_data | |
| docker-compose -f docker-compose-e2e.yml up -d | |
| # Run migrations manually | |
| cd backend | |
| alembic upgrade head | |
| ``` | |
| ### API Key Issues | |
| **Issue**: "API key required" (LLM tests) | |
| ```bash | |
| # Option 1: Set API keys | |
| export OPENAI_API_KEY="sk-..." | |
| export ANTHROPIC_API_KEY="sk-ant-..." | |
| # Option 2: Skip LLM tests | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v -k "not llm" | |
| ``` | |
| ### Test Timeout Issues | |
| **Issue**: Tests exceed timeout | |
| ```bash | |
| # Increase timeout | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v --timeout=900 | |
| # Run tests individually | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/test_critical_workflows_e2e.py -v -s | |
| # Run slow tests last | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v -m "not slow" | |
| ``` | |
| ### Import Errors | |
| **Issue**: "No module named 'core'" | |
| ```bash | |
| # Set PYTHONPATH | |
| export PYTHONPATH=/Users/rushiparikh/projects/atom/backend | |
| # Or use inline | |
| PYTHONPATH=/Users/rushiparikh/projects/atom/backend pytest backend/tests/e2e/ -v | |
| ``` | |
| **Issue**: "No module named 'pytest'" | |
| ```bash | |
| # Install pytest | |
| cd /Users/rushiparikh/projects/atom/backend | |
| pip install pytest pytest-timeout pytest-cov | |
| ``` | |
| ## Best Practices | |
| ### Writing E2E Tests | |
| 1. **Test Complete Workflows**: Don't test individual functions - test user journeys | |
| 2. **Use Real Services**: PostgreSQL, Redis, Docker (not mocks) | |
| 3. **Validate Audit Trails**: Check database records, logs, metrics | |
| 4. **Test Failure Scenarios**: Not just happy path - error handling too | |
| 5. **Assert Performance**: Use `workflow_performance_thresholds` fixture | |
| 6. **Clean Up Test Data**: Use fixtures with proper teardown | |
| ### Example E2E Test | |
| ```python | |
| def test_complete_user_workflow(composite_workflow): | |
| """Test complete workflow from user request to result.""" | |
| agent = composite_workflow["agent"] | |
| canvas = composite_workflow["canvas"] | |
| # Step 1: Execute agent | |
| execution = AgentExecution( | |
| agent_id=agent["agent"].id, | |
| user_id=canvas["user_id"], | |
| task="Generate insights", | |
| status="in_progress" | |
| ) | |
| agent["session"].add(execution) | |
| agent["session"].commit() | |
| # Step 2: Complete execution | |
| execution.status = "completed" | |
| execution.output_data = {"insights": ["insight1", "insight2"]} | |
| agent["session"].commit() | |
| # Step 3: Create canvas | |
| audit = CanvasAudit( | |
| canvas_id=canvas["canvas_id"], | |
| user_id=canvas["user_id"], | |
| action="present", | |
| canvas_data=execution.output_data | |
| ) | |
| canvas["session"].add(audit) | |
| canvas["session"].commit() | |
| # Step 4: Verify workflow complete | |
| assert execution.status == "completed" | |
| assert audit.action == "present" | |
| ``` | |
| ## Contributing | |
| When adding new E2E tests: | |
| 1. **Create Test File**: `tests/e2e/test_new_feature_e2e.py` | |
| 2. **Use E2E Fixtures**: Leverage existing fixtures from `fixtures/` | |
| 3. **Test Real Services**: Use PostgreSQL, Redis, Docker (not mocks) | |
| 4. **Validate Workflows**: Test complete user journeys | |
| 5. **Add Performance Assertions**: Use `workflow_performance_thresholds` | |
| 6. **Update README**: Document new tests in this file | |
| 7. **Update conftest.py**: Add new fixtures if needed | |
| 8. **Verify Coverage**: Run with `--cov` to check coverage contribution | |
| ## Resources | |
| ### Documentation | |
| - **Main Documentation**: `/Users/rushiparikh/projects/atom/CLAUDE.md` | |
| - **API Documentation**: `/Users/rushiparikh/projects/atom/backend/docs/API_DOCUMENTATION.md` | |
| - **Deployment Guide**: `/Users/rushiparikh/projects/atom/docs/DEPLOYMENT/DEPLOYMENT_RUNBOOK.md` | |
| - **Operations Guide**: `/Users/rushiparikh/projects/atom/backend/docs/OPERATIONS_GUIDE.md` | |
| ### Source Code | |
| - **Core Services**: `/Users/rushiparikh/projects/atom/backend/core/` | |
| - **API Routes**: `/Users/rushiparikh/projects/atom/backend/api/` | |
| - **Integrations**: `/Users/rushiparikh/projects/atom/backend/integrations/` | |
| - **Tools**: `/Users/rushiparikh/projects/atom/backend/tools/` | |
| ### Test Infrastructure | |
| - **E2E Fixtures**: `/Users/rushiparikh/projects/atom/backend/tests/e2e/fixtures/` | |
| - **Unit Tests**: `/Users/rushiparikh/projects/atom/backend/tests/unit/` | |
| - **Integration Tests**: `/Users/rushiparikh/projects/atom/backend/tests/integration/` | |
| ## Support | |
| For issues or questions about E2E testing: | |
| 1. Check test docstrings for details | |
| 2. Review fixture definitions in `tests/e2e/fixtures/` | |
| 3. Inspect service implementations in `core/` | |
| 4. Check API route implementations in `api/` | |
| 5. Review CI/CD logs for environment-specific issues | |
| 6. Check Docker logs: `docker-compose -f docker-compose-e2e.yml logs` | |
| --- | |
| **Last Updated**: 2025-02-20 | |
| **E2E Test Count**: 217+ tests across 14 test files | |
| **Coverage Target**: 60-70% for MCP service (vs 26.56% baseline) | |
| **Performance Target**: <10 minutes for full suite execution | |