From 938f8b5eb53fbf348daf4798b00d0b6205de62d0 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 12:47:12 -0400 Subject: [PATCH] =?UTF-8?q?Fusion=20#69=20:=20alertes=20unifi=C3=A9es=20(r?= =?UTF-8?q?ebase=20sur=20main=20post-#70=20et=20post-#68)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_draco_alertes.py | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/test_draco_alertes.py diff --git a/tests/test_draco_alertes.py b/tests/test_draco_alertes.py new file mode 100644 index 0000000..15ad7e4 --- /dev/null +++ b/tests/test_draco_alertes.py @@ -0,0 +1,46 @@ +"""Fusion #69 — Alertes unifiées (chantier 2, Kanbante). + +Kanbante n'a pas de table de notifications : sa source réelle est le +journal d'événements, déjà exposé par GET /api/events (aucun nouvel +endpoint). Kanbante ne porte aucun état lu/non lu : ses événements +sont donc tous de l'historique et ne sont jamais comptés comme +actifs par le panneau. Couverts ici : placeholder disparu, module +servi, CORS limité à /api/events pour les seules origines soeurs. +""" + +SOEUR = "https://flowdeck.dracodev.net" + + +def test_barre_alertes_sans_placeholder_et_module_servi(client): + r = client.get("/") + assert r.status_code == 200 + assert "Alertes unifiées : arrive avec la fédération" not in r.text + assert "draco-alertes.js" in r.text + assert "draco-alertes.css" in r.text + js = client.get("/static/js/draco-alertes.js").text + assert "DRACO_ALERTES" in js + assert "api/events" in js + + +def test_events_forme(client): + r = client.get("/api/events") + assert r.status_code == 200 + body = r.json() + assert body["ok"] is True + assert isinstance(body["events"], list) + + +def test_cors_events_soeur_preflight_get_et_tiers(client): + r = client.options("/api/events", + headers={"Origin": SOEUR, + "Access-Control-Request-Method": "GET"}) + assert r.status_code == 200 + assert r.headers.get("access-control-allow-origin") == SOEUR + assert r.headers.get("access-control-allow-credentials") == "true" + r2 = client.get("/api/events", headers={"Origin": SOEUR}) + assert r2.status_code == 200 + assert r2.headers.get("access-control-allow-origin") == SOEUR + r3 = client.options("/api/events", + headers={"Origin": "https://evil.example", + "Access-Control-Request-Method": "GET"}) + assert "access-control-allow-origin" not in r3.headers