Files
whale-town-front/tests/auth/enhanced_toast_test.gd
王浩 0b533189ec refactor:重构项目架构为分层结构
## 🏗️ 主要变更

### 目录结构重构
- 将 core/ 迁移到 _Core/(框架层)
- 将 scenes/ 重构为 Scenes/(玩法层)和 UI/(界面层)
- 将 data/ 迁移到 Config/(配置层)
- 添加 Assets/ 资源层和 Utils/ 工具层
- 将 scripts/ 迁移到 tools/(开发工具)

### 架构分层
- **_Core/**: 框架层 - 全局单例和管理器
- **Scenes/**: 玩法层 - 游戏场景和实体
- **UI/**: 界面层 - HUD、窗口、对话系统
- **Assets/**: 资源层 - 精灵图、音频、字体
- **Config/**: 配置层 - 游戏配置和本地化
- **Utils/**: 工具层 - 通用辅助脚本

### 文件更新
- 更新 project.godot 中的所有路径引用
- 更新自动加载脚本路径
- 更新测试文件的引用路径
- 添加 REFACTORING.md 详细说明
- 添加 MIGRATION_COMPLETE.md 迁移完成标记
- 更新 README.md 反映新架构

### 设计原则
-  清晰的分层(框架/玩法/界面)
-  场景内聚(脚本紧邻场景文件)
-  组件化设计(可复用组件)
-  职责单一(每个目录职责明确)

## 📋 详细信息
查看 REFACTORING.md 了解完整的重构说明和迁移映射表

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 11:36:01 +08:00

251 lines
8.5 KiB
GDScript
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.
extends GutTest
# 增强的Toast测试 - 验证新增的API响应处理
class_name EnhancedToastTest
# 测试新增的错误码处理
func test_new_error_codes():
var auth_scene = preload("res://UI/Windows/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系统测试通过")