test: test new default keyset pagination

This commit is contained in:
Zach Daniel 2024-08-30 17:36:10 -04:00
parent f4dc9620ae
commit cb80df9ed8
9 changed files with 35 additions and 46 deletions

View file

@ -20,6 +20,8 @@ end
if Mix.env() == :test do
config :logger, level: :warning
config :ash, :default_page_type, :keyset
config :ash, :ash_domains, [
Ash.Test.Flow.Domain,
Ash.Test.Support.PolicyRbac.Domain,

View file

@ -1652,6 +1652,13 @@ defmodule Ash do
[]
end
page_opts =
if query.page[:limit] do
Keyword.put(page_opts, :limit, query.page[:limit])
else
page_opts
end
query
|> Ash.Query.page(page_opts)
|> read(opts)

View file

@ -1210,10 +1210,9 @@ defmodule Ash.Test.Actions.BulkCreateTest do
load: [posts: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -1294,10 +1293,9 @@ defmodule Ash.Test.Actions.BulkCreateTest do
load: [related_posts: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -1352,10 +1350,9 @@ defmodule Ash.Test.Actions.BulkCreateTest do
load: [related_tags: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%MultitenantTag{name: "bar", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = tag.related_tags

View file

@ -1333,10 +1333,9 @@ defmodule Ash.Test.Actions.BulkUpdateTest do
load: [posts: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -1425,10 +1424,9 @@ defmodule Ash.Test.Actions.BulkUpdateTest do
load: [related_posts: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -1481,10 +1479,9 @@ defmodule Ash.Test.Actions.BulkUpdateTest do
load: [related_tags: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%MultitenantTag{name: "existing", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 1,
more?: false
} = tag.related_tags

View file

@ -895,10 +895,9 @@ defmodule Ash.Test.Actions.CreateTest do
|> Ash.Changeset.load(posts: offset_pagination_query)
|> Ash.create!()
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -944,10 +943,9 @@ defmodule Ash.Test.Actions.CreateTest do
|> Ash.Changeset.manage_relationship(:posts, [post2, post1], type: :append_and_remove)
|> Ash.create!(load: [posts: offset_pagination_query])
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -1035,10 +1033,9 @@ defmodule Ash.Test.Actions.CreateTest do
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|> Ash.create!()
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -1086,10 +1083,9 @@ defmodule Ash.Test.Actions.CreateTest do
)
|> Ash.create!(load: [related_posts: offset_pagination_query])
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -1140,10 +1136,9 @@ defmodule Ash.Test.Actions.CreateTest do
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}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = tag.related_tags

View file

@ -320,10 +320,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|> Ash.Changeset.load(posts: offset_pagination_query)
|> Ash.destroy!(return_destroyed?: true)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -370,10 +369,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|> Ash.create!()
|> 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}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -466,10 +464,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|> Ash.destroy!(return_destroyed?: true)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -520,10 +517,9 @@ defmodule Ash.Test.Actions.DestroyTest do
|> Ash.create!()
|> 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}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts

View file

@ -1648,8 +1648,8 @@ defmodule Ash.Test.Actions.LoadTest do
|> Ash.Query.load(categories: paginated_categories)
|> Ash.read!()
assert %Ash.Page.Offset{count: 3} = post1.categories
assert %Ash.Page.Offset{count: 6} = post2.categories
assert %Ash.Page.Keyset{count: 3} = post1.categories
assert %Ash.Page.Keyset{count: 6} = post2.categories
end
test "allows counting nested relationships" do
@ -1686,13 +1686,13 @@ defmodule Ash.Test.Actions.LoadTest do
|> Ash.Query.load(categories: paginated_categories)
|> Ash.Query.page(limit: 1, count: true)
assert %Ash.Page.Offset{results: [author1], count: 2} =
assert %Ash.Page.Keyset{results: [author1], count: 2} =
Author
|> Ash.Query.sort(:name)
|> Ash.Query.load(posts: paginated_posts)
|> 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
end

View file

@ -899,8 +899,8 @@ defmodule Ash.Actions.PaginationTest do
:ok
end
test "it defaults to offset pagination" do
assert %Ash.Page.Offset{} = Ash.read!(User, action: :both_optional, page: [limit: 10])
test "it defaults to keyset pagination" do
assert %Ash.Page.Keyset{} = Ash.read!(User, action: :both_optional, page: [limit: 10])
end
test "it adds a keyset to the records, even though it returns an offset page" do

View file

@ -555,10 +555,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|> Ash.Changeset.load(posts: offset_pagination_query)
|> Ash.update!()
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Post 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -607,10 +606,9 @@ defmodule Ash.Test.Actions.UpdateTest do
author =
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}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = author.posts
@ -706,10 +704,9 @@ defmodule Ash.Test.Actions.UpdateTest do
|> Ash.Changeset.load(related_posts: offset_pagination_query)
|> Ash.update!()
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -759,10 +756,9 @@ defmodule Ash.Test.Actions.UpdateTest do
load: [related_posts: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%Post{title: "Related 1", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 2,
more?: true
} = post.related_posts
@ -805,10 +801,9 @@ defmodule Ash.Test.Actions.UpdateTest do
load: [related_tags: offset_pagination_query]
)
assert %Ash.Page.Offset{
assert %Ash.Page.Keyset{
results: [%MultitenantTag{name: "existing", __metadata__: %{keyset: keyset}}],
limit: 1,
offset: 0,
count: 1,
more?: false
} = tag.related_tags