show_membership_fees_test: format long assert line

This commit is contained in:
Moritz 2026-02-04 00:34:01 +01:00
parent 182d34fe58
commit 085b6be769

View file

@ -320,13 +320,12 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
describe "read_only cannot delete all cycles (policy enforced via Ash.destroy)" do describe "read_only cannot delete all cycles (policy enforced via Ash.destroy)" do
@tag role: :read_only @tag role: :read_only
test "confirm_delete_all_cycles returns error for read_only user", %{ test "Ash.destroy returns Forbidden for read_only so handler would reject", %{
current_user: read_only_user current_user: read_only_user
} do } do
# Backend policy test: read_only cannot destroy any cycle. # The handler uses Ash.destroy per cycle, so if the handler were triggered
# The UI hides the Delete All button for read_only; this test ensures # (e.g. via dev tools), the server would enforce policy and show an error.
# that if the handler were triggered (e.g. via dev tools), the server # This test verifies that Ash.destroy(cycle, actor: read_only_user) returns Forbidden.
# would enforce policy and return Forbidden.
fee_type = create_fee_type(%{interval: :yearly}) fee_type = create_fee_type(%{interval: :yearly})
member = create_member(%{membership_fee_type_id: fee_type.id}) member = create_member(%{membership_fee_type_id: fee_type.id})
cycle = create_cycle(member, fee_type, %{cycle_start: ~D[2023-01-01], status: :unpaid}) cycle = create_cycle(member, fee_type, %{cycle_start: ~D[2023-01-01], status: :unpaid})
@ -335,4 +334,47 @@ defmodule MvWeb.MemberLive.ShowMembershipFeesTest do
Ash.destroy(cycle, domain: Mv.MembershipFees, actor: read_only_user) Ash.destroy(cycle, domain: Mv.MembershipFees, actor: read_only_user)
end end
end end
describe "confirm_delete_all_cycles handler (policy enforced)" do
@tag role: :admin
test "admin can delete all cycles via UI and cycles are removed", %{conn: conn} do
# Use English locale so confirmation "Yes" matches gettext("Yes")
conn = put_session(conn, :locale, "en")
fee_type = create_fee_type(%{interval: :yearly})
member = create_member(%{membership_fee_type_id: fee_type.id})
_c1 = create_cycle(member, fee_type, %{cycle_start: ~D[2022-01-01], status: :paid})
_c2 = create_cycle(member, fee_type, %{cycle_start: ~D[2023-01-01], status: :unpaid})
{:ok, view, _html} = live(conn, "/members/#{member.id}")
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
view
|> element("button[phx-click='delete_all_cycles']")
|> render_click()
view
|> element("input[phx-keyup='update_delete_all_confirmation']")
|> render_keyup(%{"value" => "Yes"})
view
|> element("button[phx-click='confirm_delete_all_cycles']")
|> render_click()
_html = render(view)
system_actor = Mv.Helpers.SystemActor.get_system_actor()
remaining =
Mv.MembershipFees.MembershipFeeCycle
|> Ash.Query.filter(member_id == ^member.id)
|> Ash.read!(actor: system_actor)
assert remaining == [],
"Expected all cycles to be deleted (handler enforces policy via Ash.destroy)"
end
end
end end