Files
dexi/test/dexi_web/controllers/session_controller_test.exs

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