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