| """ |
| Fixtures for systems-level coverage tests. |
| |
| Provides database session and common test data with proper schema. |
| """ |
|
|
| import uuid |
| import pytest |
| from sqlalchemy import create_engine |
| from sqlalchemy.orm import Session, sessionmaker |
| from datetime import datetime |
|
|
| from core.database import Base |
| from core.models import ( |
| AgentRegistry, |
| AgentStatus, |
| AgentProposal, |
| ProposalStatus, |
| ProposalType, |
| SupervisionSession, |
| SupervisionStatus, |
| BlockedTriggerContext, |
| TrainingSession, |
| TriggerSource, |
| User, |
| UserRole, |
| Tenant, |
| ) |
|
|
|
|
| @pytest.fixture(scope="function") |
| def db_session(): |
| """ |
| Create a fresh in-memory database for each test. |
| |
| This ensures complete isolation between test runs. |
| """ |
| |
| engine = create_engine( |
| "sqlite:///:memory:", |
| connect_args={"check_same_thread": False}, |
| echo=False |
| ) |
|
|
| |
| |
| created_count = 0 |
| skipped_count = 0 |
| for table in Base.metadata.sorted_tables: |
| try: |
| table.create(bind=engine, checkfirst=True) |
| created_count += 1 |
| except Exception as e: |
| |
| skipped_count += 1 |
|
|
| print(f"\n[DEBUG] Created {created_count} tables, skipped {skipped_count} with errors") |
|
|
| |
| TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
| session = TestingSessionLocal() |
|
|
| |
| try: |
| tenant = Tenant( |
| id="default", |
| name="Default Tenant", |
| subdomain="default", |
| status="active", |
| ) |
| session.add(tenant) |
| session.commit() |
| except Exception: |
| pass |
|
|
| yield session |
|
|
| |
| session.close() |
| engine.dispose() |
|
|
|
|
| @pytest.fixture(scope="function") |
| def test_tenant(db_session: Session) -> Tenant: |
| """Create a test tenant.""" |
| tenant = Tenant( |
| id=str(uuid.uuid4()), |
| name="Test Tenant", |
| status="active", |
| ) |
| db_session.add(tenant) |
| db_session.commit() |
| db_session.refresh(tenant) |
| return tenant |
|
|
|
|
| @pytest.fixture(scope="function") |
| def test_user(db_session: Session, test_tenant: Tenant) -> User: |
| """Create a test user.""" |
| import uuid |
| user = User( |
| id=str(uuid.uuid4()), |
| email="test@example.com", |
| first_name="Test", |
| last_name="User", |
| role=UserRole.MEMBER.value, |
| tenant_id=test_tenant.id, |
| ) |
| db_session.add(user) |
| db_session.commit() |
| db_session.refresh(user) |
| return user |
|
|
|
|
| @pytest.fixture(scope="function") |
| def admin_user(db_session: Session, test_tenant: Tenant) -> User: |
| """Create an admin user.""" |
| import uuid |
| user = User( |
| id=str(uuid.uuid4()), |
| email="admin@example.com", |
| first_name="Admin", |
| last_name="User", |
| role=UserRole.ADMIN.value, |
| tenant_id=test_tenant.id, |
| ) |
| db_session.add(user) |
| db_session.commit() |
| db_session.refresh(user) |
| return user |
|
|