126 lines
5.1 KiB
Python
126 lines
5.1 KiB
Python
"""
|
||
测试世界书分页功能
|
||
"""
|
||
import sys
|
||
import os
|
||
from pathlib import Path
|
||
import json
|
||
|
||
# 添加backend目录到Python路径
|
||
backend_dir = Path(__file__).parent / "backend"
|
||
sys.path.insert(0, str(backend_dir))
|
||
|
||
# 直接导入需要的模块,避免导入整个services包
|
||
from core.config import settings
|
||
from services.worldbook_service import WorldBookService
|
||
|
||
def test_pagination():
|
||
"""测试世界书条目分页功能"""
|
||
|
||
# 测试数据:世界书名称
|
||
test_worldbook_name = "测试分页世界书"
|
||
|
||
print("=" * 60)
|
||
print("测试世界书分页功能")
|
||
print("=" * 60)
|
||
|
||
try:
|
||
# 1. 创建测试世界书
|
||
print("\n1. 创建测试世界书...")
|
||
try:
|
||
worldbook = WorldBookService.create_worldbook(test_worldbook_name, "用于测试分页功能")
|
||
print(f" ✓ 世界书创建成功: {worldbook['name']}")
|
||
except ValueError as e:
|
||
if "already exists" in str(e):
|
||
print(f" ℹ 世界书已存在,跳过创建")
|
||
else:
|
||
raise
|
||
|
||
# 2. 添加测试条目(创建30个条目)
|
||
print("\n2. 添加测试条目...")
|
||
num_entries = 30
|
||
for i in range(num_entries):
|
||
entry_data = {
|
||
"key": [f"关键词{i}"],
|
||
"content": f"这是第{i+1}个测试条目的内容",
|
||
"comment": f"测试条目 {i+1}",
|
||
"order": i + 1
|
||
}
|
||
WorldBookService.create_entry(test_worldbook_name, entry_data)
|
||
print(f" ✓ 成功添加 {num_entries} 个条目")
|
||
|
||
# 3. 测试分页功能
|
||
print("\n3. 测试分页功能...")
|
||
|
||
# 测试第1页,每页10条
|
||
print("\n 测试第1页(每页10条):")
|
||
result = WorldBookService.list_entries(test_worldbook_name, page=1, page_size=10)
|
||
print(f" - 总条目数: {result['total']}")
|
||
print(f" - 当前页: {result['page']}")
|
||
print(f" - 每页数量: {result['page_size']}")
|
||
print(f" - 总页数: {result['total_pages']}")
|
||
print(f" - 返回条目数: {len(result['entries'])}")
|
||
assert result['total'] == num_entries, f"总条目数错误: {result['total']} != {num_entries}"
|
||
assert result['page'] == 1, f"页码错误: {result['page']} != 1"
|
||
assert result['page_size'] == 10, f"每页数量错误: {result['page_size']} != 10"
|
||
assert result['total_pages'] == 3, f"总页数错误: {result['total_pages']} != 3"
|
||
assert len(result['entries']) == 10, f"返回条目数错误: {len(result['entries'])} != 10"
|
||
print(" ✓ 第1页测试通过")
|
||
|
||
# 测试第2页
|
||
print("\n 测试第2页(每页10条):")
|
||
result = WorldBookService.list_entries(test_worldbook_name, page=2, page_size=10)
|
||
print(f" - 当前页: {result['page']}")
|
||
print(f" - 返回条目数: {len(result['entries'])}")
|
||
assert result['page'] == 2, f"页码错误: {result['page']} != 2"
|
||
assert len(result['entries']) == 10, f"返回条目数错误: {len(result['entries'])} != 10"
|
||
print(" ✓ 第2页测试通过")
|
||
|
||
# 测试第3页(最后一页,应该只有10条)
|
||
print("\n 测试第3页(每页10条):")
|
||
result = WorldBookService.list_entries(test_worldbook_name, page=3, page_size=10)
|
||
print(f" - 当前页: {result['page']}")
|
||
print(f" - 返回条目数: {len(result['entries'])}")
|
||
assert result['page'] == 3, f"页码错误: {result['page']} != 3"
|
||
assert len(result['entries']) == 10, f"返回条目数错误: {len(result['entries'])} != 10"
|
||
print(" ✓ 第3页测试通过")
|
||
|
||
# 测试不同的每页数量
|
||
print("\n 测试每页20条:")
|
||
result = WorldBookService.list_entries(test_worldbook_name, page=1, page_size=20)
|
||
print(f" - 总页数: {result['total_pages']}")
|
||
print(f" - 返回条目数: {len(result['entries'])}")
|
||
assert result['page_size'] == 20, f"每页数量错误: {result['page_size']} != 20"
|
||
assert result['total_pages'] == 2, f"总页数错误: {result['total_pages']} != 2"
|
||
assert len(result['entries']) == 20, f"返回条目数错误: {len(result['entries'])} != 20"
|
||
print(" ✓ 每页20条测试通过")
|
||
|
||
print("\n" + "=" * 60)
|
||
print("✅ 所有分页测试通过!")
|
||
print("=" * 60)
|
||
|
||
# 4. 清理测试数据
|
||
print("\n4. 清理测试数据...")
|
||
WorldBookService.delete_worldbook(test_worldbook_name)
|
||
print(" ✓ 测试世界书已删除")
|
||
|
||
return True
|
||
|
||
except Exception as e:
|
||
print(f"\n❌ 测试失败: {str(e)}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
# 尝试清理测试数据
|
||
try:
|
||
WorldBookService.delete_worldbook(test_worldbook_name)
|
||
print(" ✓ 测试数据已清理")
|
||
except:
|
||
pass
|
||
|
||
return False
|
||
|
||
if __name__ == "__main__":
|
||
success = test_pagination()
|
||
sys.exit(0 if success else 1)
|