def test_verify_service_disabled(self): responses.add( responses.POST, recaptcha.VERIFY_URL, body="", ) serv = recaptcha.Service( pretend.stub(registry=pretend.stub(settings={}))) assert serv.verify_response('') is None assert not responses.calls
def test_remote_ip_payload(self): responses.add( responses.POST, recaptcha.VERIFY_URL, json={"success": True}, ) serv = recaptcha.Service(_REQUEST) serv.verify_response("meaningless", remote_ip="ip") payload = dict(urllib.parse.parse_qsl(responses.calls[0].request.body)) assert payload["remoteip"] == "ip"
def test_missing_success_key_error(self): responses.add( responses.POST, recaptcha.VERIFY_URL, json={"foo": "bar"}, ) serv = recaptcha.Service(_REQUEST) with pytest.raises(recaptcha.UnexpectedError) as err: serv.verify_response("meaningless") expected = "Missing 'success' key in response: {'foo': 'bar'}" assert str(err.value) == expected
def test_unexpected_data_error(self): responses.add( responses.POST, recaptcha.VERIFY_URL, body="something awful", ) serv = recaptcha.Service(_REQUEST) with pytest.raises(recaptcha.UnexpectedError) as err: serv.verify_response("meaningless") expected = "Unexpected data in response body: something awful" assert str(err.value) == expected
def test_verify_service_disabled_with_none(self): responses.add( responses.POST, recaptcha.VERIFY_URL, body="", ) serv = recaptcha.Service( pretend.stub(registry=pretend.stub(settings={ "recaptcha.site_key": None, "recaptcha.secret_key": None, }, ), ), ) assert serv.verify_response('') is None assert not responses.calls
def test_missing_error_codes_key_error(self): responses.add( responses.POST, recaptcha.VERIFY_URL, json={"success": False}, ) serv = recaptcha.Service(_REQUEST) with pytest.raises(recaptcha.UnexpectedError) as err: serv.verify_response("meaningless") expected = "Response missing 'error-codes' key: {'success': False}" assert str(err.value) == expected
def test_challenge_response_missing_hostname_success(self): responses.add( responses.POST, recaptcha.VERIFY_URL, json={ "success": True, "challenge_ts": 0, }, ) serv = recaptcha.Service(_REQUEST) res = serv.verify_response("meaningless") assert isinstance(res, recaptcha.ChallengeResponse) assert res.hostname is None assert res.challenge_ts == 0
def test_error_map_unknown_error(self): responses.add( responses.POST, recaptcha.VERIFY_URL, json={ "success": False, "challenge_ts": 0, "hostname": "hostname_value", "error_codes": ["slartibartfast"], }, ) serv = recaptcha.Service(_REQUEST) with pytest.raises(recaptcha.UnexpectedError) as err: serv.verify_response("meaningless") assert str(err) == "Unexpected error code: slartibartfast"
def test_error_map_error(self): for key, exc_tp in recaptcha.ERROR_CODE_MAP.items(): responses.add(responses.POST, recaptcha.VERIFY_URL, json={ "success": False, "challenge_ts": 0, "hostname": "hotname_value", "error_codes": [key] }) serv = recaptcha.Service(_REQUEST) with pytest.raises(exc_tp): serv.verify_response("meaningless") responses.reset()
def test_csp_policy(self): scheme = 'https' request = pretend.stub( scheme=scheme, registry=pretend.stub(settings={ "recaptcha.site_key": "foo", "recaptcha.secret_key": "bar", })) serv = recaptcha.Service(request) assert serv.csp_policy == { "script-src": [ "{request.scheme}://www.google.com/recaptcha/", "{request.scheme}://www.gstatic.com/recaptcha/", ], "frame-src": ["{request.scheme}://www.google.com/recaptcha/"], "style-src": ["'unsafe-inline'"], }
def test_unexpected_error(self): serv = recaptcha.Service(_REQUEST) serv.request.http.post = pretend.raiser(socket.error) with pytest.raises(recaptcha.UnexpectedError): serv.verify_response("meaningless")