diff --git a/lib/auth/session.ex b/lib/auth/session.ex index 7b907a83..a9a382f9 100644 --- a/lib/auth/session.ex +++ b/lib/auth/session.ex @@ -78,11 +78,20 @@ defmodule Auth.Session do end @doc """ - `end_session/1` update session to end it. + `update_session_end/1` update session to end it. """ - def end_session(conn) do + def update_session_end(conn) do get(conn) |> changeset(%{end: DateTime.utc_now()}) |> Repo.update!() end + + + @doc """ + `end_session/1` update session to end it. + """ + def end_session(conn) do + update_session_end(conn) + update_in(conn.assigns, &Map.drop(&1, [:sid])) + end end diff --git a/test/auth/session_test.exs b/test/auth/session_test.exs index 556dfacf..7007c4e3 100644 --- a/test/auth/session_test.exs +++ b/test/auth/session_test.exs @@ -1,5 +1,5 @@ defmodule Auth.SessionTest do - use AuthWeb.ConnCase + use AuthWeb.ConnCase, async: true test "Auth.Session.insert/1 inserts a session record", %{conn: conn} do conn = non_admin_login(conn) @@ -34,7 +34,7 @@ defmodule Auth.SessionTest do assert ses.end == nil end - test "Auth.Session.end_session/1 updates the session record", %{conn: conn} do + test "Auth.Session.update_session_end/1 updates the session record", %{conn: conn} do conn = non_admin_login(conn) session = Auth.Session.insert(conn) @@ -42,9 +42,24 @@ defmodule Auth.SessionTest do assert session.end == nil # End the Session: - updated = Auth.Session.end_session(conn) + updated = Auth.Session.update_session_end(conn) # Confirm the end value has been set. assert updated.end == updated.updated_at end + + test "Auth.Session.end_session/1 terminates the session", %{conn: conn} do + conn = conn |> non_admin_login() |> Auth.Session.start_session() + + session = Auth.Session.get(conn) + # The Session is set on conn.assigns + assert session.id == conn.assigns.sid + + # Initially the session.end is nil (i.e. not yet ended) + assert session.end == nil + + # End the Session: + conn = Auth.Session.end_session(conn) + assert Map.get(conn.assigns, :sid) == nil + end end