mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
fix: keyset + before results must be reversed
This commit is contained in:
parent
021d859990
commit
669c98b379
2 changed files with 37 additions and 4 deletions
|
@ -15,6 +15,13 @@ defmodule Ash.Page.Keyset do
|
|||
@type t :: %__MODULE__{}
|
||||
|
||||
def new(results, count, sort, original_query, more?, opts) do
|
||||
# results =
|
||||
# if opts[:page][:before] do
|
||||
# Enum.reverse(results)
|
||||
# else
|
||||
# results
|
||||
# end
|
||||
|
||||
%__MODULE__{
|
||||
results: data_with_keyset(results, original_query.resource, sort),
|
||||
count: count,
|
||||
|
|
|
@ -250,11 +250,12 @@ defmodule Ash.Actions.PaginationTest do
|
|||
|
||||
describe "keyset pagination" do
|
||||
setup do
|
||||
for i <- 0..9 do
|
||||
Api.create!(Ash.Changeset.new(User, %{name: "#{i}"}))
|
||||
end
|
||||
users =
|
||||
for i <- 0..9 do
|
||||
Api.create!(Ash.Changeset.new(User, %{name: "#{i}"}))
|
||||
end
|
||||
|
||||
:ok
|
||||
[users: users]
|
||||
end
|
||||
|
||||
test "can be limited" do
|
||||
|
@ -314,6 +315,31 @@ defmodule Ash.Actions.PaginationTest do
|
|||
assert id == before_id
|
||||
end
|
||||
|
||||
test "can ask for records before a specific keyset, with the sort order honored" do
|
||||
%{results: users} =
|
||||
User |> Ash.Query.sort(:name) |> Api.read!(action: :keyset, page: [limit: 100])
|
||||
|
||||
users = Enum.sort_by(users, & &1.name)
|
||||
last_user = List.last(users)
|
||||
|
||||
%{results: results} =
|
||||
User
|
||||
|> Ash.Query.sort(:name)
|
||||
|> Api.read!(action: :keyset, page: [limit: 10, before: last_user.__metadata__.keyset])
|
||||
|
||||
assert Enum.sort(Enum.map(results, & &1.name)) == [
|
||||
"0",
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8"
|
||||
]
|
||||
end
|
||||
|
||||
test "pagination works with a sort applied" do
|
||||
page =
|
||||
User
|
||||
|
|
Loading…
Reference in a new issue