# 🧪 栏目选择记忆功能测试指南

## 🎯 测试目标

验证栏目选择记忆功能是否按预期工作，确保用户体验的提升。

## 📋 测试准备

### 环境要求
- 浏览器支持 localStorage
- 已登录 CMS 系统
- 至少有 2-3 个不同的栏目可供选择

### 测试数据
- 栏目A：例如"技术文章"
- 栏目B：例如"产品动态"  
- 栏目C：例如"公司新闻"

## 🔬 详细测试用例

### 测试用例 1：首次使用记忆功能

**步骤：**
1. 清空浏览器 localStorage（可选，模拟首次使用）
2. 进入文章管理页面
3. 点击"添加文章"按钮
4. 观察栏目选择框的状态
5. 选择"栏目A"
6. 填写文章标题和内容
7. 保存文章

**预期结果：**
- 初始状态栏目选择框为空或显示默认值
- 选择栏目A后，系统应该记住这个选择
- 保存成功后，栏目A被保存到 localStorage

**验证方法：**
- 打开浏览器开发者工具
- 查看 Application > Local Storage
- 确认存在 `cms_article_last_category` 键，值为栏目A的ID

---

### 测试用例 2：记忆功能恢复

**步骤：**
1. 在测试用例1的基础上
2. 关闭添加文章弹窗
3. 重新点击"添加文章"按钮
4. 观察栏目选择框的状态

**预期结果：**
- 栏目选择框应该自动显示"栏目A"
- 用户无需重新选择栏目

**验证方法：**
- 确认栏目选择框的值确实是栏目A
- 确认这是自动填入的，不是用户手动选择的

---

### 测试用例 3：更换栏目记忆

**步骤：**
1. 在测试用例2的基础上
2. 将栏目从"栏目A"改为"栏目B"
3. 填写文章内容并保存
4. 重新打开添加文章弹窗

**预期结果：**
- 保存后，localStorage 中的值应该更新为栏目B的ID
- 重新打开弹窗时，应该显示"栏目B"

**验证方法：**
- 检查 localStorage 中的值是否已更新
- 确认新弹窗中显示的是栏目B

---

### 测试用例 4：从栏目页面添加文章

**步骤：**
1. 进入栏目管理页面
2. 找到"栏目C"，点击其"添加文章"按钮
3. 观察栏目选择框的状态
4. 填写文章内容并保存
5. 重新从文章管理页面点击"添加文章"

**预期结果：**
- 从栏目C页面打开的弹窗应该显示"栏目C"
- 保存后，记忆应该更新为栏目C
- 从文章管理页面重新打开时，应该显示栏目C

**验证方法：**
- 确认优先级策略正确工作
- 确认传入的栏目ID优先于记忆的栏目ID

---

### 测试用例 5：编辑文章不影响记忆

**步骤：**
1. 确保当前记忆的栏目是"栏目C"
2. 编辑一篇属于"栏目A"的现有文章
3. 修改文章内容（不修改栏目）
4. 保存文章
5. 重新打开添加文章弹窗

**预期结果：**
- 编辑时显示的栏目应该是文章原有的栏目A
- 保存后，记忆的栏目仍然是栏目C（不变）
- 新建文章时仍然显示栏目C

**验证方法：**
- 确认编辑操作不会影响栏目记忆
- 确认新增和编辑的逻辑完全独立

---

### 测试用例 6：跨会话持久化

**步骤：**
1. 确保当前记忆的栏目是"栏目C"
2. 完全关闭浏览器
3. 重新打开浏览器并登录系统
4. 点击"添加文章"按钮

**预期结果：**
- 栏目选择框应该仍然显示"栏目C"
- 记忆功能跨会话保持有效

**验证方法：**
- 确认 localStorage 数据在浏览器重启后仍然存在
- 确认功能正常恢复

---

### 测试用例 7：手动选择栏目的即时保存

**步骤：**
1. 打开添加文章弹窗
2. 当前显示栏目A，手动改为栏目B
3. 不保存文章，直接关闭弹窗
4. 重新打开添加文章弹窗

**预期结果：**
- 手动选择栏目B后，应该立即保存到记忆中
- 重新打开弹窗时应该显示栏目B
- 即使没有保存文章，栏目记忆也应该更新

**验证方法：**
- 确认栏目选择的 onChange 事件正确触发保存
- 确认不依赖文章保存就能更新记忆

---

## 🔍 边界情况测试

### 边界测试 1：清空栏目选择

**步骤：**
1. 打开添加文章弹窗（当前有记忆的栏目）
2. 点击栏目选择框的"清空"按钮
3. 观察系统行为

**预期结果：**
- 栏目选择框应该变为空
- 系统应该正常处理空值情况

### 边界测试 2：无效栏目ID

**步骤：**
1. 手动修改 localStorage 中的栏目ID为一个不存在的值
2. 刷新页面并打开添加文章弹窗
3. 观察系统行为

**预期结果：**
- 系统应该优雅地处理无效ID
- 栏目选择框应该显示为空或默认状态
- 不应该出现错误提示

### 边界测试 3：localStorage 不可用

**步骤：**
1. 禁用浏览器的 localStorage 功能
2. 尝试使用栏目记忆功能
3. 观察系统行为

**预期结果：**
- 系统应该正常工作，只是没有记忆功能
- 不应该出现 JavaScript 错误
- 功能应该优雅降级

---

## ✅ 测试检查清单

### 基础功能
- [ ] 首次选择栏目能够正确保存
- [ ] 重新打开弹窗能够正确恢复栏目
- [ ] 更换栏目能够正确更新记忆
- [ ] 手动选择栏目能够即时保存

### 优先级策略
- [ ] 从栏目页面添加文章时优先使用传入栏目
- [ ] 其他情况下使用记忆的栏目
- [ ] 编辑文章时不影响栏目记忆

### 持久化
- [ ] 关闭浏览器后重新打开仍然有效
- [ ] localStorage 数据格式正确
- [ ] 数据读写操作正常

### 用户体验
- [ ] 功能对用户透明，不干扰正常操作
- [ ] 栏目选择状态清晰可见
- [ ] 没有不必要的提示或干扰

### 错误处理
- [ ] 无效栏目ID的处理
- [ ] localStorage 不可用时的降级
- [ ] 空值和边界情况的处理

---

## 🎯 测试通过标准

所有测试用例都应该通过，特别是：

1. **核心功能正常**：记忆和恢复功能完全正常
2. **优先级正确**：各种场景下的栏目选择优先级符合预期
3. **数据持久化**：跨会话数据保持有效
4. **用户体验良好**：功能提升效率，不造成困扰
5. **错误处理完善**：边界情况和异常情况处理得当

通过这些测试，可以确保栏目选择记忆功能稳定可靠，真正提升用户的使用体验！
