87 lines
2.5 KiB
Elixir
87 lines
2.5 KiB
Elixir
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
|