2022-10-17 14:16:59 +03:00
|
|
|
defmodule PlausibleWeb.CaptchaTest do
|
|
|
|
use Plausible.DataCase
|
|
|
|
|
|
|
|
import Mox
|
|
|
|
setup :verify_on_exit!
|
|
|
|
|
|
|
|
alias PlausibleWeb.Captcha
|
|
|
|
|
|
|
|
describe "mocked payloads" do
|
|
|
|
@failure Jason.decode!(~s/{"success":false,"error-codes":["invalid-input-response"]}/)
|
|
|
|
@success Jason.decode!(~s/{"success":true}/)
|
|
|
|
|
|
|
|
test "returns false for non-success response" do
|
|
|
|
expect(
|
|
|
|
Plausible.HTTPClient.Mock,
|
|
|
|
:post,
|
|
|
|
fn "https://hcaptcha.com/siteverify",
|
|
|
|
[{"content-type", "application/x-www-form-urlencoded"}],
|
|
|
|
%{response: "bad", secret: "scottiger"} ->
|
|
|
|
{:ok,
|
|
|
|
%Finch.Response{
|
|
|
|
status: 200,
|
|
|
|
headers: [{"content-type", "application/json"}],
|
|
|
|
body: @failure
|
|
|
|
}}
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
refute Captcha.verify("bad")
|
|
|
|
end
|
|
|
|
|
|
|
|
test "returns true for successful response" do
|
|
|
|
expect(
|
|
|
|
Plausible.HTTPClient.Mock,
|
|
|
|
:post,
|
|
|
|
fn "https://hcaptcha.com/siteverify",
|
|
|
|
[{"content-type", "application/x-www-form-urlencoded"}],
|
|
|
|
%{response: "good", secret: "scottiger"} ->
|
|
|
|
{:ok,
|
|
|
|
%Finch.Response{
|
|
|
|
status: 200,
|
|
|
|
headers: [{"content-type", "application/json"}],
|
|
|
|
body: @success
|
|
|
|
}}
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
assert Captcha.verify("good")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "with patched application env" do
|
2022-10-24 10:34:02 +03:00
|
|
|
setup_patch_env(:hcaptcha, sitekey: nil)
|
2022-10-17 14:16:59 +03:00
|
|
|
|
|
|
|
test "returns true when disabled" do
|
|
|
|
assert Captcha.verify("disabled")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|