defmodule PlausibleWeb.Plugs.UserSessionTouchTest do use PlausibleWeb.ConnCase, async: true alias Plausible.Repo alias PlausibleWeb.AuthPlug alias PlausibleWeb.Plugs.UserSessionTouch setup [:create_user, :log_in] test "refreshes session", %{conn: conn, user: user} do now = NaiveDateTime.utc_now(:second) one_day_ago = NaiveDateTime.shift(now, day: -1) %{sessions: [user_session]} = Repo.preload(user, sessions: :user) user_session |> Plausible.Auth.UserSession.touch_session(one_day_ago) |> Repo.update!(allow_stale: true) assert %{assigns: %{current_user_session: user_session}} = conn |> Plug.Conn.fetch_query_params() |> AuthPlug.call([]) |> UserSessionTouch.call([]) assert NaiveDateTime.compare(user_session.last_used_at, now) in [:gt, :eq] assert NaiveDateTime.compare(user_session.timeout_at, user_session.last_used_at) == :gt end test "passes through when there's no authenticated session" do conn = build_conn() |> init_session() |> UserSessionTouch.call([]) refute conn.halted refute get_session(conn, :user_token) end end