59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
import uuid
|
|
|
|
import pytest
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models.energy import Site
|
|
from app.repositories.site import SiteRepository
|
|
|
|
pytestmark = pytest.mark.integration
|
|
|
|
|
|
def identifiant() -> str:
|
|
return f"site-{uuid.uuid4().hex[:12]}"
|
|
|
|
|
|
async def creer(session: AsyncSession, **overrides: object) -> Site:
|
|
site = Site(
|
|
site_id=overrides.get("site_id", identifiant()),
|
|
site_name=overrides.get("site_name", "Site de test"),
|
|
site_type=overrides.get("site_type", "industriel"),
|
|
location=overrides.get("location", "Toulouse"),
|
|
capacity_kw=overrides.get("capacity_kw", 42.0),
|
|
status=overrides.get("status", "actif"),
|
|
)
|
|
session.add(site)
|
|
await session.flush()
|
|
return site
|
|
|
|
|
|
async def test_get_by_id_returns_the_matching_site(session: AsyncSession) -> None:
|
|
depot = SiteRepository(session)
|
|
cree = await creer(session)
|
|
|
|
trouve = await depot.get_by_id(cree.site_id)
|
|
nom = trouve.site_name if trouve else None
|
|
await session.rollback()
|
|
|
|
assert nom == "Site de test"
|
|
|
|
|
|
async def test_get_by_id_returns_nothing_for_an_unknown_identifier(
|
|
session: AsyncSession,
|
|
) -> None:
|
|
trouve = await SiteRepository(session).get_by_id(identifiant())
|
|
|
|
assert trouve is None
|
|
|
|
|
|
async def test_list_all_returns_the_sites_sorted_by_identifier(session: AsyncSession) -> None:
|
|
depot = SiteRepository(session)
|
|
await creer(session, site_id=f"zz-{identifiant()}")
|
|
await creer(session, site_id=f"aa-{identifiant()}")
|
|
|
|
sites = await depot.list_all()
|
|
identifiants = [site.site_id for site in sites]
|
|
await session.rollback()
|
|
|
|
assert identifiants == sorted(identifiants)
|