Membership Fee 6 - UI Components & LiveViews closes #280 #304

Merged
moritz merged 79 commits from feature/280_membership_fee_ui into main 2025-12-26 23:14:50 +01:00
3 changed files with 9 additions and 12 deletions
Showing only changes of commit 6f568bfe54 - Show all commits

View file

@ -49,9 +49,12 @@ defmodule Mv.Membership.MemberTest do
assert {:ok, _member} = Membership.create_member(attrs2) assert {:ok, _member} = Membership.create_member(attrs2)
end end
test "Join date can be in the future" do test "Join date cannot be in the future" do
attrs = Map.put(@valid_attrs, :join_date, Date.utc_today() |> Date.add(1)) attrs = Map.put(@valid_attrs, :join_date, Date.utc_today() |> Date.add(1))
assert {:ok, _member} = Membership.create_member(attrs)
assert {:error,
%Ash.Error.Invalid{errors: [%Ash.Error.Changes.InvalidAttribute{field: :join_date}]}} =
Membership.create_member(attrs)
end end
test "Exit date is optional but must not be before join date if both are specified" do test "Exit date is optional but must not be before join date if both are specified" do

View file

@ -42,15 +42,9 @@ defmodule MvWeb.MemberLive.Index.MembershipFeeStatusTest do
end end
# Helper to create a cycle # Helper to create a cycle
# Note: Does not delete existing cycles - tests should manage their own test data
# If cleanup is needed, it should be done in setup or explicitly in the test
defp create_cycle(member, fee_type, attrs) do defp create_cycle(member, fee_type, attrs) do
# Delete any auto-generated cycles first to avoid conflicts
existing_cycles =
MembershipFeeCycle
|> Ash.Query.filter(member_id == ^member.id)
|> Ash.read!()
Enum.each(existing_cycles, fn cycle -> Ash.destroy!(cycle) end)
default_attrs = %{ default_attrs = %{
cycle_start: ~D[2023-01-01], cycle_start: ~D[2023-01-01],
amount: Decimal.new("50.00"), amount: Decimal.new("50.00"),

View file

@ -644,9 +644,9 @@ defmodule MvWeb.MemberLive.IndexTest do
{:ok, view, _html} = live(conn, "/members?cycle_status_filter=paid") {:ok, view, _html} = live(conn, "/members?cycle_status_filter=paid")
# Toggle to current cycle - this should update URL and preserve filter # Toggle to current cycle - this should update URL and preserve filter
# Use the button in the membership fee status column header # Use the button in the toolbar
view view
|> element("button[phx-click='toggle_cycle_view'].btn-xs") |> element("button[phx-click='toggle_cycle_view']")
|> render_click() |> render_click()
# Wait for patch to complete # Wait for patch to complete