Add actor parameter to all tests requiring authorization
All checks were successful
continuous-integration/drone/push Build is passing

This commit adds actor: system_actor to all Ash operations in tests that
require authorization.
This commit is contained in:
Moritz 2026-01-23 20:00:24 +01:00
parent 4c846f8bba
commit a6cdeaa18d
Signed by: moritz
GPG key ID: 1020A035E5DD0824
75 changed files with 4649 additions and 2865 deletions

View file

@ -6,13 +6,18 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
alias Mv.MembershipFees.Changes.SetMembershipFeeStartDate
setup do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
%{actor: system_actor}
end
# Helper to set up settings with specific include_joining_cycle value
defp setup_settings(include_joining_cycle) do
defp setup_settings(include_joining_cycle, actor) do
{:ok, settings} = Mv.Membership.get_settings()
settings
|> Ash.Changeset.for_update(:update, %{include_joining_cycle: include_joining_cycle})
|> Ash.update!()
|> Ash.update!(actor: actor)
end
describe "calculate_start_date/3" do
@ -127,8 +132,8 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
end
describe "change/3 integration" do
test "sets membership_fee_start_date automatically on member creation" do
setup_settings(true)
test "sets membership_fee_start_date automatically on member creation", %{actor: actor} do
setup_settings(true, actor)
# Create a fee type
fee_type =
@ -138,7 +143,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
amount: Decimal.new("50.00"),
interval: :yearly
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Create member with join_date and fee type but no explicit start date
member =
@ -150,14 +155,14 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
join_date: ~D[2024-03-15],
membership_fee_type_id: fee_type.id
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Should have auto-calculated start date (2024-01-01 for yearly with include_joining_cycle=true)
assert member.membership_fee_start_date == ~D[2024-01-01]
end
test "does not override manually set membership_fee_start_date" do
setup_settings(true)
test "does not override manually set membership_fee_start_date", %{actor: actor} do
setup_settings(true, actor)
# Create a fee type
fee_type =
@ -167,7 +172,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
amount: Decimal.new("50.00"),
interval: :yearly
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Create member with explicit start date
manual_start_date = ~D[2024-07-01]
@ -182,14 +187,14 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
membership_fee_type_id: fee_type.id,
membership_fee_start_date: manual_start_date
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Should keep the manually set date
assert member.membership_fee_start_date == manual_start_date
end
test "respects include_joining_cycle = false setting" do
setup_settings(false)
test "respects include_joining_cycle = false setting", %{actor: actor} do
setup_settings(false, actor)
# Create a fee type
fee_type =
@ -199,7 +204,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
amount: Decimal.new("50.00"),
interval: :yearly
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Create member
member =
@ -211,14 +216,14 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
join_date: ~D[2024-03-15],
membership_fee_type_id: fee_type.id
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Should have next cycle start date (2025-01-01 for yearly with include_joining_cycle=false)
assert member.membership_fee_start_date == ~D[2025-01-01]
end
test "does not set start date without join_date" do
setup_settings(true)
test "does not set start date without join_date", %{actor: actor} do
setup_settings(true, actor)
# Create a fee type
fee_type =
@ -228,7 +233,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
amount: Decimal.new("50.00"),
interval: :yearly
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Create member without join_date
member =
@ -240,14 +245,14 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
membership_fee_type_id: fee_type.id
# No join_date
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Should not have auto-calculated start date
assert is_nil(member.membership_fee_start_date)
end
test "does not set start date without membership_fee_type_id" do
setup_settings(true)
test "does not set start date without membership_fee_type_id", %{actor: actor} do
setup_settings(true, actor)
# Create member without fee type
member =
@ -259,7 +264,7 @@ defmodule Mv.MembershipFees.Changes.SetMembershipFeeStartDateTest do
join_date: ~D[2024-03-15]
# No membership_fee_type_id
})
|> Ash.create!()
|> Ash.create!(actor: actor)
# Should not have auto-calculated start date
assert is_nil(member.membership_fee_start_date)

View file

