From fcca4b0b895014dd8ea750b77f97528bef16625e Mon Sep 17 00:00:00 2001 From: Moritz Date: Sat, 24 Jan 2026 02:10:08 +0100 Subject: [PATCH] Use admin_user instead of system_actor in LiveView tests --- .../membership_fee_type_live/index_test.exs | 41 +++++---- .../form_membership_fee_type_test.exs | 90 +++++++++---------- 2 files changed, 67 insertions(+), 64 deletions(-) diff --git a/test/mv_web/live/membership_fee_type_live/index_test.exs b/test/mv_web/live/membership_fee_type_live/index_test.exs index 58be2d3..302814d 100644 --- a/test/mv_web/live/membership_fee_type_live/index_test.exs +++ b/test/mv_web/live/membership_fee_type_live/index_test.exs @@ -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 diff --git a/test/mv_web/member_live/form_membership_fee_type_test.exs b/test/mv_web/member_live/form_membership_fee_type_test.exs index a4d3673..911a4ce 100644 --- a/test/mv_web/member_live/form_membership_fee_type_test.exs +++ b/test/mv_web/member_live/form_membership_fee_type_test.exs @@ -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 =