mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 13:33:20 +12:00
test: add a test on loading nested calculations in calculations
This commit is contained in:
parent
74cc7c4ad5
commit
6ce1b6e642
1 changed files with 41 additions and 7 deletions
|
@ -48,6 +48,20 @@ defmodule Ash.Test.CalculationTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defmodule BestFriendsName do
|
||||||
|
use Ash.Calculation
|
||||||
|
|
||||||
|
def load(_query, opts, _) do
|
||||||
|
[best_friend: :full_name]
|
||||||
|
end
|
||||||
|
|
||||||
|
def calculate(records, opts, _) do
|
||||||
|
Enum.map(records, fn record ->
|
||||||
|
record.best_friend && record.best_friend.full_name
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defmodule User do
|
defmodule User do
|
||||||
@moduledoc false
|
@moduledoc false
|
||||||
use Ash.Resource, data_layer: Ash.DataLayer.Ets
|
use Ash.Resource, data_layer: Ash.DataLayer.Ets
|
||||||
|
@ -84,6 +98,8 @@ defmodule Ash.Test.CalculationTest do
|
||||||
allow_async? true
|
allow_async? true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
calculate :best_friends_name, :string, BestFriendsName
|
||||||
|
|
||||||
calculate :conditional_full_name,
|
calculate :conditional_full_name,
|
||||||
:string,
|
:string,
|
||||||
expr(if(first_name and last_name, first_name <> " " <> last_name, "(none)"))
|
expr(if(first_name and last_name, first_name <> " " <> last_name, "(none)"))
|
||||||
|
@ -113,6 +129,10 @@ defmodule Ash.Test.CalculationTest do
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
relationships do
|
||||||
|
belongs_to :best_friend, __MODULE__
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defmodule Registry do
|
defmodule Registry do
|
||||||
|
@ -134,15 +154,18 @@ defmodule Ash.Test.CalculationTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
User
|
user1 =
|
||||||
|> Ash.Changeset.new(%{first_name: "zach", last_name: "daniel"})
|
User
|
||||||
|> Api.create!()
|
|> Ash.Changeset.new(%{first_name: "zach", last_name: "daniel"})
|
||||||
|
|> Api.create!()
|
||||||
|
|
||||||
User
|
user2 =
|
||||||
|> Ash.Changeset.new(%{first_name: "brian", last_name: "cranston"})
|
User
|
||||||
|> Api.create!()
|
|> Ash.Changeset.new(%{first_name: "brian", last_name: "cranston"})
|
||||||
|
|> Ash.Changeset.replace_relationship(:best_friend, user1)
|
||||||
|
|> Api.create!()
|
||||||
|
|
||||||
:ok
|
%{user1: user1, user2: user2}
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it uses default arguments" do
|
test "it uses default arguments" do
|
||||||
|
@ -167,6 +190,17 @@ defmodule Ash.Test.CalculationTest do
|
||||||
assert full_names == ["brian cranston brian cranston", "zach daniel zach daniel"]
|
assert full_names == ["brian cranston brian cranston", "zach daniel zach daniel"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "nested calculations are loaded if necessary" do
|
||||||
|
best_friends_names =
|
||||||
|
User
|
||||||
|
|> Ash.Query.load(:best_friends_name)
|
||||||
|
|> Api.read!()
|
||||||
|
|> Enum.map(& &1.best_friends_name)
|
||||||
|
|> Enum.sort()
|
||||||
|
|
||||||
|
assert best_friends_names == [nil, "zach daniel"]
|
||||||
|
end
|
||||||
|
|
||||||
test "arguments can be supplied" do
|
test "arguments can be supplied" do
|
||||||
full_names =
|
full_names =
|
||||||
User
|
User
|
||||||
|
|
Loading…
Reference in a new issue