Use admin_user instead of system_actor in LiveView tests
This commit is contained in:
parent
195f1dbc88
commit
fcca4b0b89
2 changed files with 67 additions and 64 deletions
|
|
@ -15,9 +15,8 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
# No custom setup needed
|
||||
|
||||
# Helper to create a membership fee type
|
||||
defp create_fee_type(attrs) do
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Uses admin_user to test permissions (UI-/Permissions-nah)
|
||||
defp create_fee_type(attrs, admin_user) do
|
||||
default_attrs = %{
|
||||
name: "Test Fee Type #{System.unique_integer([:positive])}",
|
||||
amount: Decimal.new("50.00"),
|
||||
|
|
@ -28,7 +27,7 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
|
||||
MembershipFeeType
|
||||
|> Ash.Changeset.for_create(:create, attrs)
|
||||
|> Ash.create!(actor: system_actor)
|
||||
|> Ash.create!(actor: admin_user)
|
||||
end
|
||||
|
||||
# Helper to create a member
|
||||
|
|
@ -50,12 +49,21 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
end
|
||||
|
||||
describe "list display" do
|
||||
test "displays all membership fee types with correct data", %{conn: conn} do
|
||||
test "displays all membership fee types with correct data", %{
|
||||
conn: conn,
|
||||
current_user: admin_user
|
||||
} do
|
||||
_fee_type1 =
|
||||
create_fee_type(%{name: "Regular", amount: Decimal.new("60.00"), interval: :yearly})
|
||||
create_fee_type(
|
||||
%{name: "Regular", amount: Decimal.new("60.00"), interval: :yearly},
|
||||
admin_user
|
||||
)
|
||||
|
||||
_fee_type2 =
|
||||
create_fee_type(%{name: "Reduced", amount: Decimal.new("30.00"), interval: :yearly})
|
||||
create_fee_type(
|
||||
%{name: "Reduced", amount: Decimal.new("30.00"), interval: :yearly},
|
||||
admin_user
|
||||
)
|
||||
|
||||
{:ok, _view, html} = live(conn, "/membership_fee_types")
|
||||
|
||||
|
|
@ -67,7 +75,7 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
end
|
||||
|
||||
test "member count column shows correct count", %{conn: conn, current_user: admin_user} do
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
|
||||
# Create 3 members with this fee type
|
||||
Enum.each(1..3, fn _ ->
|
||||
|
|
@ -90,8 +98,8 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
assert to == "/membership_fee_types/new"
|
||||
end
|
||||
|
||||
test "edit button per row navigates to edit form", %{conn: conn} do
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
test "edit button per row navigates to edit form", %{conn: conn, current_user: admin_user} do
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/membership_fee_types")
|
||||
|
||||
|
|
@ -106,7 +114,7 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
|
||||
describe "delete functionality" do
|
||||
test "delete button disabled if type is in use", %{conn: conn, current_user: admin_user} do
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
create_member(%{membership_fee_type_id: fee_type.id}, admin_user)
|
||||
|
||||
{:ok, _view, html} = live(conn, "/membership_fee_types")
|
||||
|
|
@ -115,8 +123,8 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
assert html =~ "disabled" || html =~ "cursor-not-allowed"
|
||||
end
|
||||
|
||||
test "delete button works if type is not in use", %{conn: conn} do
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
test "delete button works if type is not in use", %{conn: conn, current_user: admin_user} do
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
# No members assigned
|
||||
|
||||
{:ok, view, _html} = live(conn, "/membership_fee_types")
|
||||
|
|
@ -126,9 +134,12 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
|
|||
|> element("button[phx-click='delete'][phx-value-id='#{fee_type.id}']")
|
||||
|> render_click()
|
||||
|
||||
# Type should be deleted
|
||||
# Type should be deleted - use admin_user to test permissions
|
||||
assert {:error, %Ash.Error.Invalid{errors: [%Ash.Error.Query.NotFound{}]}} =
|
||||
Ash.get(MembershipFeeType, fee_type.id, domain: Mv.MembershipFees)
|
||||
Ash.get(MembershipFeeType, fee_type.id,
|
||||
domain: Mv.MembershipFees,
|
||||
actor: admin_user
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,8 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
require Ash.Query
|
||||
|
||||
# Helper to create a membership fee type
|
||||
defp create_fee_type(attrs) do
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Uses admin_user to test permissions (UI-/Permissions-nah)
|
||||
defp create_fee_type(attrs, admin_user) do
|
||||
default_attrs = %{
|
||||
name: "Test Fee Type #{System.unique_integer([:positive])}",
|
||||
amount: Decimal.new("50.00"),
|
||||
|
|
@ -25,13 +24,12 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
|
||||
MembershipFeeType
|
||||
|> Ash.Changeset.for_create(:create, attrs)
|
||||
|> Ash.create!(actor: system_actor)
|
||||
|> Ash.create!(actor: admin_user)
|
||||
end
|
||||
|
||||
# Helper to create a member
|
||||
defp create_member(attrs) do
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Uses admin_user to test permissions (UI-/Permissions-nah)
|
||||
defp create_member(attrs, admin_user) do
|
||||
default_attrs = %{
|
||||
first_name: "Test",
|
||||
last_name: "Member",
|
||||
|
|
@ -42,7 +40,7 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
|
||||
Member
|
||||
|> Ash.Changeset.for_create(:create_member, attrs)
|
||||
|> Ash.create!(actor: system_actor)
|
||||
|> Ash.create!(actor: admin_user)
|
||||
end
|
||||
|
||||
describe "membership fee type dropdown" do
|
||||
|
|
@ -54,9 +52,9 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
html =~ "Beitragsart"
|
||||
end
|
||||
|
||||
test "shows available types", %{conn: conn} do
|
||||
_fee_type1 = create_fee_type(%{name: "Type 1", interval: :yearly})
|
||||
_fee_type2 = create_fee_type(%{name: "Type 2", interval: :yearly})
|
||||
test "shows available types", %{conn: conn, current_user: admin_user} do
|
||||
_fee_type1 = create_fee_type(%{name: "Type 1", interval: :yearly}, admin_user)
|
||||
_fee_type2 = create_fee_type(%{name: "Type 2", interval: :yearly}, admin_user)
|
||||
|
||||
{:ok, _view, html} = live(conn, "/members/new")
|
||||
|
||||
|
|
@ -64,11 +62,14 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
assert html =~ "Type 2"
|
||||
end
|
||||
|
||||
test "filters to same interval types if member has type", %{conn: conn} do
|
||||
yearly_type = create_fee_type(%{name: "Yearly Type", interval: :yearly})
|
||||
_monthly_type = create_fee_type(%{name: "Monthly Type", interval: :monthly})
|
||||
test "filters to same interval types if member has type", %{
|
||||
conn: conn,
|
||||
current_user: admin_user
|
||||
} do
|
||||
yearly_type = create_fee_type(%{name: "Yearly Type", interval: :yearly}, admin_user)
|
||||
_monthly_type = create_fee_type(%{name: "Monthly Type", interval: :monthly}, admin_user)
|
||||
|
||||
member = create_member(%{membership_fee_type_id: yearly_type.id})
|
||||
member = create_member(%{membership_fee_type_id: yearly_type.id}, admin_user)
|
||||
|
||||
{:ok, _view, html} = live(conn, "/members/#{member.id}/edit")
|
||||
|
||||
|
|
@ -77,11 +78,11 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
refute html =~ "Monthly Type"
|
||||
end
|
||||
|
||||
test "shows warning if different interval selected", %{conn: conn} do
|
||||
yearly_type = create_fee_type(%{name: "Yearly Type", interval: :yearly})
|
||||
monthly_type = create_fee_type(%{name: "Monthly Type", interval: :monthly})
|
||||
test "shows warning if different interval selected", %{conn: conn, current_user: admin_user} do
|
||||
yearly_type = create_fee_type(%{name: "Yearly Type", interval: :yearly}, admin_user)
|
||||
monthly_type = create_fee_type(%{name: "Monthly Type", interval: :monthly}, admin_user)
|
||||
|
||||
member = create_member(%{membership_fee_type_id: yearly_type.id})
|
||||
member = create_member(%{membership_fee_type_id: yearly_type.id}, admin_user)
|
||||
|
||||
{:ok, _view, html} = live(conn, "/members/#{member.id}/edit")
|
||||
|
||||
|
|
@ -92,11 +93,11 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
assert html =~ yearly_type.id
|
||||
end
|
||||
|
||||
test "warning cleared if same interval selected", %{conn: conn} do
|
||||
yearly_type1 = create_fee_type(%{name: "Yearly Type 1", interval: :yearly})
|
||||
yearly_type2 = create_fee_type(%{name: "Yearly Type 2", interval: :yearly})
|
||||
test "warning cleared if same interval selected", %{conn: conn, current_user: admin_user} do
|
||||
yearly_type1 = create_fee_type(%{name: "Yearly Type 1", interval: :yearly}, admin_user)
|
||||
yearly_type2 = create_fee_type(%{name: "Yearly Type 2", interval: :yearly}, admin_user)
|
||||
|
||||
member = create_member(%{membership_fee_type_id: yearly_type1.id})
|
||||
member = create_member(%{membership_fee_type_id: yearly_type1.id}, admin_user)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/members/#{member.id}/edit")
|
||||
|
||||
|
|
@ -109,8 +110,8 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
refute html =~ "Warning" || html =~ "Warnung"
|
||||
end
|
||||
|
||||
test "form saves with selected membership fee type", %{conn: conn} do
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
test "form saves with selected membership fee type", %{conn: conn, current_user: admin_user} do
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/members/new")
|
||||
|
||||
|
|
@ -126,29 +127,26 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
|> form("#member-form", form_data)
|
||||
|> render_submit()
|
||||
|
||||
# Verify member was created with fee type
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Verify member was created with fee type - use admin_user to test permissions
|
||||
member =
|
||||
Member
|
||||
|> Ash.Query.filter(email == ^form_data["member[email]"])
|
||||
|> Ash.read_one!(actor: system_actor)
|
||||
|> Ash.read_one!(actor: admin_user)
|
||||
|
||||
assert member.membership_fee_type_id == fee_type.id
|
||||
end
|
||||
|
||||
test "new members get default membership fee type", %{conn: conn} do
|
||||
test "new members get default membership fee type", %{conn: conn, current_user: admin_user} do
|
||||
# Set default fee type in settings
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
{:ok, settings} = Mv.Membership.get_settings()
|
||||
|
||||
settings
|
||||
|> Ash.Changeset.for_update(:update_membership_fee_settings, %{
|
||||
default_membership_fee_type_id: fee_type.id
|
||||
})
|
||||
|> Ash.update!(actor: system_actor)
|
||||
|> Ash.update!(actor: admin_user)
|
||||
|
||||
{:ok, view, _html} = live(conn, "/members/new")
|
||||
|
||||
|
|
@ -163,9 +161,7 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
conn: conn,
|
||||
current_user: admin_user
|
||||
} do
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Create custom field
|
||||
# Create custom field - use admin_user to test permissions
|
||||
custom_field =
|
||||
Mv.Membership.CustomField
|
||||
|> Ash.Changeset.for_create(:create, %{
|
||||
|
|
@ -173,11 +169,11 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
value_type: :string,
|
||||
required: false
|
||||
})
|
||||
|> Ash.create!(actor: system_actor)
|
||||
|> Ash.create!(actor: admin_user)
|
||||
|
||||
# Create two fee types with same interval
|
||||
fee_type1 = create_fee_type(%{name: "Type 1", interval: :yearly})
|
||||
fee_type2 = create_fee_type(%{name: "Type 2", interval: :yearly})
|
||||
fee_type1 = create_fee_type(%{name: "Type 1", interval: :yearly}, admin_user)
|
||||
fee_type2 = create_fee_type(%{name: "Type 2", interval: :yearly}, admin_user)
|
||||
|
||||
# Create member with fee type 1 and custom field value
|
||||
member =
|
||||
|
|
@ -212,9 +208,7 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
end
|
||||
|
||||
test "union/typed values roundtrip correctly", %{conn: conn, current_user: admin_user} do
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Create date custom field
|
||||
# Create date custom field - use admin_user to test permissions
|
||||
custom_field =
|
||||
Mv.Membership.CustomField
|
||||
|> Ash.Changeset.for_create(:create, %{
|
||||
|
|
@ -222,9 +216,9 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
value_type: :date,
|
||||
required: false
|
||||
})
|
||||
|> Ash.create!(actor: system_actor)
|
||||
|> Ash.create!(actor: admin_user)
|
||||
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
|
||||
# Create member with date custom field value
|
||||
member =
|
||||
|
|
@ -261,9 +255,7 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
end
|
||||
|
||||
test "removing custom field values works correctly", %{conn: conn, current_user: admin_user} do
|
||||
system_actor = Mv.Helpers.SystemActor.get_system_actor()
|
||||
|
||||
# Create custom field
|
||||
# Create custom field - use admin_user to test permissions
|
||||
custom_field =
|
||||
Mv.Membership.CustomField
|
||||
|> Ash.Changeset.for_create(:create, %{
|
||||
|
|
@ -271,9 +263,9 @@ defmodule MvWeb.MemberLive.FormMembershipFeeTypeTest do
|
|||
value_type: :string,
|
||||
required: false
|
||||
})
|
||||
|> Ash.create!(actor: system_actor)
|
||||
|> Ash.create!(actor: admin_user)
|
||||
|
||||
fee_type = create_fee_type(%{interval: :yearly})
|
||||
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
|
||||
|
||||
# Create member with custom field value
|
||||
member =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue