|
|
import os |
|
|
import asyncio |
|
|
import pytest |
|
|
|
|
|
from app.database import init_db, SessionLocal |
|
|
from app.models import LogEntry, Task, ProjectMembership, Project, User, generate_user_id |
|
|
|
|
|
@pytest.fixture(autouse=True) |
|
|
def _ensure_gemini_env(monkeypatch): |
|
|
|
|
|
monkeypatch.setenv("GEMINI_API_KEY", os.getenv("GEMINI_API_KEY", "test-key")) |
|
|
|
|
|
@pytest.fixture(autouse=True, scope="session") |
|
|
def setup_db(): |
|
|
"""Drop and recreate all tables once per test session.""" |
|
|
from app.database import Base, engine |
|
|
|
|
|
Base.metadata.drop_all(bind=engine) |
|
|
|
|
|
init_db() |
|
|
yield |
|
|
|
|
|
|
|
|
@pytest.fixture(autouse=True) |
|
|
def reset_db(setup_db): |
|
|
"""Clean all rows before each test.""" |
|
|
db = SessionLocal() |
|
|
try: |
|
|
|
|
|
db.query(LogEntry).delete() |
|
|
db.query(Task).delete() |
|
|
db.query(ProjectMembership).delete() |
|
|
db.query(Project).delete() |
|
|
db.query(User).delete() |
|
|
db.commit() |
|
|
yield |
|
|
finally: |
|
|
db.close() |
|
|
|
|
|
@pytest.fixture() |
|
|
def db_session(): |
|
|
db = SessionLocal() |
|
|
try: |
|
|
yield db |
|
|
finally: |
|
|
db.close() |
|
|
|
|
|
@pytest.fixture() |
|
|
def create_user(db_session): |
|
|
def _create(first_name: str, last_name: str): |
|
|
user_id = generate_user_id(first_name) |
|
|
u = User(id=user_id, first_name=first_name, last_name=last_name) |
|
|
db_session.add(u) |
|
|
db_session.commit() |
|
|
db_session.refresh(u) |
|
|
return u |
|
|
return _create |
|
|
|
|
|
|