who_need_help/test/support/google_auth_fake.ex

47 lines
1.1 KiB
Elixir

defmodule WhoNeedHelp.GoogleAuthFake do
@behaviour WhoNeedHelp.GoogleAuth
@impl true
def enabled?, do: true
@impl true
def authorize_url(redirect_uri) do
{:ok,
%{
url:
"https://accounts.google.example/authorize?" <>
URI.encode_query(%{"redirect_uri" => redirect_uri, "state" => "google-test-state"}),
session_params: %{
state: "google-test-state",
nonce: "google-test-nonce",
code_verifier: "google-test-verifier"
}
}}
end
@impl true
def callback(_redirect_uri, params, %{state: state}) do
cond do
params["state"] != state ->
{:error, :invalid_state}
params["code"] in [nil, ""] ->
{:error, :missing_code}
params["email_verified"] == "false" ->
{:error, :email_not_verified}
true ->
email = params["email"] || "google-user@example.com"
{:ok,
%{
provider_uid: params["uid"] || "google-user-42",
email: email,
email_verified: true,
display_name: params["name"] || "Google Neighbor"
}}
end
end
end