100 lines
3.2 KiB
Python
100 lines
3.2 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
测试为指定账号增加萌芽币接口 (/api/user/add-coins)
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
import json
|
||
from datetime import datetime
|
||
|
||
# 加入后端根目录到路径,导入create_app
|
||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from app import create_app
|
||
from modules.auth import generate_token
|
||
from werkzeug.security import generate_password_hash
|
||
|
||
|
||
def run_test():
|
||
"""运行加币接口测试,打印真实响应并断言结果"""
|
||
app = create_app()
|
||
|
||
with app.app_context():
|
||
db = app.mongo.db
|
||
users = db.userdata
|
||
|
||
# 构造一个临时测试用户(真实写库,测试结束删除)
|
||
test_email = "infogenie.test.addcoins@foxmail.com"
|
||
users.delete_many({'邮箱': test_email})
|
||
test_user = {
|
||
'邮箱': test_email,
|
||
'用户名': '测试用户_加币',
|
||
'密码': generate_password_hash('AddCoins123!'),
|
||
'头像': None,
|
||
'注册时间': datetime.now().isoformat(),
|
||
'最后登录': None,
|
||
'登录次数': 0,
|
||
'用户状态': 'active',
|
||
'等级': 0,
|
||
'经验': 0,
|
||
'萌芽币': 0,
|
||
'签到系统': {
|
||
'连续签到天数': 0,
|
||
'今日是否已签到': False,
|
||
'签到时间': datetime.now().strftime('%Y-%m-%d')
|
||
}
|
||
}
|
||
insert_result = users.insert_one(test_user)
|
||
test_user_id = str(insert_result.inserted_id)
|
||
|
||
# 生成有效JWT用于认证
|
||
token = generate_token({
|
||
'user_id': test_user_id,
|
||
'email': test_email,
|
||
'username': test_user['用户名']
|
||
})
|
||
|
||
client = app.test_client()
|
||
|
||
# 第一次加币: +500
|
||
resp1 = client.post(
|
||
'/api/user/add-coins',
|
||
headers={'Authorization': f'Bearer {token}'},
|
||
json={'email': test_email, 'amount': 500}
|
||
)
|
||
print('第一次加币 状态码:', resp1.status_code)
|
||
data1 = resp1.get_json()
|
||
print('第一次加币 响应:')
|
||
print(json.dumps(data1, ensure_ascii=False, indent=2))
|
||
assert resp1.status_code == 200
|
||
assert data1.get('success') is True
|
||
assert data1['data']['before_coins'] == 0
|
||
assert data1['data']['added'] == 500
|
||
assert data1['data']['new_coins'] == 500
|
||
|
||
# 第二次加币: +200
|
||
resp2 = client.post(
|
||
'/api/user/add-coins',
|
||
headers={'Authorization': f'Bearer {token}'},
|
||
json={'email': test_email, 'amount': 200}
|
||
)
|
||
print('第二次加币 状态码:', resp2.status_code)
|
||
data2 = resp2.get_json()
|
||
print('第二次加币 响应:')
|
||
print(json.dumps(data2, ensure_ascii=False, indent=2))
|
||
assert resp2.status_code == 200
|
||
assert data2.get('success') is True
|
||
assert data2['data']['before_coins'] == 500
|
||
assert data2['data']['added'] == 200
|
||
assert data2['data']['new_coins'] == 700
|
||
|
||
# 清理临时测试用户
|
||
users.delete_many({'邮箱': test_email})
|
||
|
||
|
||
if __name__ == '__main__':
|
||
print('🔧 开始测试 /api/user/add-coins 接口...')
|
||
run_test()
|
||
print('✅ 测试完成!') |