CustomFieldValue Resource Policies closes #369 #377

Merged
moritz merged 12 commits from feature/369_customfieldvalue_policies into main 2026-01-27 16:07:48 +01:00
Showing only changes of commit 0219073d33 - Show all commits

View file

@ -60,13 +60,7 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do
user_with_role user_with_role
end end
defp create_admin_user(actor) do
create_user_with_permission_set("admin", actor)
end
defp create_linked_member_for_user(user, actor) do defp create_linked_member_for_user(user, actor) do
admin = create_admin_user(actor)
{:ok, member} = {:ok, member} =
Member Member
|> Ash.Changeset.for_create(:create_member, %{ |> Ash.Changeset.for_create(:create_member, %{
@ -74,19 +68,17 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do
last_name: "Member", last_name: "Member",
email: "linked#{System.unique_integer([:positive])}@example.com" email: "linked#{System.unique_integer([:positive])}@example.com"
}) })
|> Ash.create(actor: admin, return_notifications?: false) |> Ash.create(actor: actor, return_notifications?: false)
user user
|> Ash.Changeset.for_update(:update, %{}) |> Ash.Changeset.for_update(:update, %{})
|> Ash.Changeset.force_change_attribute(:member_id, member.id) |> Ash.Changeset.force_change_attribute(:member_id, member.id)
|> Ash.update(actor: admin, domain: Mv.Accounts, return_notifications?: false) |> Ash.update(actor: actor, domain: Mv.Accounts, return_notifications?: false)
member member
end end
defp create_unlinked_member(actor) do defp create_unlinked_member(actor) do
admin = create_admin_user(actor)
{:ok, member} = {:ok, member} =
Member Member
|> Ash.Changeset.for_create(:create_member, %{ |> Ash.Changeset.for_create(:create_member, %{
@ -94,7 +86,7 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do
last_name: "Member", last_name: "Member",
email: "unlinked#{System.unique_integer([:positive])}@example.com" email: "unlinked#{System.unique_integer([:positive])}@example.com"
}) })
|> Ash.create(actor: admin) |> Ash.create(actor: actor)
member member
end end
@ -201,11 +193,16 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do
assert cfv.custom_field_id == custom_field2.id assert cfv.custom_field_id == custom_field2.id
end end
test "can destroy custom field value of linked member", %{user: user, cfv_linked: cfv_linked} do test "can destroy custom field value of linked member", %{
user: user,
cfv_linked: cfv_linked,
actor: actor
} do
result = Ash.destroy(cfv_linked, actor: user, domain: Mv.Membership) result = Ash.destroy(cfv_linked, actor: user, domain: Mv.Membership)
assert :ok = result assert :ok = result
assert {:error, _} = Ash.get(CustomFieldValue, cfv_linked.id, domain: Mv.Membership) assert {:error, _} =
Ash.get(CustomFieldValue, cfv_linked.id, domain: Mv.Membership, actor: actor)
end end
test "cannot read custom field values of unlinked member", %{ test "cannot read custom field values of unlinked member", %{
@ -408,10 +405,15 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do
assert %Ash.Union{value: "updated", type: :string} = updated.value assert %Ash.Union{value: "updated", type: :string} = updated.value
end end
test "can destroy any custom field value", %{user: user, cfv_unlinked: cfv_unlinked} do test "can destroy any custom field value", %{
user: user,
cfv_unlinked: cfv_unlinked,
actor: actor
} do
:ok = Ash.destroy(cfv_unlinked, actor: user, domain: Mv.Membership) :ok = Ash.destroy(cfv_unlinked, actor: user, domain: Mv.Membership)
assert {:error, _} = Ash.get(CustomFieldValue, cfv_unlinked.id, domain: Mv.Membership) assert {:error, _} =
Ash.get(CustomFieldValue, cfv_unlinked.id, domain: Mv.Membership, actor: actor)
end end
end end
@ -478,10 +480,15 @@ defmodule Mv.Membership.CustomFieldValuePoliciesTest do
assert %Ash.Union{value: "updated", type: :string} = updated.value assert %Ash.Union{value: "updated", type: :string} = updated.value
end end
test "can destroy any custom field value", %{user: user, cfv_unlinked: cfv_unlinked} do test "can destroy any custom field value", %{
user: user,
cfv_unlinked: cfv_unlinked,
actor: actor
} do
:ok = Ash.destroy(cfv_unlinked, actor: user, domain: Mv.Membership) :ok = Ash.destroy(cfv_unlinked, actor: user, domain: Mv.Membership)
assert {:error, _} = Ash.get(CustomFieldValue, cfv_unlinked.id, domain: Mv.Membership) assert {:error, _} =
Ash.get(CustomFieldValue, cfv_unlinked.id, domain: Mv.Membership, actor: actor)
end end
end end
end end