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