ash/test/policy/field_policy_pruning_test.exs

71 lines
1.3 KiB
Elixir

defmodule Ash.Test.Policy.FieldPolicyPruningTest do
@doc false
use ExUnit.Case
defmodule TestResource do
use Ash.Resource,
domain: Ash.Test.Domain,
data_layer: Ash.DataLayer.Ets,
authorizers: [Ash.Policy.Authorizer]
ets do
private? true
end
policies do
policy always() do
authorize_if always()
end
end
field_policies do
field_policy :* do
authorize_if always()
end
field_policy :calc do
forbid_if always()
end
field_policy :calc2 do
forbid_if always()
end
end
attributes do
uuid_primary_key :id
end
actions do
defaults [:create, :read, :update, :destroy]
end
calculations do
calculate :calc2, :map do
public? true
calculation fn records, _ ->
Enum.map(records, & &1.id)
end
end
calculate :calc, :map do
load :calc2
calculation fn records, _ ->
raise "shouldn't get here!"
end
public? true
end
end
end
test "field policies prune unnecessary calculations" do
Ash.create!(TestResource, %{}, authorize?: false)
TestResource
|> Ash.Query.load([:calc, :calc2])
|> Ash.read!()
end
end