feat: restyle tabs and move delete to edit view

This commit is contained in:
carla 2026-02-25 10:33:30 +01:00
parent ff9f98f8e7
commit 02af136fd9
8 changed files with 361 additions and 276 deletions

View file

@ -3,11 +3,38 @@ defmodule MvWeb.MemberLive.FormErrorHandlingTest do
Tests for error handling in the member form, specifically flash message display.
"""
use MvWeb.ConnCase, async: false
use Gettext, backend: MvWeb.Gettext
import Phoenix.LiveViewTest
require Ash.Query
describe "tab visibility" do
@tag :ui
test "Payments tab is not visible on new member form", %{conn: conn} do
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, "/members/new")
refute html =~ gettext("Payments")
end
@tag :ui
test "Payments tab is not visible on edit member form", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
{:ok, member} =
Mv.Membership.create_member(
%{first_name: "Edit", last_name: "Member", email: "edit@example.com"},
actor: system_actor
)
conn = conn_with_oidc_user(conn)
{:ok, _view, html} = live(conn, ~p"/members/#{member}/edit")
refute html =~ gettext("Payments")
end
end
describe "error handling - flash messages" do
setup do
{:ok, settings} = Mv.Membership.get_settings()

View file

@ -266,36 +266,42 @@ defmodule MvWeb.MemberLive.IndexTest do
assert is_list(state.socket.assigns.members)
end
test "can delete a member without error", %{conn: conn} do
@tag :ui
test "member index does not render Edit or Delete actions", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
# Create a test member first
{:ok, member} =
{:ok, _member} =
Mv.Membership.create_member(
%{
first_name: "Test",
last_name: "User",
email: "test@example.com"
},
%{first_name: "Test", last_name: "User", email: "test@example.com"},
actor: system_actor
)
conn = conn_with_oidc_user(conn)
{:ok, index_view, _html} = live(conn, "/members")
{:ok, view, html} = live(conn, "/members")
# Verify the member is displayed
assert has_element?(index_view, "#members", "Test User")
refute has_element?(view, "[data-testid='member-edit']")
refute html =~ ~s(data-testid="member-delete")
end
# Click the delete link for this member
index_view
|> element("a", "Delete")
@tag :ui
test "row click navigates to member show", %{conn: conn} do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
{:ok, member} =
Mv.Membership.create_member(
%{first_name: "Row", last_name: "Click", email: "rowclick@example.com"},
actor: system_actor
)
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, "/members")
# Click a data cell (e.g. second column = first name) to trigger row navigation
view
|> element("#row-#{member.id} td:nth-child(2)")
|> render_click()
# Verify the member is no longer displayed
refute has_element?(index_view, "#members", "Test User")
# Verify the member was actually deleted from the database
assert not (Mv.Membership.Member |> Ash.Query.filter(id == ^member.id) |> Ash.exists?())
assert_redirect(view, ~p"/members/#{member}")
end
describe "copy_emails feature" do

View file

@ -134,6 +134,35 @@ defmodule MvWeb.MemberLive.ShowTest do
end
end
describe "delete action" do
test "renders Delete button when user can destroy member", %{
conn: conn,
member: member
} do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, ~p"/members/#{member}")
assert has_element?(view, "[data-testid='member-delete']")
end
test "delete event removes member and redirects to index", %{
conn: conn,
member: member
} do
conn = conn_with_oidc_user(conn)
{:ok, view, _html} = live(conn, ~p"/members/#{member}")
view
|> render_click("delete", %{"id" => member.id})
assert_redirect(view, ~p"/members")
refute Mv.Membership.Member
|> Ash.Query.filter(id == ^member.id)
|> Ash.exists?()
end
end
describe "custom field value formatting" do
test "formats string custom field values", %{conn: conn, member: member, actor: actor} do
{:ok, custom_field} =