73 lines
2.9 KiB
Elixir
73 lines
2.9 KiB
Elixir
defmodule MvWeb.MemberLive.IndexDensityTest do
|
|
@moduledoc """
|
|
§1.4 — The density toggle switches the table row-spacing token and reflects the
|
|
active density in the control state.
|
|
§1.5 — Density persists across reload per browser (session/cookie), with the
|
|
global default applying when nothing is stored.
|
|
"""
|
|
use MvWeb.ConnCase, async: false
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Mv.Helpers.SystemActor
|
|
|
|
setup %{conn: conn} do
|
|
{:ok, _} =
|
|
Mv.Membership.create_member(
|
|
%{first_name: "Dense", last_name: "Row", email: "dense@example.com"},
|
|
actor: SystemActor.get_system_actor()
|
|
)
|
|
|
|
%{conn: conn_with_oidc_user(conn)}
|
|
end
|
|
|
|
defp open_view_settings(view) do
|
|
view |> element("[data-testid='view-settings-button']") |> render_click()
|
|
view
|
|
end
|
|
|
|
test "defaults to comfortable when nothing is stored", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
assert has_element?(view, "[data-testid='members-table-scroll'][data-density='comfortable']")
|
|
# The compact-mode toggle reflects the active (comfortable, i.e. not compact) state.
|
|
open_view_settings(view)
|
|
assert has_element?(view, "[data-testid='view-setting-density'][aria-checked='false']")
|
|
end
|
|
|
|
test "toggle switches the density token and the control state", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
open_view_settings(view)
|
|
view |> element("[data-testid='view-setting-density']") |> render_click()
|
|
|
|
assert has_element?(view, "[data-testid='members-table-scroll'][data-density='compact']")
|
|
assert has_element?(view, "[data-testid='view-setting-density'][aria-checked='true']")
|
|
|
|
# Toggling again returns to comfortable.
|
|
view |> element("[data-testid='view-setting-density']") |> render_click()
|
|
assert has_element?(view, "[data-testid='members-table-scroll'][data-density='comfortable']")
|
|
end
|
|
|
|
test "restores a persisted density from the session on reload", %{conn: conn} do
|
|
conn =
|
|
Plug.Test.init_test_session(conn, %{
|
|
"member_view_settings" => ~s({"density":"comfortable"})
|
|
})
|
|
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
assert has_element?(view, "[data-testid='members-table-scroll'][data-density='comfortable']")
|
|
end
|
|
|
|
test "restores a persisted density on the connected mount via connect params", %{conn: conn} do
|
|
# Faithful reload round-trip: the connected mount cannot read the cookie
|
|
# (the live socket's connect-info map has no cookies), so the client echoes
|
|
# the persisted value through connect params. This is the path that was
|
|
# broken in the R1 accept (cookie written but not restored on mount).
|
|
conn = put_connect_params(conn, %{"view_settings" => ~s({"density":"comfortable"})})
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
assert has_element?(view, "[data-testid='members-table-scroll'][data-density='comfortable']")
|
|
end
|
|
end
|