mitgliederverwaltung/test/mv_web/member_live/index_address_cell_test.exs

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