Cycle Management & Member Integration closes #279 #294

Open
moritz wants to merge 49 commits from feature/279_cycle_management into main
Showing only changes of commit 9f33db3fed - Show all commits

View file

@ -96,6 +96,23 @@ defmodule Mv.Membership.MemberCycleCalculationsTest do
member = Ash.load!(member, :current_cycle_status)
assert member.current_cycle_status == nil
end
test "returns status of current cycle for monthly interval" do
fee_type = create_fee_type(%{interval: :monthly})
member = create_member(%{membership_fee_type_id: fee_type.id})
# Create a cycle that is active today (current month)
today = Date.utc_today()
cycle_start = CalendarCycles.calculate_cycle_start(today, :monthly)
create_cycle(member, fee_type, %{
cycle_start: cycle_start,
status: :unpaid
})
member = Ash.load!(member, :current_cycle_status)
assert member.current_cycle_status == :unpaid
end
end
describe "last_cycle_status" do
@ -153,6 +170,30 @@ defmodule Mv.Membership.MemberCycleCalculationsTest do
member = Ash.load!(member, :last_cycle_status)
assert member.last_cycle_status == nil
end
test "returns status of last completed cycle for monthly interval" do
fee_type = create_fee_type(%{interval: :monthly})
member = create_member(%{membership_fee_type_id: fee_type.id})
today = Date.utc_today()
# Create cycles: last month (completed), current month (not completed)
last_month_start = Date.add(today, -32) |> CalendarCycles.calculate_cycle_start(:monthly)
current_month_start = CalendarCycles.calculate_cycle_start(today, :monthly)
create_cycle(member, fee_type, %{
cycle_start: last_month_start,
status: :paid
})
create_cycle(member, fee_type, %{
cycle_start: current_month_start,
status: :unpaid
})
member = Ash.load!(member, :last_cycle_status)
# Should return status of last month (last completed)
assert member.last_cycle_status == :paid
end
end
describe "overdue_count" do
@ -225,6 +266,36 @@ defmodule Mv.Membership.MemberCycleCalculationsTest do
assert member.overdue_count == 0
end
test "counts overdue cycles for monthly interval" do
fee_type = create_fee_type(%{interval: :monthly})
member = create_member(%{membership_fee_type_id: fee_type.id})
today = Date.utc_today()
# Create cycles: two months ago (unpaid, ended), last month (paid, ended), current month (unpaid, not ended)
two_months_ago_start = Date.add(today, -65) |> CalendarCycles.calculate_cycle_start(:monthly)
last_month_start = Date.add(today, -32) |> CalendarCycles.calculate_cycle_start(:monthly)
current_month_start = CalendarCycles.calculate_cycle_start(today, :monthly)
create_cycle(member, fee_type, %{
cycle_start: two_months_ago_start,
status: :unpaid
})
create_cycle(member, fee_type, %{
cycle_start: last_month_start,
status: :paid
})
create_cycle(member, fee_type, %{
cycle_start: current_month_start,
status: :unpaid
})
member = Ash.load!(member, :overdue_count)
# Should only count two_months_ago (unpaid and ended)
assert member.overdue_count == 1
end
test "counts multiple overdue cycles" do
fee_type = create_fee_type(%{interval: :yearly})
member = create_member(%{membership_fee_type_id: fee_type.id})