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 folded into the Member cell by default (include-email on). """ 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 shows the email line by default", %{conn: conn} do {:ok, view, _html} = live(conn, ~p"/members") assert has_element?(view, "[data-testid='member-name']") assert has_element?(view, "[data-testid='member-name-email']", "ada@example.com") end test "the include-email sub-toggle removes the email line from the member cell", %{conn: conn} do {:ok, view, _html} = live(conn, ~p"/members") # Email is folded into the Member cell by default; the sub-toggle turns it off. assert has_element?(view, "[data-testid='member-name-email']", "ada@example.com") open_view_settings(view) view |> element("[data-testid='view-setting-member-include-email']") |> render_click() refute has_element?(view, "[data-testid='member-name-email']") 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