mirror of
https://github.com/khoaliber/LetterFeed.git
synced 2026-03-02 13:18:27 +00:00
66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
import os
|
|
|
|
os.environ["LETTERFEED_DATABASE_URL"] = "sqlite:///./test.db"
|
|
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
from app.core.database import Base, engine, get_db
|
|
from app.main import app
|
|
|
|
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
|
|
|
|
@pytest.fixture(scope="function", autouse=True)
|
|
def setup_and_teardown_db():
|
|
"""Set up and tear down the database for each test.
|
|
|
|
This fixture is automatically used for all tests. It creates all tables
|
|
before a test and drops them afterwards. This ensures a clean database for
|
|
every test.
|
|
"""
|
|
Base.metadata.create_all(bind=engine)
|
|
yield
|
|
Base.metadata.drop_all(bind=engine)
|
|
|
|
|
|
@pytest.fixture(name="db_session")
|
|
def db_session_fixture():
|
|
"""Yield a database session for a test."""
|
|
db = TestingSessionLocal()
|
|
try:
|
|
yield db
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
@pytest.fixture(name="client")
|
|
def client_fixture(db_session):
|
|
"""Yield a TestClient for a test."""
|
|
|
|
def override_get_db():
|
|
yield db_session
|
|
|
|
app.dependency_overrides[get_db] = override_get_db
|
|
with TestClient(app) as client:
|
|
yield client
|
|
app.dependency_overrides.clear()
|
|
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
def cleanup_test_db(request):
|
|
"""Clean up the test database after the test session.
|
|
|
|
This fixture is automatically used once per test session. It registers a
|
|
finalizer to remove the test database file after all tests have run.
|
|
"""
|
|
|
|
def remove_test_db():
|
|
# The path is relative to the backend directory where pytest is run
|
|
db_file = "test.db"
|
|
if os.path.exists(db_file):
|
|
os.remove(db_file)
|
|
|
|
request.addfinalizer(remove_test_db)
|