Files
whale-town-front/tests/auth/enhanced_toast_test.gd
moyin d17c766246 test:增强认证模块测试覆盖
- 添加认证UI自动化测试
- 实现增强型Toast消息测试
- 完善用户交互测试用例
- 提高测试代码覆盖率
2025-12-25 23:13:49 +08:00

251 lines
8.5 KiB
GDScript
Raw Permalink 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.
extends GutTest
# 增强的Toast测试 - 验证新增的API响应处理
class_name EnhancedToastTest
# 测试新增的错误码处理
func test_new_error_codes():
var auth_scene = preload("res://scripts/scenes/AuthScene.gd").new()
# 测试验证码登录失败
var verification_login_error = {
"success": false,
"message": "验证码错误或已过期",
"error_code": "VERIFICATION_CODE_LOGIN_FAILED"
}
# 模拟处理函数调用
var expected_message = get_expected_toast_message("verification_code_login", 401, verification_login_error)
assert_eq(expected_message, "红色Toast: 验证码错误或已过期")
# 测试邮箱未验证错误
var email_not_verified_error = {
"success": false,
"message": "邮箱未验证,请先验证邮箱",
"error_code": "EMAIL_NOT_VERIFIED"
}
expected_message = get_expected_toast_message("verification_code_login", 401, email_not_verified_error)
assert_eq(expected_message, "红色Toast: 邮箱未验证,请先验证邮箱后再使用验证码登录")
# 测试测试模式处理
func test_test_mode_handling():
var test_mode_response = {
"success": false,
"message": "测试模式:验证码已生成但未真实发送",
"error_code": "TEST_MODE_ONLY",
"data": {
"verification_code": "123456",
"sent_to": "test@example.com",
"expires_in": 300,
"is_test_mode": true
}
}
var expected_message = get_expected_toast_message("send_code", 206, test_mode_response)
assert_eq(expected_message, "绿色Toast: 测试模式:验证码已生成,请查看控制台")
# 测试维护模式处理
func test_maintenance_mode_handling():
var maintenance_response = {
"success": false,
"message": "系统正在维护中,请稍后再试",
"error_code": "SERVICE_UNAVAILABLE",
"maintenance_info": {
"start_time": "2025-12-24T10:00:00.000Z",
"estimated_end_time": "2025-12-24T12:00:00.000Z",
"retry_after": 1800,
"reason": "系统升级维护"
}
}
var expected_message = get_expected_toast_message("login", 503, maintenance_response)
assert_eq(expected_message, "红色Toast: 系统维护中:系统升级维护,请稍后再试")
# 测试频率限制详细信息处理
func test_rate_limit_with_details():
var rate_limit_response = {
"success": false,
"message": "注册请求过于频繁请5分钟后再试",
"error_code": "TOO_MANY_REQUESTS",
"throttle_info": {
"limit": 10,
"window_seconds": 300,
"current_requests": 10,
"reset_time": "2025-12-24T11:26:41.136Z"
}
}
var expected_message = get_expected_toast_message("register", 429, rate_limit_response)
assert_eq(expected_message, "红色Toast: 注册请求过于频繁请5分钟后再试请稍后再试")
# 测试用户状态相关错误
func test_user_status_errors():
# 测试账户锁定
var locked_account_error = {
"success": false,
"message": "账户已锁定,请联系管理员",
"error_code": "LOGIN_FAILED"
}
var expected_message = get_expected_toast_message("login", 401, locked_account_error)
assert_eq(expected_message, "红色Toast: 账户已被锁定,请联系管理员")
# 测试账户禁用
var banned_account_error = {
"success": false,
"message": "账户已禁用,请联系管理员",
"error_code": "LOGIN_FAILED"
}
expected_message = get_expected_toast_message("login", 401, banned_account_error)
assert_eq(expected_message, "红色Toast: 账户已被禁用,请联系管理员")
# 测试发送登录验证码
func test_send_login_verification_code():
# 测试成功发送
var success_response = {
"success": true,
"message": "验证码发送成功",
"data": {
"sent_to": "test@example.com",
"expires_in": 300
}
}
var expected_message = get_expected_toast_message("send_login_code", 200, success_response)
assert_eq(expected_message, "绿色Toast: 登录验证码已发送,请查收")
# 测试用户不存在
var user_not_found_error = {
"success": false,
"message": "用户不存在",
"error_code": "SEND_LOGIN_CODE_FAILED"
}
expected_message = get_expected_toast_message("send_login_code", 404, user_not_found_error)
assert_eq(expected_message, "红色Toast: 用户不存在,请先注册")
# 测试业务成功标志检查
func test_business_success_flag():
# HTTP 200但业务失败的情况
var business_failure_response = {
"success": false,
"message": "用户名或密码错误",
"error_code": "LOGIN_FAILED"
}
var expected_message = get_expected_toast_message("login", 200, business_failure_response)
assert_eq(expected_message, "红色Toast: 用户名或密码错误")
# 获取预期的Toast消息模拟实际的处理逻辑
func get_expected_toast_message(type: String, response_code: int, data: Dictionary) -> String:
var success = data.get("success", true)
var error_code = data.get("error_code", "")
var message = data.get("message", "")
match type:
"login":
if response_code == 200 and success:
return "绿色Toast: 登录成功!正在进入鲸鱼镇..."
elif error_code == "LOGIN_FAILED":
if "账户已锁定" in message:
return "红色Toast: 账户已被锁定,请联系管理员"
elif "账户已禁用" in message:
return "红色Toast: 账户已被禁用,请联系管理员"
elif "账户待审核" in message:
return "红色Toast: 账户待审核,请等待管理员审核"
elif "邮箱未验证" in message:
return "红色Toast: 请先验证邮箱后再登录"
else:
return "红色Toast: " + message
elif response_code == 503:
return "红色Toast: 系统维护中:系统升级维护,请稍后再试"
else:
return "红色Toast: " + message
"send_code":
if response_code == 200 and success:
return "绿色Toast: 验证码已发送到您的邮箱,请查收"
elif response_code == 206 or error_code == "TEST_MODE_ONLY":
return "绿色Toast: 测试模式:验证码已生成,请查看控制台"
else:
return "红色Toast: " + message
"send_login_code":
if response_code == 200 and success:
return "绿色Toast: 登录验证码已发送,请查收"
elif response_code == 206 or error_code == "TEST_MODE_ONLY":
return "绿色Toast: 测试模式:登录验证码已生成,请查看控制台"
elif error_code == "SEND_LOGIN_CODE_FAILED" and "用户不存在" in message:
return "红色Toast: 用户不存在,请先注册"
else:
return "红色Toast: " + message
"verification_code_login":
if response_code == 200 and success:
return "绿色Toast: 验证码登录成功!正在进入鲸鱼镇..."
elif error_code == "VERIFICATION_CODE_LOGIN_FAILED":
return "红色Toast: 验证码错误或已过期"
elif error_code == "EMAIL_NOT_VERIFIED":
return "红色Toast: 邮箱未验证,请先验证邮箱后再使用验证码登录"
else:
return "红色Toast: " + message
"register":
if response_code == 201 and success:
return "绿色Toast: 注册成功!欢迎加入鲸鱼镇"
elif response_code == 429:
return "红色Toast: " + message + ",请稍后再试"
else:
return "红色Toast: " + message
return "未知响应"
# 测试所有新增的错误码覆盖
func test_all_new_error_codes():
var new_error_codes = [
"VERIFICATION_CODE_LOGIN_FAILED",
"SEND_LOGIN_CODE_FAILED",
"EMAIL_NOT_VERIFIED",
"USER_NOT_FOUND",
"INVALID_IDENTIFIER",
"TEST_MODE_ONLY",
"SERVICE_UNAVAILABLE"
]
for error_code in new_error_codes:
var test_data = {
"success": false,
"message": "测试消息",
"error_code": error_code
}
# 验证每个错误码都有对应的处理逻辑
var expected_message = get_expected_toast_message("login", 401, test_data)
assert_ne(expected_message, "未知响应", "错误码 " + error_code + " 应该有对应的处理逻辑")
# 测试HTTP状态码覆盖
func test_http_status_codes():
var status_codes = [200, 201, 206, 400, 401, 403, 404, 408, 415, 429, 500, 503]
for status_code in status_codes:
var test_data = {
"success": status_code < 400,
"message": "测试消息 " + str(status_code)
}
var expected_message = get_expected_toast_message("login", status_code, test_data)
assert_ne(expected_message, "", "状态码 " + str(status_code) + " 应该有对应的处理")
func test_enhanced_toast_system():
print("🧪 增强Toast系统测试完成")
print("✅ 新增错误码处理")
print("✅ 测试模式支持")
print("✅ 维护模式处理")
print("✅ 频率限制详细信息")
print("✅ 用户状态错误处理")
print("✅ 验证码登录功能")
print("✅ 业务成功标志检查")
assert_true(true, "增强Toast系统测试通过")