Spaces:
Running
Running
| """Pytest configuration and fixtures for all tests.""" | |
| import pytest | |
| import pytest_asyncio | |
| import asyncio | |
| from typing import AsyncGenerator | |
| from sqlmodel.ext.asyncio.session import AsyncSession | |
| from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine | |
| from sqlalchemy.orm import sessionmaker | |
| from src.db.models import User, SQLModel | |
| from src.core.config.config import settings | |
| # Configure pytest-asyncio | |
| pytest_plugins = ("pytest_asyncio",) | |
| def event_loop(): | |
| """Create event loop for async tests.""" | |
| loop = asyncio.new_event_loop() | |
| asyncio.set_event_loop(loop) | |
| yield loop | |
| loop.close() | |
| async def test_db_engine() -> AsyncGenerator[AsyncEngine, None]: | |
| """Create test database engine.""" | |
| # Use in-memory SQLite for testing | |
| engine = create_async_engine( | |
| "sqlite+aiosqlite:///:memory:", | |
| echo=False, | |
| future=True, | |
| ) | |
| # Create tables | |
| async with engine.begin() as conn: | |
| await conn.run_sync(SQLModel.metadata.create_all) | |
| yield engine | |
| # Cleanup | |
| await engine.dispose() | |
| async def test_session_maker(test_db_engine: AsyncEngine): | |
| """Create session maker for test database.""" | |
| return sessionmaker( | |
| bind=test_db_engine, | |
| class_=AsyncSession, | |
| expire_on_commit=False, | |
| future=True, | |
| ) | |
| async def session(test_session_maker) -> AsyncGenerator[AsyncSession, None]: | |
| """Provide database session for tests.""" | |
| async with test_session_maker() as session: | |
| yield session | |
| await session.rollback() | |
| async def test_user(session: AsyncSession) -> User: | |
| """Create a test user.""" | |
| user = User( | |
| email="testuser@example.com", | |
| name="Test User", | |
| password_hash="hashed_password", | |
| is_active=True, | |
| ) | |
| session.add(user) | |
| await session.commit() | |
| await session.refresh(user) | |
| return user | |
| async def test_user_1(session: AsyncSession) -> User: | |
| """Create first test user.""" | |
| user = User( | |
| email="user1@example.com", | |
| name="Test User 1", | |
| password_hash="hashed_password_1", | |
| is_active=True, | |
| ) | |
| session.add(user) | |
| await session.commit() | |
| await session.refresh(user) | |
| return user | |
| async def test_user_2(session: AsyncSession) -> User: | |
| """Create second test user.""" | |
| user = User( | |
| email="user2@example.com", | |
| name="Test User 2", | |
| password_hash="hashed_password_2", | |
| is_active=True, | |
| ) | |
| session.add(user) | |
| await session.commit() | |
| await session.refresh(user) | |
| return user | |