mirror of
https://github.com/khoaliber/LetterFeed.git
synced 2026-03-06 13:22:19 +00:00
v0.1.0
This commit is contained in:
65
backend/app/tests/conftest.py
Normal file
65
backend/app/tests/conftest.py
Normal file
@@ -0,0 +1,65 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user