mirror of
https://github.com/ash-project/ash.git
synced 2024-09-19 21:13:10 +12:00
test: test new default keyset pagination
This commit is contained in:
parent
f4dc9620ae
commit
cb80df9ed8
9 changed files with 35 additions and 46 deletions
|
@ -20,6 +20,8 @@ end
|
||||||
if Mix.env() == :test do
|
if Mix.env() == :test do
|
||||||
config :logger, level: :warning
|
config :logger, level: :warning
|
||||||
|
|
||||||
|
config :ash, :default_page_type, :keyset
|
||||||
|
|
||||||
config :ash, :ash_domains, [
|
config :ash, :ash_domains, [
|
||||||
Ash.Test.Flow.Domain,
|
Ash.Test.Flow.Domain,
|
||||||
Ash.Test.Support.PolicyRbac.Domain,
|
Ash.Test.Support.PolicyRbac.Domain,
|
||||||
|
|
|
@ -1652,6 +1652,13 @@ defmodule Ash do
|
||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
page_opts =
|
||||||
|
if query.page[:limit] do
|
||||||
|
Keyword.put(page_opts, :limit, query.page[:limit])
|
||||||
|
else
|
||||||
|
page_opts
|
||||||
|
end
|
||||||
|
|
||||||
query
|
query
|
||||||
|> Ash.Query.page(page_opts)
|
|> Ash.Query.page(page_opts)
|
||||||
|> read(opts)
|
|> read(opts)
|
||||||
|
|
|
@ -1210,10 +1210,9 @@ defmodule Ash.Test.Actions.BulkCreateTest do
|
||||||
load: [posts: offset_pagination_query]
|
load: [posts: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -1294,10 +1293,9 @@ defmodule Ash.Test.Actions.BulkCreateTest do
|
||||||
load: [related_posts: offset_pagination_query]
|
load: [related_posts: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -1352,10 +1350,9 @@ defmodule Ash.Test.Actions.BulkCreateTest do
|
||||||
load: [related_tags: offset_pagination_query]
|
load: [related_tags: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%MultitenantTag{name: "bar", __metadata__: %{keyset: keyset}}],
|
results: [%MultitenantTag{name: "bar", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = tag.related_tags
|
} = tag.related_tags
|
||||||
|
|
|
@ -1333,10 +1333,9 @@ defmodule Ash.Test.Actions.BulkUpdateTest do
|
||||||
load: [posts: offset_pagination_query]
|
load: [posts: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -1425,10 +1424,9 @@ defmodule Ash.Test.Actions.BulkUpdateTest do
|
||||||
load: [related_posts: offset_pagination_query]
|
load: [related_posts: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -1481,10 +1479,9 @@ defmodule Ash.Test.Actions.BulkUpdateTest do
|
||||||
load: [related_tags: offset_pagination_query]
|
load: [related_tags: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%MultitenantTag{name: "existing", __metadata__: %{keyset: keyset}}],
|
results: [%MultitenantTag{name: "existing", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 1,
|
count: 1,
|
||||||
more?: false
|
more?: false
|
||||||
} = tag.related_tags
|
} = tag.related_tags
|
||||||
|
|
|
@ -895,10 +895,9 @@ defmodule Ash.Test.Actions.CreateTest do
|
||||||
|> Ash.Changeset.load(posts: offset_pagination_query)
|
|> Ash.Changeset.load(posts: offset_pagination_query)
|
||||||
|> Ash.create!()
|
|> Ash.create!()
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -944,10 +943,9 @@ defmodule Ash.Test.Actions.CreateTest do
|
||||||
|> Ash.Changeset.manage_relationship(:posts, [post2, post1], type: :append_and_remove)
|
|> Ash.Changeset.manage_relationship(:posts, [post2, post1], type: :append_and_remove)
|
||||||
|> Ash.create!(load: [posts: offset_pagination_query])
|
|> Ash.create!(load: [posts: offset_pagination_query])
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -1035,10 +1033,9 @@ defmodule Ash.Test.Actions.CreateTest do
|
||||||
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|
||||||
|> Ash.create!()
|
|> Ash.create!()
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -1086,10 +1083,9 @@ defmodule Ash.Test.Actions.CreateTest do
|
||||||
)
|
)
|
||||||
|> Ash.create!(load: [related_posts: offset_pagination_query])
|
|> Ash.create!(load: [related_posts: offset_pagination_query])
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -1140,10 +1136,9 @@ defmodule Ash.Test.Actions.CreateTest do
|
||||||
load: [related_tags: offset_pagination_query, related_tags_join_assoc: []]
|
load: [related_tags: offset_pagination_query, related_tags_join_assoc: []]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%MultitenantTag{name: "bar", __metadata__: %{keyset: keyset}}],
|
results: [%MultitenantTag{name: "bar", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = tag.related_tags
|
} = tag.related_tags
|
||||||
|
|
|
@ -320,10 +320,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|
||||||
|> Ash.Changeset.load(posts: offset_pagination_query)
|
|> Ash.Changeset.load(posts: offset_pagination_query)
|
||||||
|> Ash.destroy!(return_destroyed?: true)
|
|> Ash.destroy!(return_destroyed?: true)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -370,10 +369,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|
||||||
|> Ash.create!()
|
|> Ash.create!()
|
||||||
|> Ash.destroy!(return_destroyed?: true, load: [posts: offset_pagination_query])
|
|> Ash.destroy!(return_destroyed?: true, load: [posts: offset_pagination_query])
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -466,10 +464,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|
||||||
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|
||||||
|> Ash.destroy!(return_destroyed?: true)
|
|> Ash.destroy!(return_destroyed?: true)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -520,10 +517,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|
||||||
|> Ash.create!()
|
|> Ash.create!()
|
||||||
|> Ash.destroy!(return_destroyed?: true, load: [related_posts: offset_pagination_query])
|
|> Ash.destroy!(return_destroyed?: true, load: [related_posts: offset_pagination_query])
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
|
|
@ -1648,8 +1648,8 @@ defmodule Ash.Test.Actions.LoadTest do
|
||||||
|> Ash.Query.load(categories: paginated_categories)
|
|> Ash.Query.load(categories: paginated_categories)
|
||||||
|> Ash.read!()
|
|> Ash.read!()
|
||||||
|
|
||||||
assert %Ash.Page.Offset{count: 3} = post1.categories
|
assert %Ash.Page.Keyset{count: 3} = post1.categories
|
||||||
assert %Ash.Page.Offset{count: 6} = post2.categories
|
assert %Ash.Page.Keyset{count: 6} = post2.categories
|
||||||
end
|
end
|
||||||
|
|
||||||
test "allows counting nested relationships" do
|
test "allows counting nested relationships" do
|
||||||
|
@ -1686,13 +1686,13 @@ defmodule Ash.Test.Actions.LoadTest do
|
||||||
|> Ash.Query.load(categories: paginated_categories)
|
|> Ash.Query.load(categories: paginated_categories)
|
||||||
|> Ash.Query.page(limit: 1, count: true)
|
|> Ash.Query.page(limit: 1, count: true)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{results: [author1], count: 2} =
|
assert %Ash.Page.Keyset{results: [author1], count: 2} =
|
||||||
Author
|
Author
|
||||||
|> Ash.Query.sort(:name)
|
|> Ash.Query.sort(:name)
|
||||||
|> Ash.Query.load(posts: paginated_posts)
|
|> Ash.Query.load(posts: paginated_posts)
|
||||||
|> Ash.read!(page: [limit: 1, count: true])
|
|> Ash.read!(page: [limit: 1, count: true])
|
||||||
|
|
||||||
assert %Ash.Page.Offset{count: 5, results: [%{categories: %Ash.Page.Offset{count: 3}}]} =
|
assert %Ash.Page.Keyset{count: 5, results: [%{categories: %Ash.Page.Keyset{count: 3}}]} =
|
||||||
author1.posts
|
author1.posts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -899,8 +899,8 @@ defmodule Ash.Actions.PaginationTest do
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it defaults to offset pagination" do
|
test "it defaults to keyset pagination" do
|
||||||
assert %Ash.Page.Offset{} = Ash.read!(User, action: :both_optional, page: [limit: 10])
|
assert %Ash.Page.Keyset{} = Ash.read!(User, action: :both_optional, page: [limit: 10])
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it adds a keyset to the records, even though it returns an offset page" do
|
test "it adds a keyset to the records, even though it returns an offset page" do
|
||||||
|
|
|
@ -555,10 +555,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|
||||||
|> Ash.Changeset.load(posts: offset_pagination_query)
|
|> Ash.Changeset.load(posts: offset_pagination_query)
|
||||||
|> Ash.update!()
|
|> Ash.update!()
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -607,10 +606,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|
||||||
author =
|
author =
|
||||||
Ash.update!(author, %{name: "Updated Name 1"}, load: [posts: offset_pagination_query])
|
Ash.update!(author, %{name: "Updated Name 1"}, load: [posts: offset_pagination_query])
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = author.posts
|
} = author.posts
|
||||||
|
@ -706,10 +704,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|
||||||
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|
||||||
|> Ash.update!()
|
|> Ash.update!()
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -759,10 +756,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|
||||||
load: [related_posts: offset_pagination_query]
|
load: [related_posts: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 2,
|
count: 2,
|
||||||
more?: true
|
more?: true
|
||||||
} = post.related_posts
|
} = post.related_posts
|
||||||
|
@ -805,10 +801,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|
||||||
load: [related_tags: offset_pagination_query]
|
load: [related_tags: offset_pagination_query]
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ash.Page.Offset{
|
assert %Ash.Page.Keyset{
|
||||||
results: [%MultitenantTag{name: "existing", __metadata__: %{keyset: keyset}}],
|
results: [%MultitenantTag{name: "existing", __metadata__: %{keyset: keyset}}],
|
||||||
limit: 1,
|
limit: 1,
|
||||||
offset: 0,
|
|
||||||
count: 1,
|
count: 1,
|
||||||
more?: false
|
more?: false
|
||||||
} = tag.related_tags
|
} = tag.related_tags
|
||||||
|
|
Loading…
Reference in a new issue