codex
This commit is contained in:
87
tests/db/test_connection.py
Executable file
87
tests/db/test_connection.py
Executable file
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
Tests pour la couche de connexion SQLAlchemy.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
import pytest
|
||||
from sqlalchemy import inspect
|
||||
|
||||
from pricewatch.app.db.connection import (
|
||||
check_db_connection,
|
||||
get_engine,
|
||||
get_session,
|
||||
init_db,
|
||||
reset_engine,
|
||||
)
|
||||
from pricewatch.app.db.models import Product
|
||||
|
||||
|
||||
@dataclass
|
||||
class FakeDbConfig:
|
||||
"""Config DB minimale pour tests SQLite."""
|
||||
|
||||
url: str
|
||||
host: str = "sqlite"
|
||||
port: int = 0
|
||||
database: str = ":memory:"
|
||||
|
||||
|
||||
@dataclass
|
||||
class FakeAppConfig:
|
||||
"""Config App minimale pour tests."""
|
||||
|
||||
db: FakeDbConfig
|
||||
debug: bool = False
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def reset_db_engine():
|
||||
"""Reset l'engine global entre les tests."""
|
||||
reset_engine()
|
||||
yield
|
||||
reset_engine()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sqlite_config() -> FakeAppConfig:
|
||||
"""Config SQLite in-memory pour tests."""
|
||||
return FakeAppConfig(db=FakeDbConfig(url="sqlite:///:memory:"))
|
||||
|
||||
|
||||
def test_get_engine_sqlite(sqlite_config: FakeAppConfig):
|
||||
"""Cree un engine SQLite fonctionnel."""
|
||||
engine = get_engine(sqlite_config)
|
||||
assert engine.url.get_backend_name() == "sqlite"
|
||||
|
||||
|
||||
def test_init_db_creates_tables(sqlite_config: FakeAppConfig):
|
||||
"""Init DB cree toutes les tables attendues."""
|
||||
init_db(sqlite_config)
|
||||
engine = get_engine(sqlite_config)
|
||||
inspector = inspect(engine)
|
||||
tables = set(inspector.get_table_names())
|
||||
assert "products" in tables
|
||||
assert "price_history" in tables
|
||||
assert "product_images" in tables
|
||||
assert "product_specs" in tables
|
||||
assert "scraping_logs" in tables
|
||||
|
||||
|
||||
def test_get_session_commit(sqlite_config: FakeAppConfig):
|
||||
"""La session permet un commit simple."""
|
||||
init_db(sqlite_config)
|
||||
|
||||
with get_session(sqlite_config) as session:
|
||||
product = Product(source="amazon", reference="B08N5WRWNW", url="https://example.com")
|
||||
session.add(product)
|
||||
session.commit()
|
||||
|
||||
with get_session(sqlite_config) as session:
|
||||
assert session.query(Product).count() == 1
|
||||
|
||||
|
||||
def test_check_db_connection(sqlite_config: FakeAppConfig):
|
||||
"""Le health check DB retourne True en SQLite."""
|
||||
init_db(sqlite_config)
|
||||
assert check_db_connection(sqlite_config) is True
|
||||
Reference in New Issue
Block a user