mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 13:33:20 +12:00
69 lines
1.7 KiB
Elixir
69 lines
1.7 KiB
Elixir
defmodule Ash.Test.SimpleDataLayerTest do
|
|
use ExUnit.Case
|
|
|
|
defmodule Person do
|
|
use Ash.Resource
|
|
|
|
attributes do
|
|
uuid_primary_key :id
|
|
attribute :name, :string
|
|
end
|
|
|
|
actions do
|
|
read :read do
|
|
primary? true
|
|
|
|
prepare fn query, _ ->
|
|
Ash.Query.before_action(query, fn query ->
|
|
query
|
|
|> Ash.DataLayer.Simple.set_data([
|
|
struct(__MODULE__, %{id: Ash.UUID.generate(), name: "Fred"})
|
|
])
|
|
end)
|
|
end
|
|
end
|
|
|
|
read :paginated do
|
|
pagination offset?: true
|
|
|
|
prepare fn query, _ ->
|
|
Ash.Query.before_action(query, fn query ->
|
|
query
|
|
|> Ash.DataLayer.Simple.set_data(
|
|
[
|
|
struct(__MODULE__, %{id: Ash.UUID.generate(), name: "Fred"}),
|
|
struct(__MODULE__, %{id: Ash.UUID.generate(), name: "Fred"}),
|
|
struct(__MODULE__, %{id: Ash.UUID.generate(), name: "Fred"})
|
|
]
|
|
|> offset(query.offset)
|
|
|> limit(query.limit)
|
|
)
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
|
|
defp limit(list, nil), do: list
|
|
defp limit(list, value), do: Enum.take(list, value)
|
|
|
|
defp offset(list, nil), do: list
|
|
defp offset(list, value), do: Enum.drop(list, value)
|
|
end
|
|
|
|
defmodule Api do
|
|
use Ash.Api
|
|
|
|
resources do
|
|
allow_unregistered? true
|
|
end
|
|
end
|
|
|
|
test "set_data can be used in a before_action callback" do
|
|
assert [%{name: "Fred"}] = Api.read!(Person)
|
|
end
|
|
|
|
test "pagination works" do
|
|
assert %Ash.Page.Offset{results: [%{name: "Fred"}]} =
|
|
Api.read!(Person, action: :paginated, page: [limit: 1])
|
|
end
|
|
end
|