defmodule PlausibleWeb.Live.SentryContextTest do use PlausibleWeb.ConnCase, async: true import Phoenix.LiveViewTest defmodule SampleLV do use PlausibleWeb, :live_view def mount(_params, %{"test" => test_pid}, socket) do socket = assign(socket, test_pid: test_pid) {:ok, socket} end def render(assigns) do ~H""" ok computer """ end def handle_event("get_sentry_context", _params, socket) do context = Sentry.Context.get_all() send(socket.assigns.test_pid, {:context, context}) {:noreply, socket} end end describe "sentry context" do test "basic shape", %{conn: conn} do context_hook(conn) assert_receive {:context, context} assert %{ extra: %{}, request: %{ env: %{ "REMOTE_ADDR" => "127.0.0.1", "REMOTE_PORT" => port, "SEVER_NAME" => "www.example.com" }, host: :not_mounted_at_router }, user: %{}, tags: %{}, breadcrumbs: [] } = context assert is_integer(port) end test "user-agent is included", %{conn: conn} do conn |> put_req_header("user-agent", "Firefox") |> context_hook() assert_receive {:context, context} assert context.request.headers["User-Agent"] == "Firefox" end test "user_id is included", %{conn: conn} do context_hook(conn, %{"current_user_id" => 172}) assert_receive {:context, context} assert context.user.id == 172 end end defp context_hook(conn, extra_session \\ %{}) do lv = get_liveview(conn, extra_session) assert render(lv) =~ "ok computer" render_hook(lv, :get_sentry_context, %{}) end defp get_liveview(conn, extra_session) do {:ok, lv, _html} = live_isolated(conn, SampleLV, session: Map.merge(%{"test" => self()}, extra_session)) lv end end