feat(member): condense the overview into composite name and address cells
This commit is contained in:
parent
b79d7ac9ea
commit
af2cc2e0d4
17 changed files with 716 additions and 93 deletions
87
test/mv_web/member_live/index_address_cell_test.exs
Normal file
87
test/mv_web/member_live/index_address_cell_test.exs
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
defmodule MvWeb.MemberLive.IndexAddressCellTest do
|
||||
@moduledoc """
|
||||
§1.1 — The address renders as one composite cell: line 1 = street + house
|
||||
number, line 2 = postal code + city.
|
||||
§1.12 — City and postal code stay findable via search despite the composite
|
||||
cell.
|
||||
"""
|
||||
use MvWeb.ConnCase, async: false
|
||||
|
||||
import Phoenix.LiveViewTest
|
||||
|
||||
alias Mv.Helpers.SystemActor
|
||||
|
||||
defp create_member(attrs) do
|
||||
{:ok, member} =
|
||||
Mv.Membership.create_member(
|
||||
Map.merge(
|
||||
%{first_name: "Addr", last_name: "Tester", email: "addr@example.com"},
|
||||
attrs
|
||||
),
|
||||
actor: SystemActor.get_system_actor()
|
||||
)
|
||||
|
||||
member
|
||||
end
|
||||
|
||||
test "address shows as one cell with street/house on line 1 and postal/city on line 2", %{
|
||||
conn: conn
|
||||
} do
|
||||
member =
|
||||
create_member(%{
|
||||
street: "Hauptstraße",
|
||||
house_number: "12a",
|
||||
postal_code: "10115",
|
||||
city: "Berlin"
|
||||
})
|
||||
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, ~p"/members")
|
||||
|
||||
cell =
|
||||
view
|
||||
|> element("#row-#{member.id} [data-testid='member-address']")
|
||||
|> render()
|
||||
|
||||
assert cell =~ "Hauptstraße"
|
||||
assert cell =~ "12a"
|
||||
assert cell =~ "10115"
|
||||
assert cell =~ "Berlin"
|
||||
|
||||
# Composite, not four separate sortable address columns.
|
||||
refute has_element?(view, "[data-testid='street']")
|
||||
refute has_element?(view, "[data-testid='city']")
|
||||
end
|
||||
|
||||
test "member with no address parts renders a screen-reader label, not a blank cell", %{
|
||||
conn: conn
|
||||
} do
|
||||
member = create_member(%{email: "no-address@example.com"})
|
||||
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, ~p"/members")
|
||||
|
||||
row = view |> element("#row-#{member.id}") |> render()
|
||||
|
||||
assert row =~ "No address"
|
||||
refute has_element?(view, "#row-#{member.id} [data-testid='member-address']")
|
||||
end
|
||||
|
||||
test "members stay findable by city via search", %{conn: conn} do
|
||||
member = create_member(%{city: "Hamburg", email: "city-search@example.com"})
|
||||
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, ~p"/members?query=Hamburg")
|
||||
|
||||
assert has_element?(view, "#row-#{member.id}")
|
||||
end
|
||||
|
||||
test "members stay findable by postal code via search", %{conn: conn} do
|
||||
member = create_member(%{postal_code: "99999", email: "postal-search@example.com"})
|
||||
|
||||
conn = conn_with_oidc_user(conn)
|
||||
{:ok, view, _html} = live(conn, ~p"/members?query=99999")
|
||||
|
||||
assert has_element?(view, "#row-#{member.id}")
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue