""" 测试世界书分页功能 """ 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)