"""Regression tests for the canonical services.search provider implementation. The old src.search provider path aliases this module; these tests pin the behavior at the single implementation point. """ import sys from services.search import providers def test_service_safesearch_values_match_provider_contract(monkeypatch): monkeypatch.setattr(providers, "_get_search_settings", lambda: {"search_safesearch": "strict"}) assert providers._safesearch_for("searxng") == "2" assert providers._safesearch_for("brave") == "strict" assert providers._safesearch_for("duckduckgo_lib") == "on" assert providers._safesearch_for("duckduckgo_html") == "1" assert providers._safesearch_for("google_pse") == "active" assert providers._safesearch_for("serper") == "active" monkeypatch.setattr(providers, "_get_search_settings", lambda: {"search_safesearch": "off"}) assert providers._safesearch_for("searxng") == "0" assert providers._safesearch_for("brave") == "off" assert providers._safesearch_for("duckduckgo_lib") == "off" assert providers._safesearch_for("duckduckgo_html") == "-2" assert providers._safesearch_for("google_pse") is None assert providers._safesearch_for("serper") is None def test_service_searxng_json_sends_safesearch(monkeypatch): seen = {} class _Response: def raise_for_status(self): return None def json(self): return { "results": [ {"title": "Result", "url": "https://example.com", "content": "Snippet"} ] } def fake_get(url, **kwargs): seen["url"] = url seen["params"] = kwargs["params"] return _Response() monkeypatch.setattr(providers, "_get_search_instance", lambda: "http://searx.test") monkeypatch.setattr(providers, "_get_search_settings", lambda: {"search_safesearch": "moderate"}) monkeypatch.setattr(providers.httpx, "get", fake_get) results = providers.searxng_search_api("odysseus", count=1) assert results assert seen["url"] == "http://searx.test/search" assert seen["params"]["safesearch"] == "1" def test_service_ddg_redirect_ignores_lookalike_hosts(): for host in ("duckduckgo.com.evil.com", "notduckduckgo.com"): url = f"https://{host}/l/?uddg=https%3A%2F%2Fexample.com" assert providers._resolve_ddg_redirect(url) == url assert providers._resolve_ddg_redirect( "https://duckduckgo.com/l/?uddg=https%3A%2F%2Fexample.com" ) == "https://example.com" def test_service_ddg_html_fallback_sends_safesearch(monkeypatch): seen = {} html = """
""" class _Response: text = html def raise_for_status(self): return None def fake_get(url, **kwargs): seen["params"] = kwargs["params"] return _Response() monkeypatch.setitem(sys.modules, "duckduckgo_search", None) monkeypatch.setattr(providers, "_get_search_settings", lambda: {"search_safesearch": "off"}) monkeypatch.setattr(providers.httpx, "get", fake_get) results = providers.duckduckgo_search("odysseus", count=1) assert seen["params"]["kp"] == "-2" assert results[0]["url"].startswith("https://notduckduckgo.com/")