""" 测试分页逻辑。 无外部依赖,可离线运行。 """ 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页,自动修正