Files
cursornew2026/backend/test_cursor_service.py
huangzhenpc ac19d029da backend v2.1: 公告管理功能 + 系统重构
- 新增 Announcement 数据模型,支持公告的增删改查
- 后台管理新增"公告管理"Tab(创建/编辑/删除/启用禁用)
- 客户端 /api/announcement 改为从数据库读取
- 账号服务重构,新增无感换号、自动分析等功能
- 新增后台任务调度器、数据库迁移脚本
- Schema/Service/Config 全面升级至 v2.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 19:58:05 +08:00

105 lines
3.9 KiB
Python

"""
测试 CursorUsageService
"""
import asyncio
import sys
sys.path.insert(0, '.')
from app.services.cursor_usage_service import (
cursor_usage_service,
get_account_usage,
check_account_valid,
check_and_classify_account
)
# 测试 Token (free_trial)
TEST_TOKEN = "user_01KD0CVVERZH4B04AEKP4QQDV6::eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhdXRoMHx1c2VyXzAxS0QwQ1ZWRVJaSDRCMDRBRUtQNFFRRFY2IiwidGltZSI6IjE3NjYzMTg4MjIiLCJyYW5kb21uZXNzIjoiMjBlMzY0MDItZTY5Yi00ZmU1IiwiZXhwIjoxNzcxNTAyODIyLCJpc3MiOiJodHRwczovL2F1dGhlbnRpY2F0aW9uLmN1cnNvci5zaCIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwgb2ZmbGluZV9hY2Nlc3MiLCJhdWQiOiJodHRwczovL2N1cnNvci5jb20iLCJ0eXBlIjoid2ViIn0.rnqRVLK-iLFEUigNhiQI1loNjDWbhuGGDjeEUSxRAh0"
async def test_check_valid():
"""测试账号有效性检查"""
print("\n========== 1. 检查账号有效性 ==========")
is_valid, error = await check_account_valid(TEST_TOKEN)
print(f"账号有效: {is_valid}")
if error:
print(f"错误: {error}")
async def test_get_usage():
"""测试获取用量信息"""
print("\n========== 2. 获取用量信息 ==========")
result = await get_account_usage(TEST_TOKEN)
if result["success"]:
data = result["data"]
print(f"会员类型: {data['membership_type']}")
if data.get('days_remaining_on_trial'):
print(f"试用剩余天数: {data['days_remaining_on_trial']}")
print(f"计费周期: {data['billing_cycle']['start']} ~ {data['billing_cycle']['end']}")
print(f"套餐用量: {data['plan_usage']['used']}/{data['plan_usage']['limit']} (剩余 {data['plan_usage']['remaining']})")
print(f"总请求次数: {data['total_requests']}")
print(f"Token 用量:")
print(f" - 输入: {data['token_usage']['input_tokens']}")
print(f" - 输出: {data['token_usage']['output_tokens']}")
print(f" - 缓存读取: {data['token_usage']['cache_read_tokens']}")
print(f" - 总费用: ${data['token_usage']['total_cost_usd']}")
else:
print(f"获取失败: {result['error']}")
async def test_full_info():
"""测试完整信息"""
print("\n========== 3. 完整验证结果 ==========")
info = await cursor_usage_service.validate_and_get_usage(TEST_TOKEN)
print(f"账号有效: {info.is_valid}")
print(f"会员类型: {info.membership_type}")
print(f"号池类型: {info.pool_type}")
print(f"是否Pro试用: {info.is_pro_trial}")
print(f"是否可用: {info.is_usable}")
if info.days_remaining_on_trial:
print(f"试用剩余天数: {info.days_remaining_on_trial}")
print(f"套餐用量: {info.plan_used}/{info.plan_limit} (剩余 {info.plan_remaining})")
print(f"总请求次数: {info.total_requests}")
print(f"总输入Token: {info.total_input_tokens}")
print(f"总输出Token: {info.total_output_tokens}")
print(f"总费用: ${info.total_cost_cents / 100:.4f}")
if info.error_message:
print(f"错误: {info.error_message}")
async def test_classify():
"""测试号池分类"""
print("\n========== 4. 号池分类 ==========")
result = await check_and_classify_account(TEST_TOKEN)
if result["success"]:
print(f"号池类型: {result['pool_type']}")
print(f"是否可用: {result['is_usable']}")
print(f"会员类型: {result['membership_type']}")
print(f"是否Pro试用: {result['is_pro_trial']}")
print(f"剩余额度: {result['plan_remaining']}")
print(f">>> {result['recommendation']}")
else:
print(f"分类失败: {result['error']}")
async def main():
print("=" * 50)
print(" CursorUsageService 测试")
print("=" * 50)
await test_check_valid()
await test_get_usage()
await test_full_info()
await test_classify()
print("\n" + "=" * 50)
print(" 测试完成")
print("=" * 50)
if __name__ == "__main__":
asyncio.run(main())