diff --git a/tests/auth/auth_ui_test.gd b/tests/auth/auth_ui_test.gd index 7930df0..05c8d94 100644 --- a/tests/auth/auth_ui_test.gd +++ b/tests/auth/auth_ui_test.gd @@ -403,6 +403,8 @@ func get_expected_ui_feedback(scenario: Dictionary) -> String: return "红色Toast: 登录请求过于频繁" 500: return "红色Toast: 服务器繁忙" + 503: + return "红色Toast: 系统维护中" "send_code": match response_code: 200, 206: @@ -413,8 +415,38 @@ func get_expected_ui_feedback(scenario: Dictionary) -> String: return "红色Toast: 请求过于频繁" 500: return "红色Toast: 服务器繁忙" + 503: + return "红色Toast: 系统维护中" 0: return "红色Toast: 网络连接失败" + "send_login_code": + match response_code: + 200, 206: + return "绿色Toast: 登录验证码已发送" + 400: + return "红色Toast: 邮箱或手机号格式错误" + 404: + return "红色Toast: 用户不存在" + 429: + return "红色Toast: 请求过于频繁" + 500: + return "红色Toast: 服务器繁忙" + 503: + return "红色Toast: 系统维护中" + "verification_code_login": + match response_code: + 200: + return "绿色Toast: 验证码登录成功,跳转到主场景" + 401: + return "红色Toast: 验证码错误或已过期" + 404: + return "红色Toast: 用户不存在" + 429: + return "红色Toast: 请求过于频繁" + 500: + return "红色Toast: 服务器繁忙" + 503: + return "红色Toast: 系统维护中" "verify_email": match response_code: 200: @@ -425,6 +457,8 @@ func get_expected_ui_feedback(scenario: Dictionary) -> String: return "红色Toast: 请先获取验证码" 500: return "红色Toast: 验证失败" + 503: + return "红色Toast: 系统维护中" "register": match response_code: 201: @@ -437,6 +471,8 @@ func get_expected_ui_feedback(scenario: Dictionary) -> String: return "红色Toast: 注册请求过于频繁,请稍后再试" 500: return "红色Toast: 注册失败" + 503: + return "红色Toast: 系统维护中" return "未知响应" diff --git a/tests/auth/enhanced_toast_test.gd b/tests/auth/enhanced_toast_test.gd new file mode 100644 index 0000000..fe649de --- /dev/null +++ b/tests/auth/enhanced_toast_test.gd @@ -0,0 +1,251 @@ +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系统测试通过") \ No newline at end of file diff --git a/tests/auth/enhanced_toast_test.gd.uid b/tests/auth/enhanced_toast_test.gd.uid new file mode 100644 index 0000000..a8fad20 --- /dev/null +++ b/tests/auth/enhanced_toast_test.gd.uid @@ -0,0 +1 @@ +uid://bvj6se7hmpb88