Squashed 'paste-framework/' content from commit 34e8684
git-subtree-dir: paste-framework git-subtree-split: 34e8684c4bc3cebbe177509f42ab4ef5b5425a7a
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
"""
|
||||
测试分页逻辑。
|
||||
无外部依赖,可离线运行。
|
||||
"""
|
||||
|
||||
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页,自动修正
|
||||
Reference in New Issue
Block a user