Add actor parameter to all tests requiring authorization
All checks were successful
continuous-integration/drone/push Build is passing
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:
parent
4c846f8bba
commit
a6cdeaa18d
75 changed files with 4649 additions and 2865 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue