MAC / tests /conftest.py
Aaryan17's picture
chore: upload MAC codebase to HF Space
0e76632 verified
"""Test configuration and fixtures."""
import pytest
import pytest_asyncio
from httpx import AsyncClient, ASGITransport
from mac.main import app
from mac.database import engine, Base, async_session
from mac.services.auth_service import create_user
# Import all models so Base.metadata knows about them
import mac.models.user # noqa: F401
import mac.models.guardrail # noqa: F401
import mac.models.quota # noqa: F401
import mac.models.rag # noqa: F401
import mac.models.node # noqa: F401
import mac.models.model_submission # noqa: F401
import mac.models.agent # noqa: F401
import mac.models.notebook # noqa: F401
import mac.models.notification # noqa: F401
import mac.models.attendance # noqa: F401
import mac.models.doubt # noqa: F401
import mac.models.copy_check # noqa: F401
# Session 1
import mac.models.feature_flag # noqa: F401
import mac.models.academic # noqa: F401
import mac.models.cluster # noqa: F401
import mac.models.file_share # noqa: F401
import mac.models.video # noqa: F401
import mac.models.system_config # noqa: F401
@pytest_asyncio.fixture(autouse=True)
async def setup_db():
"""Create fresh tables for each test."""
# Reset pooled asyncpg connections between tests so they don't outlive
# pytest's per-test event loop lifecycle on Windows.
await engine.dispose()
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
yield
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
await engine.dispose()
@pytest_asyncio.fixture
async def client():
"""Async test client."""
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as c:
yield c
@pytest_asyncio.fixture
async def test_user():
"""Create a test user and return (user, password)."""
async with async_session() as db:
user = await create_user(db, "21CS045", "Test Student", "password123", "CSE", "student")
await db.commit()
return user, "password123"
@pytest_asyncio.fixture
async def admin_user():
"""Create an admin user."""
async with async_session() as db:
user = await create_user(db, "ADMIN001", "Admin", "admin12345", "CSE", "admin")
await db.commit()
return user, "admin12345"
@pytest_asyncio.fixture
async def auth_headers(client, test_user):
"""Login and return auth headers."""
user, password = test_user
resp = await client.post("/api/v1/auth/login", json={
"roll_number": user.roll_number,
"password": password,
})
token = resp.json()["access_token"]
return {"Authorization": f"Bearer {token}"}
@pytest_asyncio.fixture
async def admin_headers(client, admin_user):
"""Login as admin and return auth headers."""
user, password = admin_user
resp = await client.post("/api/v1/auth/login", json={
"roll_number": user.roll_number,
"password": password,
})
token = resp.json()["access_token"]
return {"Authorization": f"Bearer {token}"}