@ -8,8 +8,13 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
alias Mv.MembershipFees.MembershipFeeType
alias Mv.MembershipFees.Changes.ValidateSameInterval
setup do
system_actor = Mv.Helpers.SystemActor.get_system_actor()
%{actor: system_actor}
end
# Helper to create a membership fee type
defp create_fee_type(attrs) do
defp create_fee_type(attrs, actor) do
default_attrs = %{
name: "Test Fee Type #{System.unique_integer([:positive])}",
amount: Decimal.new("50.00"),
@ -20,11 +25,11 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
MembershipFeeType
|> Ash.Changeset.for_create(:create, attrs)
|> Ash.create!()
|> Ash.create!(actor: actor)
end
# Helper to create a member
defp create_member(attrs) do
defp create_member(attrs, actor) do
default_attrs = %{
first_name: "Test",
last_name: "Member",
@ -35,15 +40,15 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
Member
|> Ash.Changeset.for_create(:create_member, attrs)
|> Ash.create!()
|> Ash.create!(actor: actor)
end
describe "validate_interval_match/1" do
test "allows change to type with same interval" do
yearly_type1 = create_fee_type(%{interval: :yearly, name: "Yearly Type 1"})
yearly_type2 = create_fee_type(%{interval: :yearly, name: "Yearly Type 2"})
test "allows change to type with same interval", %{actor: actor} do
yearly_type1 = create_fee_type(%{interval: :yearly, name: "Yearly Type 1"}, actor)
yearly_type2 = create_fee_type(%{interval: :yearly, name: "Yearly Type 2"}, actor)
member = create_member(%{membership_fee_type_id: yearly_type1.id})
member = create_member(%{membership_fee_type_id: yearly_type1.id}, actor)
changeset =
member
@ -55,11 +60,11 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
assert changeset.valid?
end
test "prevents change to type with different interval" do
yearly_type = create_fee_type(%{interval: :yearly})
monthly_type = create_fee_type(%{interval: :monthly})
test "prevents change to type with different interval", %{actor: actor} do
yearly_type = create_fee_type(%{interval: :yearly}, actor)
monthly_type = create_fee_type(%{interval: :monthly}, actor)
member = create_member(%{membership_fee_type_id: yearly_type.id})
member = create_member(%{membership_fee_type_id: yearly_type.id}, actor)
changeset =
member
@ -78,10 +83,10 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
end)
end
test "allows first assignment of membership fee type" do
yearly_type = create_fee_type(%{interval: :yearly})
test "allows first assignment of membership fee type", %{actor: actor} do
yearly_type = create_fee_type(%{interval: :yearly}, actor)
# No fee type assigned
member = create_member(%{})
member = create_member(%{}, actor)
changeset =
member
@ -93,9 +98,9 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
assert changeset.valid?
end
test "prevents removal of membership fee type" do
yearly_type = create_fee_type(%{interval: :yearly})
member = create_member(%{membership_fee_type_id: yearly_type.id})
test "prevents removal of membership fee type", %{actor: actor} do
yearly_type = create_fee_type(%{interval: :yearly}, actor)
member = create_member(%{membership_fee_type_id: yearly_type.id}, actor)
changeset =
member
@ -113,9 +118,9 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
end)
end
test "does nothing when membership_fee_type_id is not changed" do
yearly_type = create_fee_type(%{interval: :yearly})
member = create_member(%{membership_fee_type_id: yearly_type.id})
test "does nothing when membership_fee_type_id is not changed", %{actor: actor} do
yearly_type = create_fee_type(%{interval: :yearly}, actor)
member = create_member(%{membership_fee_type_id: yearly_type.id}, actor)
changeset =
member
@ -127,11 +132,11 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
assert changeset.valid?
end
test "error message is clear and helpful" do
yearly_type = create_fee_type(%{interval: :yearly})
quarterly_type = create_fee_type(%{interval: :quarterly})
test "error message is clear and helpful", %{actor: actor} do
yearly_type = create_fee_type(%{interval: :yearly}, actor)
quarterly_type = create_fee_type(%{interval: :quarterly}, actor)
member = create_member(%{membership_fee_type_id: yearly_type.id})
member = create_member(%{membership_fee_type_id: yearly_type.id}, actor)
changeset =
member
@ -146,25 +151,31 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
assert error.message =~ "same-interval"
end
test "handles all interval types correctly" do
test "handles all interval types correctly", %{actor: actor} do
intervals = [:monthly, :quarterly, :half_yearly, :yearly]
for interval1 <- intervals,
interval2 <- intervals,
interval1 != interval2 do
type1 =
create_fee_type(%{
interval: interval1,
name: "Type #{interval1} #{System.unique_integer([:positive])}"
})
create_fee_type(
%{
interval: interval1,
name: "Type #{interval1} #{System.unique_integer([:positive])}"
},
actor
)
type2 =
create_fee_type(%{
interval: interval2,
name: "Type #{interval2} #{System.unique_integer([:positive])}"
})
create_fee_type(
%{
interval: interval2,
name: "Type #{interval2} #{System.unique_integer([:positive])}"
},
actor
)
member = create_member(%{membership_fee_type_id: type1.id})
member = create_member(%{membership_fee_type_id: type1.id}, actor)
changeset =
member
@ -180,11 +191,11 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
end
describe "integration with update_member action" do
test "validation works when updating member via update_member action" do
yearly_type = create_fee_type(%{interval: :yearly})
monthly_type = create_fee_type(%{interval: :monthly})
test "validation works when updating member via update_member action", %{actor: actor} do
yearly_type = create_fee_type(%{interval: :yearly}, actor)
monthly_type = create_fee_type(%{interval: :monthly}, actor)
member = create_member(%{membership_fee_type_id: yearly_type.id})
member = create_member(%{membership_fee_type_id: yearly_type.id}, actor)
# Try to update member with different interval type
assert {:error, %Ash.Error.Invalid{} = error} =
@ -192,7 +203,7 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
|> Ash.Changeset.for_update(:update_member, %{
membership_fee_type_id: monthly_type.id
})
|> Ash.update()
|> Ash.update(actor: actor)
# Check that error is about interval mismatch
error_message = extract_error_message(error)
@ -201,11 +212,11 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
assert error_message =~ "same-interval"
end
test "allows update when interval matches" do
yearly_type1 = create_fee_type(%{interval: :yearly, name: "Yearly Type 1"})
yearly_type2 = create_fee_type(%{interval: :yearly, name: "Yearly Type 2"})
test "allows update when interval matches", %{actor: actor} do
yearly_type1 = create_fee_type(%{interval: :yearly, name: "Yearly Type 1"}, actor)
yearly_type2 = create_fee_type(%{interval: :yearly, name: "Yearly Type 2"}, actor)
member = create_member(%{membership_fee_type_id: yearly_type1.id})
member = create_member(%{membership_fee_type_id: yearly_type1.id}, actor)
# Update member with same-interval type
assert {:ok, updated_member} =
@ -213,7 +224,7 @@ defmodule Mv.MembershipFees.Changes.ValidateSameIntervalTest do
|> Ash.Changeset.for_update(:update_member, %{
membership_fee_type_id: yearly_type2.id
})
|> Ash.update()
|> Ash.update(actor: actor)
assert updated_member.membership_fee_type_id == yearly_type2.id
end