Files
2026-06-02 16:26:10 +08:00

119 lines
3.8 KiB
Python

"""
测试分页逻辑。
无外部依赖,可离线运行。
"""
from paste.util.pagination import Pagination
class TestPagination:
"""分页功能测试"""
def test_pages_calculation_exact(self):
"""精确整除的分页计算"""
p = Pagination(row_count=100)
pages = p.pages(page_size=20)
assert pages == 5
def test_pages_calculation_remainder(self):
"""有余数的分页计算"""
p = Pagination(row_count=101)
pages = p.pages(page_size=20)
assert pages == 6
def test_pages_calculation_zero_rows(self):
"""零行数据的处理"""
p = Pagination(row_count=0)
pages = p.pages(page_size=20)
assert pages == 1
def test_page_number_valid(self):
"""页码有效性检测"""
p = Pagination(row_count=50)
p.pages(page_size=20)
assert p.number(1) == 1
assert p.number(3) == 3 # 超出范围应返回最大页
def test_page_number_negative(self):
"""负页码处理"""
p = Pagination(row_count=50)
p.pages(page_size=20)
assert p.number(-1) == 1
def test_offset_calculation(self):
"""偏移量计算"""
p = Pagination(row_count=100)
p.pages(page_size=20)
assert p.offset(1) == 0
assert p.offset(2) == 20
assert p.offset(3) == 40
def test_paging_chain(self):
"""链式调用分页"""
p = Pagination(row_count=123).paging(page_number=2, page_size=20)
assert p.page_count == 7
assert p.page_number == 2
assert p.offset_size == 20
def test_page_size_bounds(self):
"""页大小边界: 最小1,最大1000"""
p = Pagination(row_count=2000)
assert p.pages(page_size=0) > 0
assert p.pages(page_size=2000) <= 1000
def test_large_dataset(self):
"""大数据集分页"""
p = Pagination(row_count=1000000)
pages = p.pages(page_size=100)
assert pages == 10000
def test_single_row(self):
"""单行数据"""
p = Pagination(row_count=1)
assert p.pages(page_size=10) == 1
p.paging(page_number=1, page_size=10)
assert p.page_number == 1
assert p.offset_size == 0
def test_page_number_upper_bound(self):
"""页码上限处理"""
p = Pagination(row_count=30).paging(page_number=100, page_size=10)
assert p.page_number == 3 # 最大只能到3页
# ============================================================
# 以下是从 test_db.py 迁移过来的分页测试
# 原函数 test_pagination() 改为标准的 pytest 测试
# ============================================================
class TestPaginationFromDb:
"""从 test_db.py 迁移的分页测试"""
def test_pagination_basic(self):
"""基础分页计算"""
from paste.util.pagination import Pagination
p = Pagination(row_count=123).paging(page_number=2, page_size=20)
assert p.page_count == 7
assert p.page_number == 2
assert p.offset_size == 20
def test_pagination_first_page(self):
"""第一页"""
from paste.util.pagination import Pagination
p = Pagination(row_count=50).paging(page_number=1, page_size=10)
assert p.page_number == 1
assert p.offset_size == 0
def test_pagination_last_page(self):
"""最后一页"""
from paste.util.pagination import Pagination
p = Pagination(row_count=55).paging(page_number=6, page_size=10)
assert p.page_number == 6
assert p.offset_size == 50
def test_pagination_out_of_range(self):
"""超出范围时自动修正"""
from paste.util.pagination import Pagination
p = Pagination(row_count=30).paging(page_number=100, page_size=10)
assert p.page_number == 3 # 只有3页,自动修正