File size: 1,599 Bytes
35765b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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):
    # Prevent import-time failure in app.llm when GEMINI_API_KEY is missing
    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
    # Drop all tables to ensure clean schema
    Base.metadata.drop_all(bind=engine)
    # Recreate with new schema
    init_db()
    yield


@pytest.fixture(autouse=True)
def reset_db(setup_db):
    """Clean all rows before each test."""
    db = SessionLocal()
    try:
        # Delete in dependency order to satisfy FKs
        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