"""Vérification hCaptcha (module pur, pas de base) — voir `app/forms/captcha.py`.""" from app.config import get_settings from app.forms.captcha import verify_hcaptcha def test_verification_is_skipped_without_a_configured_secret(monkeypatch): monkeypatch.delenv("HCAPTCHA_SECRET_KEY", raising=False) get_settings.cache_clear() assert verify_hcaptcha(None) is True assert verify_hcaptcha("") is True get_settings.cache_clear() def test_empty_token_is_rejected_when_a_secret_is_configured(monkeypatch): monkeypatch.setenv("HCAPTCHA_SECRET_KEY", "secret") get_settings.cache_clear() assert verify_hcaptcha(None) is False assert verify_hcaptcha("") is False get_settings.cache_clear() def test_delegates_to_the_hcaptcha_api_when_a_secret_is_configured(monkeypatch): monkeypatch.setenv("HCAPTCHA_SECRET_KEY", "secret") get_settings.cache_clear() calls = [] monkeypatch.setattr( "app.forms.captcha._verify_with_hcaptcha", lambda token, secret: calls.append((token, secret)) or True, ) assert verify_hcaptcha("a-token") is True assert calls == [("a-token", "secret")] get_settings.cache_clear() def test_network_failure_is_treated_as_a_failed_verification(monkeypatch): monkeypatch.setenv("HCAPTCHA_SECRET_KEY", "secret") get_settings.cache_clear() def _raise(*args, **kwargs): import httpx raise httpx.ConnectError("boom") monkeypatch.setattr("httpx.post", _raise) assert verify_hcaptcha("a-token") is False get_settings.cache_clear()