This commit is contained in:
2026-01-14 07:03:38 +01:00
parent ecda149a4b
commit c91c0f1fc9
61 changed files with 4388 additions and 38 deletions

87
tests/db/test_connection.py Executable file
View 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