50 lines
1.6 KiB
Elixir
50 lines
1.6 KiB
Elixir
defmodule DexiWeb.SessionControllerTest do
|
|
use DexiWeb.ConnCase
|
|
|
|
import Dexi.AccountsFixtures
|
|
|
|
alias Dexi.Accounts
|
|
alias Dexi.GridsLoginHandler
|
|
|
|
test "a completed GRIDS login creates an account and starts a session", %{conn: conn} do
|
|
conn = get(conn, ~p"/login")
|
|
session_id = get_session(conn, :session_id)
|
|
grids_url = GridsLoginHandler.get_signature_url(session_id)
|
|
message_id = grids_url |> String.split("/") |> List.last()
|
|
pubkey = unique_public_key()
|
|
|
|
assert :ok = GridsLoginHandler.write_pubkey(message_id, pubkey)
|
|
|
|
conn = get(conn, ~p"/session/#{message_id}")
|
|
|
|
assert redirected_to(conn) == ~p"/account"
|
|
assert get_session(conn, :user_pubkey) == pubkey
|
|
assert Accounts.get_user_by_pubkey(pubkey)
|
|
end
|
|
|
|
test "a returning account is sent to the home page", %{conn: conn} do
|
|
pubkey = unique_public_key()
|
|
assert {:ok, _user} = Accounts.get_or_create_user(pubkey)
|
|
|
|
conn = get(conn, ~p"/login")
|
|
session_id = get_session(conn, :session_id)
|
|
grids_url = GridsLoginHandler.get_signature_url(session_id)
|
|
message_id = grids_url |> String.split("/") |> List.last()
|
|
|
|
assert :ok = GridsLoginHandler.write_pubkey(message_id, pubkey)
|
|
|
|
conn = get(conn, ~p"/session/#{message_id}")
|
|
|
|
assert redirected_to(conn) == ~p"/"
|
|
assert get_session(conn, :user_pubkey) == pubkey
|
|
end
|
|
|
|
test "an unsigned or consumed challenge cannot start a session", %{conn: conn} do
|
|
conn = get(conn, ~p"/login")
|
|
conn = get(conn, ~p"/session/not-a-message")
|
|
|
|
assert redirected_to(conn) == ~p"/login"
|
|
refute get_session(conn, :user_pubkey)
|
|
end
|
|
end
|