From 31a84539f2f0c6b57bc575177b597c70103bde2a Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 12:54:56 -0400 Subject: [PATCH] Recherche partout (#68, rebase sur main post-#70 et post-#69) --- tests/test_recherche.py | 73 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 tests/test_recherche.py diff --git a/tests/test_recherche.py b/tests/test_recherche.py new file mode 100644 index 0000000..9b58017 --- /dev/null +++ b/tests/test_recherche.py @@ -0,0 +1,73 @@ +"""Tests de la recherche fédérée Flowdeck (fusion #68). + +Fonctions pures de app/middleware/recherche_cors.py uniquement : +aucune base, aucun serveur. +""" + +from app.middleware.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("flowdeck-dev.dracodev.net") is True + assert is_dev_host("flowdeck.dracodev.net") is False + assert is_dev_host("x-dev.dracodev.net.evil") is False + assert is_dev_host("flowdeck-dev.dracodev.net:8443") is True + assert is_prod_host("flowdeck.dracodev.net") is True + assert is_prod_host("flowdeck-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("{{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(): + # Configuration muette (hors requête) + hôte dev : les -dev passent. + assert "https://og-dev.dracodev.net" in sister_origins( + {}, request_host="flowdeck-dev.dracodev.net" + ) + assert "https://og.dracodev.net" in sister_origins( + {}, request_host="flowdeck.dracodev.net" + ) + assert "https://og-dev.dracodev.net" not in sister_origins( + {}, request_host="flowdeck.dracodev.net" + ) + + +def test_cors_headers(): + headers = cors_headers_for("https://og-dev.dracodev.net", RESOLVED_DEV) + assert headers["Access-Control-Allow-Origin"] == "https://og-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://kanbante-dev.dracodev.net", RESOLVED_DEV) + assert headers["Access-Control-Allow-Methods"] == "GET, OPTIONS" + assert preflight_headers("https://evil.example", RESOLVED_DEV) is None