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系统测试通过")