# {模块名称} - 测试场景文档

> **module**: {模块名}
> **doc_type**: TestScenarios
> **status**: Draft / Review / Active
> **owner**: {负责人}
> **upstream_docs**: 01-prd.md, 04-state-machine.md, 07-api.md, 08-error-codes.md
> **last_verified**: YYYY-MM-DD
>
> **用途**: 定义"测什么"——场景清单与覆盖面，供 L1 集成测试和 L2 E2E 共同参考

---

## 场景总览

| 场景ID | 类型 | 描述 | 优先级 |
|--------|------|------|--------|
| TC-001 | 正常 | {一句话描述} | P0 |
| TC-002 | 异常 | {一句话描述} | P0 |
| TC-003 | 权限 | {一句话描述} | P0 |
| TC-004 | 边界 | {一句话描述} | P1 |

---

## 场景详情

### 正常场景

#### TC-001: {场景描述}

| 项目 | 内容 |
|------|------|
| 前置条件 | {系统状态、测试数据} |
| 操作 | {API 调用或用户操作} |
| 输入 | `{ field1: "value", field2: 123 }` |
| 期望输出 | `201, body.id exists, body.status === "DRAFT"` |
| 清理 | {测试后需要清理的数据，如"删除创建的记录"} |

### 异常场景

#### TC-002: {场景描述}

| 项目 | 内容 |
|------|------|
| 前置条件 | {系统状态} |
| 操作 | {触发异常的操作} |
| 输入 | `{ field1: "invalid_value" }` |
| 期望输出 | `400, error.code === "{MODULE}_{CAT}_{SEQ}"` |

### 权限场景

#### TC-003: {场景描述}

| 项目 | 内容 |
|------|------|
| 角色 | {测试用的角色，如"普通员工"} |
| 操作 | {该角色无权执行的操作} |
| 期望输出 | `403, error.code === "FORBIDDEN"` |

### 边界场景

#### TC-004: {场景描述}

| 项目 | 内容 |
|------|------|
| 前置条件 | {边界条件描述} |
| 操作 | {操作} |
| 输入 | `{ field1: "" }` 或 `{ field1: null }` |
| 期望输出 | {期望行为} |

---

## 覆盖要求

- **正常场景**: 覆盖所有 P0 功能点的正常路径
- **异常场景**: 覆盖 `08-error-codes.md` 中定义的所有错误码的触发条件
- **权限场景**: 覆盖 `01-prd.md` 权限矩阵中所有"❌"的角色操作组合
- **边界场景**: 空值、超长、重复、并发等边界条件

> 场景 ID 全局唯一。输入/输出使用伪代码格式，让 test-backend skill 可以直接映射为测试断言。
