Update seeds: member without fee type, cycles with various statuses

Add member without membership fee type. Generate cycles for members
with fee types and set different statuses: all paid, all unpaid, and
mixed (paid/unpaid/suspended). Update tests accordingly.
This commit is contained in:
Moritz 2025-12-18 13:53:01 +01:00
parent f25e198b0e
commit 239d784f3c
Signed by: moritz
GPG key ID: 1020A035E5DD0824
2 changed files with 171 additions and 35 deletions

View file

@ -43,18 +43,19 @@ defmodule Mv.SeedsTest do
"CustomFields count should remain same after re-running seeds"
end
test "all members have membership fee type assigned" do
test "at least one member has no membership fee type assigned" do
# Run the seeds script
assert Code.eval_file("priv/repo/seeds.exs")
# Get all members
{:ok, members} = Ash.read(Mv.Membership.Member)
# All members should have a membership_fee_type_id
Enum.each(members, fn member ->
assert member.membership_fee_type_id != nil,
"Member #{member.first_name} #{member.last_name} should have a membership fee type assigned"
end)
# At least one member should have no membership_fee_type_id
members_without_fee_type =
Enum.filter(members, fn member -> member.membership_fee_type_id == nil end)
assert length(members_without_fee_type) > 0,
"At least one member should have no membership fee type assigned"
end
test "each membership fee type has at least one member" do
@ -65,9 +66,10 @@ defmodule Mv.SeedsTest do
{:ok, fee_types} = Ash.read(Mv.MembershipFees.MembershipFeeType)
{:ok, members} = Ash.read(Mv.Membership.Member)
# Group members by fee type
# Group members by fee type (excluding nil)
members_by_fee_type =
members
|> Enum.filter(&(&1.membership_fee_type_id != nil))
|> Enum.group_by(& &1.membership_fee_type_id)
# Each fee type should have at least one member
@ -78,5 +80,38 @@ defmodule Mv.SeedsTest do
"Membership fee type #{fee_type.name} should have at least one member assigned"
end)
end
test "members with fee types have cycles with various statuses" do
# Run the seeds script
assert Code.eval_file("priv/repo/seeds.exs")
# Get all members with fee types
{:ok, members} = Ash.read(Mv.Membership.Member)
members_with_fee_types =
members
|> Enum.filter(&(&1.membership_fee_type_id != nil))
# At least one member should have cycles
assert length(members_with_fee_types) > 0,
"At least one member should have a membership fee type"
# Check that cycles exist and have various statuses
all_cycle_statuses =
members_with_fee_types
|> Enum.flat_map(fn member ->
Mv.MembershipFees.MembershipFeeCycle
|> Ash.Query.filter(member_id == ^member.id)
|> Ash.read!()
end)
|> Enum.map(& &1.status)
# At least one cycle should be paid
assert :paid in all_cycle_statuses, "At least one cycle should be paid"
# At least one cycle should be unpaid
assert :unpaid in all_cycle_statuses, "At least one cycle should be unpaid"
# At least one cycle should be suspended
assert :suspended in all_cycle_statuses, "At least one cycle should be suspended"
end
end
end