fix: improve get_last_completed_cycle and fix test helpers

- Fix get_last_completed_cycle to find most recent completed cycle
- Fix create_cycle helpers to delete auto-generated cycles first
- Fix Ash.destroy return value handling
- Fix form selectors to use specific IDs
- Fix URL parameter names for filters
- Fix Ash.read_one return value expectations in tests
This commit is contained in:
Moritz 2025-12-16 14:11:15 +01:00
parent ab7fa38010
commit 128c712dbc
Signed by: moritz
GPG key ID: 1020A035E5DD0824
12 changed files with 177 additions and 43 deletions

View file

@ -78,9 +78,14 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
if !Enum.empty?(cycles) do
cycle = List.first(cycles)
# Switch to Membership Fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
# Change status
view
|> element("button[phx-click='mark_as_paid'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='mark_cycle_status'][phx-value-cycle_id='#{cycle.id}']")
|> render_click()
# Verify status changed
@ -102,7 +107,7 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
{:ok, view, _html} = live(conn, "/members/#{member.id}/edit")
view
|> form("form", %{"member[membership_fee_type_id]" => fee_type2.id})
|> form("#member-form", %{"member[membership_fee_type_id]" => fee_type2.id})
|> render_submit()
# Verify cycles regenerated with new amount
@ -124,7 +129,9 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
fee_type = create_fee_type(%{interval: :yearly})
# Update settings
Mv.Membership.Setting
{:ok, settings} = Mv.Membership.get_settings()
settings
|> Ash.Changeset.for_update(:update_membership_fee_settings, %{
default_membership_fee_type_id: fee_type.id
})
@ -141,7 +148,7 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
{:error, {:live_redirect, %{to: _to}}} =
view
|> form("form", form_data)
|> form("#member-form", form_data)
|> render_submit()
# Verify member got default type
@ -170,20 +177,24 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Switch to Membership Fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
# Delete cycle with confirmation
view
|> element("button[phx-click='delete_cycle'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='delete_cycle'][phx-value-cycle_id='#{cycle.id}']")
|> render_click()
# Confirm deletion
view
|> element("button[phx-click='confirm_delete_cycle'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='confirm_delete_cycle'][phx-value-cycle_id='#{cycle.id}']")
|> render_click()
# Verify cycle deleted
assert_raise Ash.Error.Query.NotFound, fn ->
Ash.read_one!(MembershipFeeCycle |> Ash.Query.filter(id == ^cycle.id))
end
# Verify cycle deleted - Ash.read_one returns {:ok, nil} if not found
result = MembershipFeeCycle |> Ash.Query.filter(id == ^cycle.id) |> Ash.read_one()
assert result == {:ok, nil}
end
test "edit cycle amount → modal → amount updated", %{conn: conn} do
@ -203,14 +214,19 @@ defmodule MvWeb.MemberLive.MembershipFeeIntegrationTest do
{:ok, view, _html} = live(conn, "/members/#{member.id}")
# Switch to Membership Fees tab
view
|> element("button[phx-click='switch_tab'][phx-value-tab='membership_fees']")
|> render_click()
# Open edit modal
view
|> element("button[phx-click='edit_cycle_amount'][phx-value-cycle-id='#{cycle.id}']")
|> element("button[phx-click='edit_cycle_amount'][phx-value-cycle_id='#{cycle.id}']")
|> render_click()
# Update amount
view
|> form("form", %{"amount" => "75.00"})
|> form("form[phx-submit='save_cycle_amount']", %{"amount" => "75.00"})
|> render_submit()
# Verify amount updated