Steph680/ormuz
0
1"""Tests de l'annuaire STRATCOM embarqué."""2 3import asyncio4 5from app import api6 7 8def test_annuaire_stratcom_charge_et_coherent():9 data = asyncio.run(api.stratcom())10 assert data["rubriques"] == ["belligerants", "golfe", "m3soh",11 "organisations", "monde"]12 canaux = data["canaux"]13 assert len(canaux) == 9614 # Chaque canal est complet et rattaché à une rubrique connue.15 for c in canaux:16 assert c["url"].startswith("http")17 assert c["rubrique"] in data["rubriques"]18 assert c["acteur"] and c["canal"]19 # Les ordres imposés : belligérants et tête des organisations.20 def acteurs(rubrique):21 vus, ordre = set(), []22 for c in sorted((c for c in canaux if c["rubrique"] == rubrique),23 key=lambda c: c["rang"]):24 if c["acteur"] not in vus:25 vus.add(c["acteur"])26 ordre.append(c["acteur"])27 return ordre28 29 assert acteurs("belligerants") == ["Iran", "États-Unis", "Oman"]30 assert acteurs("organisations")[0] == "Organisation maritime internationale (IMO)"31 assert acteurs("m3soh")[:2] == ["Royaume-Uni", "France"]32 33 34def test_articles_stratcom_par_source(tmp_path, monkeypatch):35 import asyncio as _asyncio36 37 from app import db38 monkeypatch.setenv("DB_PATH", str(tmp_path / "t.db"))39 40 async def scenario():41 await db.init_db()42 async with db.connect() as conn:43 await conn.execute(44 "INSERT INTO news_events (url, published_at, title, title_fr,"45 " title_en, source, lang, category, relevance, classified_at)"46 " VALUES ('u1', ?, 'Original', 'Titre FR', 'Title EN', 'IRNA',"47 " 'en', 'declaration_iran', 70, '2026-08-21')",48 ((__import__('app.state', fromlist=['utc_now']).utc_now().isoformat()),))49 await conn.execute(50 "INSERT INTO news_events (url, published_at, title, source, lang,"51 " category, relevance, classified_at)"52 " VALUES ('u2', '2026-08-20T10:00:00', 'Presse ordinaire',"53 " 'Reuters', 'en', 'declaration_usa', 70, '2026-08-21')")54 await conn.commit()55 data = await api.stratcom_articles(days=60)56 # Seules les sources de la veille STRATCOM sont retournées.57 assert [a["url"] for a in data["articles"]] == ["u1"]58 assert data["articles"][0]["title_fr"] == "Titre FR"59 # Rattachement au classement client : IRNA -> belligérants.60 assert data["articles"][0]["rubrique"] == "belligerants"61 assert data["rubriques"] == ["belligerants", "golfe", "m3soh",62 "organisations", "autres"]63 assert "IRNA" in data["sources"] and "WAM (EAU)" in data["sources"]64 65 _asyncio.run(scenario())66 