Fusionne dev dans feat/stats-summary

Resout les conflits de deps.py, router.py, repositories/site.py et
test_site.py entre l'ajout de stats et le merge de sites/openapi-contrat
sur dev. Generalise ROUTES_A_ROLE dans test_openapi.py et documente la
checklist d'ajout d'une route metier, absentes de dev au moment du fork.
This commit is contained in:
Johan LEROY
2026-09-16 13:37:03 +02:00
32 changed files with 2544 additions and 67 deletions
+36 -8
View File
@@ -10,19 +10,47 @@ pytestmark = pytest.mark.integration
def identifiant() -> str:
return f"SITE-{uuid.uuid4().hex[:8]}"
return f"site-{uuid.uuid4().hex[:12]}"
async def test_list_all_returns_every_site_sorted_by_id(session: AsyncSession) -> None:
premier, second = sorted([identifiant(), identifiant()])
session.add_all(
[
Site(site_id=second, site_name="B", site_type="bureau", capacity_kw=100),
Site(site_id=premier, site_name="A", site_type="bureau", capacity_kw=50),
]
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)
premier, second = sorted([f"zz-{identifiant()}", f"aa-{identifiant()}"])
await creer(session, site_id=second)
await creer(session, site_id=premier)
sites = await depot.list_all()
identifiants = [site.site_id for site in sites if site.site_id in (premier, second)]