The View dropdown drives row density and whether the Member and Address fields render as composite cells or split into their underlying columns; the column manager toggles visibility and resets to the curated default. All choices persist per browser through the URL/session/cookie/global chain, so a saved layout survives reloads without a per-account store.
102 lines
3.7 KiB
Elixir
102 lines
3.7 KiB
Elixir
defmodule MvWeb.MemberLive.IndexViewSettingsTest do
|
|
@moduledoc """
|
|
§1.20 — the view-settings dropdown toggles: the composite "Member" and address
|
|
fields, the "include email" sub-toggle and their effect on the rendered
|
|
columns. Turning a composite off surfaces the underlying separate columns.
|
|
§1.2 — email is not in the Member cell by default.
|
|
"""
|
|
use MvWeb.ConnCase, async: false
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Mv.Helpers.SystemActor
|
|
|
|
setup %{conn: conn} do
|
|
{:ok, _} =
|
|
Mv.Membership.create_member(
|
|
%{
|
|
first_name: "Ada",
|
|
last_name: "Lovelace",
|
|
email: "ada@example.com",
|
|
street: "Baker Street",
|
|
house_number: "221",
|
|
postal_code: "10115",
|
|
city: "Berlin"
|
|
},
|
|
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 "member cell hides the email line by default", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
assert has_element?(view, "[data-testid='member-name']")
|
|
refute has_element?(view, "[data-testid='member-name-email']")
|
|
end
|
|
|
|
test "the include-email sub-toggle surfaces the email line in the member cell", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
open_view_settings(view)
|
|
view |> element("[data-testid='view-setting-member-include-email']") |> render_click()
|
|
|
|
assert has_element?(view, "[data-testid='member-name-email']", "ada@example.com")
|
|
end
|
|
|
|
test "turning off the compact member field shows separate name columns", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
open_view_settings(view)
|
|
view |> element("[data-testid='view-setting-compact-member']") |> render_click()
|
|
|
|
refute has_element?(view, "[data-testid='member-name']")
|
|
assert has_element?(view, "[data-testid='first_name']")
|
|
assert has_element?(view, "[data-testid='last_name']")
|
|
# With the composite off, the email is surfaced as its own column.
|
|
assert has_element?(view, "[data-testid='email']")
|
|
end
|
|
|
|
test "with the compact member field off, the include-email sub-toggle is hidden",
|
|
%{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
open_view_settings(view)
|
|
# While the composite Member field is on, the sub-toggle is available.
|
|
assert has_element?(view, "[data-testid='view-setting-member-include-email']")
|
|
|
|
view |> element("[data-testid='view-setting-compact-member']") |> render_click()
|
|
|
|
# Once the composite is off, the email is a separate column, so the
|
|
# in-cell "include email" sub-toggle no longer applies and is hidden.
|
|
refute has_element?(view, "[data-testid='view-setting-member-include-email']")
|
|
assert has_element?(view, "[data-testid='email']")
|
|
end
|
|
|
|
test "the compact address field renders a composite address cell by default", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
assert has_element?(view, "[data-testid='member-address']")
|
|
refute has_element?(view, "[data-testid='street']")
|
|
refute has_element?(view, "[data-testid='postal_code']")
|
|
refute has_element?(view, "[data-testid='city']")
|
|
end
|
|
|
|
test "turning off the compact address field shows separate address columns", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
open_view_settings(view)
|
|
view |> element("[data-testid='view-setting-compact-address']") |> render_click()
|
|
|
|
refute has_element?(view, "[data-testid='member-address']")
|
|
assert has_element?(view, "[data-testid='street']")
|
|
assert has_element?(view, "[data-testid='postal_code']")
|
|
assert has_element?(view, "[data-testid='city']")
|
|
end
|
|
end
|