Files
Sprout-Farm/SproutFarm-Backend/test/test_mongodb_migration.py
2025-09-15 19:10:37 +08:00

178 lines
7.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
测试MongoDB迁移功能
作者: AI Assistant
功能: 测试每日签到配置从JSON迁移到MongoDB的功能
"""
import sys
import os
import json
# 添加当前目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from SMYMongoDBAPI import SMYMongoDBAPI
def test_mongodb_migration():
"""测试MongoDB迁移功能"""
print("=== 测试MongoDB迁移功能 ===")
# 1. 测试MongoDB API连接
print("\n1. 测试MongoDB API连接:")
try:
api = SMYMongoDBAPI("test")
if api.is_connected():
print("✓ MongoDB连接成功")
else:
print("✗ MongoDB连接失败")
return False
except Exception as e:
print(f"✗ MongoDB连接异常: {e}")
return False
# 2. 测试获取每日签到配置
print("\n2. 测试获取每日签到配置:")
try:
config = api.get_daily_checkin_config()
if config:
print("✓ 成功获取每日签到配置")
print(f" 基础奖励金币范围: {config.get('基础奖励', {}).get('金币', {})}")
print(f" 种子奖励类型数量: {len(config.get('种子奖励', {}))}")
print(f" 连续签到奖励天数: {len(config.get('连续签到奖励', {}))}")
else:
print("✗ 获取每日签到配置失败")
return False
except Exception as e:
print(f"✗ 获取每日签到配置异常: {e}")
return False
# 3. 测试更新配置
print("\n3. 测试更新每日签到配置:")
try:
# 创建一个测试配置
test_config = {
"基础奖励": {
"金币": {"最小值": 300, "最大值": 600, "图标": "💰", "颜色": "#FFD700"},
"经验": {"最小值": 75, "最大值": 150, "图标": "", "颜色": "#00BFFF"}
},
"种子奖励": {
"普通": {"概率": 0.6, "数量范围": [2, 5], "种子池": ["小麦", "胡萝卜", "土豆", "稻谷"]},
"优良": {"概率": 0.25, "数量范围": [2, 4], "种子池": ["玉米", "番茄", "洋葱", "大豆", "豌豆", "黄瓜", "大白菜"]},
"稀有": {"概率": 0.12, "数量范围": [1, 3], "种子池": ["草莓", "花椰菜", "柿子", "蓝莓", "树莓"]},
"史诗": {"概率": 0.025, "数量范围": [1, 2], "种子池": ["葡萄", "南瓜", "芦笋", "茄子", "向日葵", "蕨菜"]},
"传奇": {"概率": 0.005, "数量范围": [1, 1], "种子池": ["西瓜", "甘蔗", "香草", "甜菜", "人参", "富贵竹", "芦荟", "哈密瓜"]}
},
"连续签到奖励": {
"第3天": {"额外金币": 150, "额外经验": 75, "描述": "连续签到奖励"},
"第7天": {"额外金币": 300, "额外经验": 150, "描述": "一周连击奖励"},
"第14天": {"额外金币": 600, "额外经验": 250, "描述": "半月连击奖励"},
"第21天": {"额外金币": 1000, "额外经验": 400, "描述": "三周连击奖励"},
"第30天": {"额外金币": 2000, "额外经验": 600, "描述": "满月连击奖励"}
}
}
success = api.update_daily_checkin_config(test_config)
if success:
print("✓ 成功更新测试配置到MongoDB")
else:
print("✗ 更新测试配置失败")
return False
except Exception as e:
print(f"✗ 更新测试配置异常: {e}")
return False
# 4. 验证更新后的配置
print("\n4. 验证更新后的配置:")
try:
updated_config = api.get_daily_checkin_config()
if updated_config:
print("✓ 成功获取更新后的配置")
print(f" 更新后金币范围: {updated_config.get('基础奖励', {}).get('金币', {})}")
print(f" 更新后第3天奖励: {updated_config.get('连续签到奖励', {}).get('第3天', {})}")
# 验证更新是否生效
if updated_config.get('基础奖励', {}).get('金币', {}).get('最小值') == 300:
print("✓ 配置更新验证成功")
else:
print("✗ 配置更新验证失败")
return False
else:
print("✗ 获取更新后的配置失败")
return False
except Exception as e:
print(f"✗ 验证更新后配置异常: {e}")
return False
# 5. 恢复原始配置
print("\n5. 恢复原始配置:")
try:
original_config = {
"基础奖励": {
"金币": {"最小值": 200, "最大值": 500, "图标": "💰", "颜色": "#FFD700"},
"经验": {"最小值": 50, "最大值": 120, "图标": "", "颜色": "#00BFFF"}
},
"种子奖励": {
"普通": {"概率": 0.6, "数量范围": [2, 5], "种子池": ["小麦", "胡萝卜", "土豆", "稻谷"]},
"优良": {"概率": 0.25, "数量范围": [2, 4], "种子池": ["玉米", "番茄", "洋葱", "大豆", "豌豆", "黄瓜", "大白菜"]},
"稀有": {"概率": 0.12, "数量范围": [1, 3], "种子池": ["草莓", "花椰菜", "柿子", "蓝莓", "树莓"]},
"史诗": {"概率": 0.025, "数量范围": [1, 2], "种子池": ["葡萄", "南瓜", "芦笋", "茄子", "向日葵", "蕨菜"]},
"传奇": {"概率": 0.005, "数量范围": [1, 1], "种子池": ["西瓜", "甘蔗", "香草", "甜菜", "人参", "富贵竹", "芦荟", "哈密瓜"]}
},
"连续签到奖励": {
"第3天": {"额外金币": 100, "额外经验": 50, "描述": "连续签到奖励"},
"第7天": {"额外金币": 200, "额外经验": 100, "描述": "一周连击奖励"},
"第14天": {"额外金币": 500, "额外经验": 200, "描述": "半月连击奖励"},
"第21天": {"额外金币": 800, "额外经验": 300, "描述": "三周连击奖励"},
"第30天": {"额外金币": 1500, "额外经验": 500, "描述": "满月连击奖励"}
}
}
success = api.update_daily_checkin_config(original_config)
if success:
print("✓ 成功恢复原始配置")
else:
print("✗ 恢复原始配置失败")
return False
except Exception as e:
print(f"✗ 恢复原始配置异常: {e}")
return False
# 6. 测试配置数据完整性
print("\n6. 测试配置数据完整性:")
try:
final_config = api.get_daily_checkin_config()
if final_config:
# 检查必要字段是否存在
required_fields = ["基础奖励", "种子奖励", "连续签到奖励"]
missing_fields = [field for field in required_fields if field not in final_config]
if not missing_fields:
print("✓ 配置数据完整性检查通过")
print(f" 包含字段: {', '.join(required_fields)}")
else:
print(f"✗ 配置数据缺少字段: {missing_fields}")
return False
else:
print("✗ 无法获取最终配置进行完整性检查")
return False
except Exception as e:
print(f"✗ 配置数据完整性检查异常: {e}")
return False
# 清理资源
api.disconnect()
print("\n=== 所有测试通过MongoDB迁移功能正常 ===")
return True
if __name__ == "__main__":
success = test_mongodb_migration()
if success:
print("\n🎉 MongoDB迁移测试成功完成")
sys.exit(0)
else:
print("\n❌ MongoDB迁移测试失败")
sys.exit(1)