# 手动测试场景

## 用户旅程测试

### 场景 1: 新用户完整注册流程
1. **自动创建账户**
   ```bash
   curl -X POST http://localhost:3000/api/v1/user/auto-create \
     -H "Content-Type: application/json" \
     -d '{
       "deviceId": "manual-test-device-001",
       "deviceName": "iPhone 14 Pro",
       "provinceCode": "110000",
       "cityCode": "110100"
     }'
   ```
   - ✅ 返回 201
   - ✅ 获得 userId, accountSequence, referralCode, mnemonic
   - ✅ 获得 3 个钱包地址 (KAVA, DST, BSC)
   - ✅ 获得 accessToken 和 refreshToken
   - **保存 mnemonic 用于后续测试！**

2. **查看个人资料**
   ```bash
   curl -X GET http://localhost:3000/api/v1/user/my-profile \
     -H "Authorization: Bearer {accessToken}"
   ```
   - ✅ 返回正确的用户信息

3. **更新个人资料**
   ```bash
   curl -X PUT http://localhost:3000/api/v1/user/update-profile \
     -H "Authorization: Bearer {accessToken}" \
     -H "Content-Type: application/json" \
     -d '{
       "nickname": "测试用户",
       "avatarUrl": "https://example.com/avatar.jpg",
       "address": "北京市朝阳区测试路123号"
     }'
   ```
   - ✅ 更新成功
   - ✅ 再次查询个人资料，确认更新生效

4. **查看设备列表**
   ```bash
   curl -X GET http://localhost:3000/api/v1/user/my-devices \
     -H "Authorization: Bearer {accessToken}"
   ```
   - ✅ 看到 1 个设备

### 场景 2: 多设备管理
5. **在新设备上使用助记词恢复**
   ```bash
   curl -X POST http://localhost:3000/api/v1/user/recover-by-mnemonic \
     -H "Content-Type: application/json" \
     -d '{
       "accountSequence": {accountSequence},
       "mnemonic": "{mnemonic}",
       "newDeviceId": "manual-test-device-002",
       "deviceName": "iPad Pro"
     }'
   ```
   - ✅ 返回新的 token
   - ✅ 钱包地址与第一个设备相同

6. **查看设备列表（使用新设备的 token）**
   - ✅ 看到 2 个设备

7. **移除旧设备**
   ```bash
   curl -X POST http://localhost:3000/api/v1/user/remove-device \
     -H "Authorization: Bearer {newAccessToken}" \
     -H "Content-Type: application/json" \
     -d '{
       "deviceId": "manual-test-device-001"
     }'
   ```
   - ✅ 移除成功
   - ✅ 使用旧设备的 token 无法再访问 API

### 场景 3: Token 管理
8. **等待 access token 过期（或修改过期时间为 1 分钟测试）**
   - ✅ 过期的 token 无法访问 API

9. **使用 refresh token 获取新的 access token**
   ```bash
   curl -X POST http://localhost:3000/api/v1/user/auto-login \
     -H "Content-Type: application/json" \
     -d '{
       "refreshToken": "{refreshToken}",
       "deviceId": "manual-test-device-002"
     }'
   ```
   - ✅ 获得新的 access token
   - ✅ 新 token 可以正常使用

### 场景 4: KYC 认证
10. **提交 KYC 信息**
    ```bash
    curl -X POST http://localhost:3000/api/v1/user/submit-kyc \
      -H "Authorization: Bearer {accessToken}" \
      -H "Content-Type: application/json" \
      -d '{
        "realName": "张三",
        "idCardNumber": "110101199001011234",
        "idCardFrontUrl": "https://example.com/id-front.jpg",
        "idCardBackUrl": "https://example.com/id-back.jpg"
      }'
    ```
    - ✅ 提交成功
    - ✅ 查看个人资料，确认 KYC 信息存在且身份证号已脱敏

### 场景 5: 推荐系统
11. **根据推荐码查询用户**
    ```bash
    curl -X GET http://localhost:3000/api/v1/user/by-referral-code/{referralCode}
    ```
    - ✅ 返回正确的账户信息

12. **使用推荐码注册新用户**
    ```bash
    curl -X POST http://localhost:3000/api/v1/user/auto-create \
      -H "Content-Type: application/json" \
      -d '{
        "deviceId": "manual-test-device-003",
        "deviceName": "Android Phone",
        "provinceCode": "110000",
        "cityCode": "110100",
        "inviterReferralCode": "{referralCode}"
      }'
    ```
    - ✅ 创建成功
    - ✅ 新用户的 inviterSequence 正确

## 边界测试

### 设备限制测试
- [ ] 添加 5 个设备 → 成功
- [ ] 尝试添加第 6 个设备 → 失败，提示设备数量限制
- [ ] 移除 1 个设备后 → 可以再添加 1 个

### 并发测试（手动）
- [ ] 两个设备同时使用同一个 refresh token → 只有一个成功
- [ ] 两个用户同时创建账户 → 账户序列号不重复
- [ ] 同一个推荐码被多人使用 → 都成功

### 异常处理测试
- [ ] 数据库连接断开 → 返回 500 错误
- [ ] Redis 连接断开 → SMS 验证码功能失败
- [ ] Kafka 连接断开 → 事件发布失败（但主流程成功）
- [ ] 网络超时 → 合理的超时提示

### 数据一致性测试
- [ ] 创建账户失败（如数据库错误）→ 账户序列号不会被消耗
- [ ] 添加设备失败（如超过限制）→ 数据库没有脏数据
- [ ] Token 生成失败 → 账户仍然创建成功，可以重新登录

## 真实环境测试

### 部署到测试环境
- [ ] Docker Compose 一键启动
- [ ] Kubernetes 部署
- [ ] 环境变量配置正确
- [ ] 数据库迁移成功
- [ ] 健康检查端点响应正常

### 监控和日志
- [ ] 日志正确输出到文件/控制台
- [ ] 错误日志包含堆栈信息
- [ ] 性能指标可以被 Prometheus 采集
- [ ] 日志可以被 ELK/Loki 采集

### 备份和恢复
- [ ] 数据库备份
- [ ] 数据恢复测试
- [ ] 灾难恢复演练
