"""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