Files
model-platform/backend/tests/test_platform_pagination.py

58 lines
1.5 KiB
Python

"""Unit tests for platform cursor pagination helpers."""
from __future__ import annotations
import datetime
import pytest
from fastapi import HTTPException
from backend.api.platform._pagination import (
decode_cursor,
encode_cursor,
page_meta,
)
def test_encode_decode_roundtrip() -> None:
created_at = datetime.datetime(2026, 3, 15, 12, 30, 45, 123000)
row_id = "01HXY9C5B8N3K4P7Q6RT2V0J8D"
cursor = encode_cursor(created_at, row_id)
decoded_ts, decoded_id = decode_cursor(cursor)
assert decoded_ts == created_at
assert decoded_id == row_id
def test_decode_strips_timezone() -> None:
created_at = datetime.datetime(2026, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc)
cursor = encode_cursor(created_at, "abc")
decoded_ts, decoded_id = decode_cursor(cursor)
assert decoded_ts.tzinfo is None
assert decoded_id == "abc"
def test_decode_invalid_cursor_raises_400() -> None:
with pytest.raises(HTTPException) as exc_info:
decode_cursor("not-a-valid-cursor!!!")
assert exc_info.value.status_code == 400
def test_page_meta_has_more() -> None:
meta = page_meta(
limit=10,
page_count=10,
total_count=25,
next_cursor="abc",
)
assert meta["has_more"] is True
assert meta["next_cursor"] == "abc"
assert meta["total_count"] == 25
meta_end = page_meta(
limit=10,
page_count=5,
total_count=25,
next_cursor=None,
)
assert meta_end["has_more"] is False