From 35a9c7ac808a21be90f5509409c8b770469f5b03 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 12:53:20 -0400 Subject: [PATCH] Recherche partout (#68, rebase sur main post-#70 et post-#69) --- tests/test_recherche_cors.py | 69 ++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 tests/test_recherche_cors.py diff --git a/tests/test_recherche_cors.py b/tests/test_recherche_cors.py new file mode 100644 index 0000000..86c7f3f --- /dev/null +++ b/tests/test_recherche_cors.py @@ -0,0 +1,69 @@ +"""Tests de la recherche fédérée ObsiGate (fusion #68). + +Fonctions pures de backend/recherche_cors.py uniquement : aucune base, +aucun serveur. +""" + +from backend.recherche_cors import ( + cors_headers_for, + is_dev_host, + is_prod_host, + origin_of, + preflight_headers, + sister_origins, +) + +RESOLVED_DEV = { + "obsigate": "https://og-dev.dracodev.net", + "flowdeck": "https://flowdeck-dev.dracodev.net", + "tiktak": "https://tiktak-dev.dracodev.net", + "kanbante": "https://kanbante-dev.dracodev.net", + "agent": "https://agent-dev.dracodev.net", + "gitea": "https://git.dracodev.net", +} + + +def test_is_dev_host(): + assert is_dev_host("og-dev.dracodev.net") is True + assert is_dev_host("og.dracodev.net") is False + assert is_dev_host("x-dev.dracodev.net.evil") is False + assert is_prod_host("og.dracodev.net") is True + assert is_prod_host("og-dev.dracodev.net") is False + + +def test_origin_of(): + assert origin_of("https://og-dev.dracodev.net") == "https://og-dev.dracodev.net" + assert origin_of("https://og-dev.dracodev.net/chemin") == "https://og-dev.dracodev.net" + assert origin_of("{{URL_OBSIGATE}}") is None + + +def test_sister_origins_dev(): + assert sister_origins(RESOLVED_DEV) == { + "https://og-dev.dracodev.net", + "https://flowdeck-dev.dracodev.net", + "https://tiktak-dev.dracodev.net", + "https://kanbante-dev.dracodev.net", + } + + +def test_sister_origins_ajoute_env_de_la_requete(): + assert "https://og-dev.dracodev.net" in sister_origins( + {}, request_host="og-dev.dracodev.net" + ) + assert "https://og-dev.dracodev.net" not in sister_origins( + {}, request_host="og.dracodev.net" + ) + + +def test_cors_headers(): + headers = cors_headers_for("https://tiktak-dev.dracodev.net", RESOLVED_DEV) + assert headers["Access-Control-Allow-Origin"] == "https://tiktak-dev.dracodev.net" + assert headers["Access-Control-Allow-Credentials"] == "true" + assert cors_headers_for("https://evil.example", RESOLVED_DEV) is None + assert cors_headers_for("https://og.dracodev.net", RESOLVED_DEV) is None + + +def test_preflight_headers(): + headers = preflight_headers("https://flowdeck-dev.dracodev.net", RESOLVED_DEV) + assert headers["Access-Control-Allow-Methods"] == "GET, OPTIONS" + assert preflight_headers("https://evil.example", RESOLVED_DEV) is None