who_need_help/test/support/social_oauth_fake.ex

41 lines
1.0 KiB
Elixir

defmodule WhoNeedHelp.SocialOAuthFake do
@behaviour WhoNeedHelp.SocialOAuth
@impl true
def enabled?(:github), do: true
@impl true
def authorize_url(:github, redirect_uri) do
{:ok,
%{
url:
"https://github.example/authorize?" <>
URI.encode_query(%{"redirect_uri" => redirect_uri, "state" => "test-state"}),
session_params: %{state: "test-state", code_verifier: "test-verifier"}
}}
end
@impl true
def callback(:github, _redirect_uri, params, %{state: state}) do
cond do
params["state"] != state ->
{:error, :invalid_state}
params["code"] in [nil, ""] ->
{:error, :missing_code}
true ->
handle = params["login"] || "helpful-neighbor"
{:ok,
%{
provider: :github,
provider_uid: params["uid"] || "github-user-42",
profile_url: "https://github.com/#{handle}",
handle: "@#{handle}",
verified_at: ~U[2026-07-18 18:00:00Z]
}}
end
end
end