who_need_help/test/who_need_help/pagination_test.exs

33 lines
1.1 KiB
Elixir

defmodule WhoNeedHelp.PaginationTest do
use ExUnit.Case, async: true
alias WhoNeedHelp.Pagination
test "cursor round-trips a UTC timestamp and UUID" do
timestamp = ~U[2026-07-19 01:30:00Z]
id = Ecto.UUID.generate()
assert {:ok, {^timestamp, ^id}} = timestamp |> Pagination.encode(id) |> Pagination.decode()
end
test "invalid cursors never become query values" do
assert :error = Pagination.decode("not-a-cursor")
assert Pagination.cursor(after: "not-a-cursor") == nil
end
test "page exposes a cursor only when another row exists" do
rows = [
%{id: Ecto.UUID.generate(), inserted_at: ~U[2026-07-19 01:30:03Z]},
%{id: Ecto.UUID.generate(), inserted_at: ~U[2026-07-19 01:30:02Z]},
%{id: Ecto.UUID.generate(), inserted_at: ~U[2026-07-19 01:30:01Z]}
]
page = Pagination.page(rows, 2, &{&1.inserted_at, &1.id})
assert page.entries == Enum.take(rows, 2)
assert is_binary(page.next_cursor)
last_page = Pagination.page(Enum.take(rows, 2), 2, &{&1.inserted_at, &1.id})
assert last_page.next_cursor == nil
end
end