Swaps the unbounded vertical filter panel for a Polaris-style add-filter builder (searchable grouped field picker, type-aware value control, applied chips) and colour-codes the fees column with each member's period-scoped unpaid-cycle count.
65 lines
2.4 KiB
Elixir
65 lines
2.4 KiB
Elixir
defmodule MvWeb.MemberLive.IndexDefaultColumnsTest do
|
|
@moduledoc """
|
|
§1.2 — With no persisted column selection, exactly the curated default columns
|
|
are visible: selection checkbox, Name (composite, no in-cell email line),
|
|
E-Mail (its own column while the compact Member field keeps the email line off),
|
|
Address (composite), fee type, fee status, groups, join date.
|
|
"""
|
|
use MvWeb.ConnCase, async: false
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Mv.Helpers.SystemActor
|
|
|
|
setup %{conn: conn} do
|
|
{:ok, _} =
|
|
Mv.Membership.create_member(
|
|
%{
|
|
first_name: "Col",
|
|
last_name: "Default",
|
|
email: "col@example.com",
|
|
street: "Musterweg",
|
|
house_number: "1",
|
|
postal_code: "10115",
|
|
city: "Berlin"
|
|
},
|
|
actor: SystemActor.get_system_actor()
|
|
)
|
|
|
|
%{conn: conn_with_oidc_user(conn)}
|
|
end
|
|
|
|
test "curated columns are visible by default", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
# Composite Name + Address cells.
|
|
assert has_element?(view, "[data-testid='member-name']")
|
|
assert has_element?(view, "[data-testid='member-address']")
|
|
# E-Mail is its own column by default (compact Member field, email line off).
|
|
assert has_element?(view, "[data-testid='email']")
|
|
# Fee type, fee status, groups, join date headers.
|
|
assert has_element?(view, "[data-testid='membership_fee_type']")
|
|
assert has_element?(view, "[data-testid='join_date']")
|
|
# The former "Membership Fee Status" column is now the period-scoped payment
|
|
# aging column (§3.3), headed "Fees".
|
|
assert has_element?(view, "th", "Fees")
|
|
assert has_element?(view, "[data-testid='groups']")
|
|
end
|
|
|
|
test "the individual name/address sub-fields are hidden by default", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members")
|
|
|
|
# The composite Name/Address cells replace their constituents by default.
|
|
# E-Mail is excluded here: it is a default-visible column of its own.
|
|
for field <- ~w(first_name last_name city street house_number postal_code country) do
|
|
refute has_element?(view, "[data-testid='#{field}']")
|
|
end
|
|
end
|
|
|
|
test "an explicit field selection still overrides the curated default", %{conn: conn} do
|
|
{:ok, view, _html} = live(conn, ~p"/members?fields=email")
|
|
|
|
assert has_element?(view, "[data-testid='email']")
|
|
refute has_element?(view, "[data-testid='member-name']")
|
|
end
|
|
end
|