# 疫情上报 — 测试用例

> 依据：`疫情上报功能需求.md`、`疫情上报技术方案.md`  
> **接口 Base Path（示例）**：`/diseaseDetection/epidemicReport`；若含 `context-path` 或网关前缀须补齐。鉴权与若依一致（Cookie / Token）。

**通用前置（无特殊说明）**：具备本模块菜单与按钮权限的账号已登录。**枚举**：传播途径/疫病类型 `1～4`，风险等级 `1～3`（见技术方案 §2.3）。**处置状态**：`release_date` 为空=未解除（`relieveStatus=0`）；非空=已解除（`relieveStatus=1`）。**解除日期**仅能通过「解除」接口写入，且须 **≥ 上报日期**。

**界面（UI）测试**：借助 **Playwright** 启动 **Chromium**（与 **Google Chrome 同源内核**）；可配置 `channel: 'chrome'` 调用本机已安装的谷歌浏览器。

---

## 一、单元测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| YQSB-UT-001 | 参数校验 | 传播途径枚举 | 单元测试 | JUnit5 | 1～4 | 无 | 传 1、4、0、5 | 1、4 通过；0、5 失败 |
| YQSB-UT-002 | 参数校验 | 疫病类型枚举 | 单元测试 | JUnit5 | 1～4 | 无 | 传 1、4、9 | 1、4 通过；9 失败 |
| YQSB-UT-003 | 参数校验 | 风险等级枚举 | 单元测试 | JUnit5 | 1～3 | 无 | 传 1、3、4 | 1、3 通过；4 失败 |
| YQSB-UT-004 | 参数校验 | 上报日期格式 | 单元测试 | JUnit5 | YYYY-MM-DD | 无 | `2026-05-01` 通过；`20260501`、空 失败 | 与 §3.4 一致 |
| YQSB-UT-005 | 参数校验 | 涉疫轨迹长度 | 单元测试 | JUnit5 | 1～500 字 | 无 | 空串、1 字、501 字 | 空/超长失败；合法通过 |
| YQSB-UT-006 | 参数校验 | 疫病名称长度 | 单元测试 | JUnit5 | 1～50 字 | 无 | 空、51 字 | 失败；1～50 通过 |
| YQSB-UT-007 | 解除校验 | 解除不早于上报 | 单元测试 | JUnit5 | §5.6 | 上报日 `2026-05-10` | 解除日 `2026-05-09` / `2026-05-10` | 早于失败；等于或晚于通过 |
| YQSB-UT-008 | 状态守卫 | 可编辑判定 | 单元测试 | JUnit5 | 未解除可改 | `release_date=null` / 非空 | `canEdit(entity)` | 前者 true；后者 false |
| YQSB-UT-009 | 状态守卫 | 可解除判定 | 单元测试 | JUnit5 | §5.6 | 同上 | `canRelieve(entity)` | 前者 true；后者 false |
| YQSB-UT-010 | Service | 新增不写解除日 | 单元测试 | JUnit5+Mockito | §3.3.1 | 合法 Body 含 `releaseDate` | `insert` 前清洗字段 | 落库 `release_date` 为 NULL |
| YQSB-UT-011 | Service | 解除更新日期 | 单元测试 | JUnit5+Mockito | relieve | 未解除记录 id=1 | `relieve(1, 2026-06-01)` | `release_date` 更新；`relieveStatus=1` |
| YQSB-UT-012 | Service | 已解除禁止修改 | 单元测试 | JUnit5+Mockito | §5.3 | 已解除记录 | `update(...)` | 抛业务异常或返回失败 |
| YQSB-UT-013 | Service | 重复解除 | 单元测试 | JUnit5+Mockito | §5.6 | 已解除记录 | 再次 `relieve` | 失败 |
| YQSB-UT-014 | Service | 列表筛选 SQL | 单元测试 | JUnit5 | §3.1.1 | 无 | `transmissionRoute=2`、`riskLevel=1` | XML 含精确条件 |
| YQSB-UT-015 | Service | 列表排序 | 单元测试 | JUnit5 | 技术方案 | 无 | 检查 ORDER BY | `report_date DESC`, `create_time DESC` |
| YQSB-UT-016 | 派生字段 | relieveStatus | 单元测试 | JUnit5 | 0/1 | release 空/非空 | `toVo(entity)` | 0 或 1 与日期一致 |

---

## 二、接口测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| YQSB-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录；有多条 | `GET .../epidemicReport/list` | `rows`≤20；`reportDate` 倒序 |
| YQSB-API-002 | 列表 | 传播途径筛选 | 接口测试 | Postman | 精确 | 含途径 1、2 各一条 | `transmissionRoute=2` | 仅途径 2 |
| YQSB-API-003 | 列表 | 风险等级筛选 | 接口测试 | Postman | 精确 | 含高、中危 | `riskLevel=1` | 仅高危 |
| YQSB-API-004 | 列表 | 处置状态筛选 | 接口测试 | Postman | relieveStatus | 含未解除、已解除 | `relieveStatus=0` / `1` | 分别仅对应状态 |
| YQSB-API-005 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录 | `POST` 全部必填合法（枚举 1～4/1～3） | 成功；`releaseDate` 为空；`relieveStatus=0` |
| YQSB-API-006 | 新增 | 非法枚举 | 接口测试 | Postman | §3.4 | 已登录 | `transmissionRoute=9` | 失败 |
| YQSB-API-007 | 新增 | 必填缺失 | 接口测试 | Postman | 必填 | 已登录 | 缺 `epidemicName` | 失败 |
| YQSB-API-008 | 新增 | 轨迹超长 | 接口测试 | Postman | 500 字 | 已登录 | `affectedLocationTrack` 501 字 | 失败 |
| YQSB-API-009 | 新增 | 携带解除日被忽略 | 接口测试 | Postman | §3.3.1 | 已登录 | `POST` 带 `releaseDate` | 成功；详情 `releaseDate` 仍空 |
| YQSB-API-010 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET .../epidemicReport/{id}` | 含业务字段与 `relieveStatus` |
| YQSB-API-011 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 |
| YQSB-API-012 | 修改 | 未解除合法修改 | 接口测试 | Postman | §5.3 | 未解除记录 | `PUT` 改 `epidemicName`、途径等 | 成功；详情已更新 |
| YQSB-API-013 | 修改 | 已解除禁止修改 | 接口测试 | Postman | §5.3 | 已解除记录 | `PUT` 任意字段 | 失败；数据不变 |
| YQSB-API-014 | 修改 | 不可带解除日 | 接口测试 | Postman | §3.3.1 | 未解除 | `PUT` 带 `releaseDate` | 忽略或失败；不以修改写入解除 |
| YQSB-API-015 | 解除 | 合法解除 | 接口测试 | Postman | §5.6 | 未解除；上报 `2026-05-01` | `PUT .../relieve` `releaseDate=2026-05-20` | 成功；`relieveStatus=1` |
| YQSB-API-016 | 解除 | 早于上报日 | 接口测试 | Postman | 日期约束 | 未解除；上报 `2026-05-10` | `releaseDate=2026-05-09` | 失败 |
| YQSB-API-017 | 解除 | 重复解除 | 接口测试 | Postman | §5.6 | 已解除 | 再次 `PUT .../relieve` | 失败 |
| YQSB-API-018 | 删除 | 未解除删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE .../{id}` | 成功；详情不可查 |
| YQSB-API-019 | 删除 | 已解除删除 | 接口测试 | Postman | §5.4 | 已解除记录 | `DELETE .../{id}` | 成功 |
| YQSB-API-020 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 多条 | `DELETE id1,id2` | 均不可查 |
| YQSB-API-021 | 端到端 | 上报至解除 | 接口测试 | Postman | §4 | 已登录 | 新增→列表→详情→改→解除→再改/再解除 | 解除前改成功；解除后改/解除失败 |
| YQSB-API-022 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../list` | 401 或统一未登录 |
| YQSB-API-023 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list | `POST` / `PUT relieve` | 无权限失败 |
| YQSB-API-024 | 响应 | 失败可读 | 接口测试 | Postman | §8 | 已登录 | 触发 API-013、016、017 | `code`、`msg` 可区分 |

---

## 三、界面测试用例（UI）

**测试工具**：**Playwright** + **Chromium**（`channel: 'chrome'` 使用本机 **Google Chrome**）。

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| YQSB-UI-001 | 列表 | 默认加载排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录；有数据 | 进入「疫情上报」 | 分页默认 20；上报日期新在前 |
| YQSB-UI-002 | 列表 | 传播途径筛选 | UI 测试 | Playwright+Chrome | 精确 | 含多种途径 | 选「本地扩散」→查询 | 仅对应行 |
| YQSB-UI-003 | 列表 | 风险等级筛选 | UI 测试 | Playwright+Chrome | 精确 | 含高/中/低 | 选「高危」→查询 | 仅高危 |
| YQSB-UI-004 | 列表 | 重置筛选 | UI 测试 | Playwright+Chrome | 恢复 | 已筛选 | 重置 | 条件清空；显示全部 |
| YQSB-UI-005 | 列表 | 未解除操作列 | UI 测试 | Playwright+Chrome | §6 | 未解除行 | 查看操作列 | 查看、编辑、解除、删除可见（按权限） |
| YQSB-UI-006 | 列表 | 已解除操作列 | UI 测试 | Playwright+Chrome | §6 | 已解除行 | 查看操作列 | 仅查看、删除；无编辑、解除 |
| YQSB-UI-007 | 新增 | 合法提交 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填全部字段→确定 | 成功；列表出现；处置「未解除」 |
| YQSB-UI-008 | 新增 | 必填校验 | UI 测试 | Playwright+Chrome | 必填 | 已登录 | 漏选传播途径或空轨迹→提交 | 校验失败 |
| YQSB-UI-009 | 新增 | 无解除日字段 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 打开新增表单 | 无解除日期录入项 |
| YQSB-UI-010 | 编辑 | 未解除修改成功 | UI 测试 | Playwright+Chrome | §5.3 | 未解除行 | 编辑→改疫病名称→保存 | 列表/详情已更新 |
| YQSB-UI-011 | 编辑 | 已解除无入口 | UI 测试 | Playwright+Chrome | §5.3 | 已解除行 | 查列表/详情 | 无「编辑」按钮 |
| YQSB-UI-012 | 解除 | 弹窗合法解除 | UI 测试 | Playwright+Chrome | §5.6 | 未解除；上报日已知 | 解除→选≥上报日的日期→确认 | 成功；状态已解除；显示解除日 |
| YQSB-UI-013 | 解除 | 早于上报日 | UI 测试 | Playwright+Chrome | 日期约束 | 未解除 | 解除日选早于上报日→确认 | 校验失败或提示 |
| YQSB-UI-014 | 解除 | 取消确认 | UI 测试 | Playwright+Chrome | 确认框 | 未解除 | 解除→取消 | 仍为未解除 |
| YQSB-UI-015 | 解除 | 已解除无按钮 | UI 测试 | Playwright+Chrome | §5.6 | 已解除行 | 查看操作列 | 无「解除」 |
| YQSB-UI-016 | 删除 | 单条确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 任意行 | 删除→确认 | 行消失 |
| YQSB-UI-017 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 多条 | 勾选→批量删→确认 | 选中均消失 |
| YQSB-UI-018 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 含途径、类型、名称、等级、轨迹、处置状态、解除日 |
| YQSB-UI-019 | 端到端 | 全流程 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→筛选→编辑→解除→验证不可再编 | 与需求矩阵一致 |
| YQSB-UI-020 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §9 | 无 add/edit/relieve/remove | 登录进模块 | 无对应按钮或操作拒绝 |
| YQSB-UI-021 | 错误提示 | 业务失败可读 | UI 测试 | Playwright+Chrome | §8 | 已登录 | 对已解除点编辑（若可直链）或解除日非法 | Message 含明确原因 |

---

## Playwright 与谷歌浏览器（实施提示）

- 安装：`npm i -D @playwright/test`；`npx playwright install chromium`；配置 `use: { channel: 'chrome' }`。  
- 导航：`page.getByText('疫情上报')` 或 `goto('/diseaseDetection/epidemicReport')`（以实际路由为准）。  
- 筛选：`el-select` 选传播途径/风险等级后点「搜索」。  
- 解除：行内「解除」→ 弹窗 `el-date-picker` → 确定；断言行内「已解除」或 `releaseDate` 列有值。  
- 操作列：对 `relieveStatus=0` 行 `expect(editBtn).toBeVisible()`；对已解除 `expect(relieveBtn).toHaveCount(0)`。

---

## 覆盖对照

| 类别 | 单元 UT | 接口 API | 界面 UI |
| --- | --- | --- | --- |
| 正常流程 | UT-010～011、014～016 | API-001～005、010～012、015、018～021 | UI-001～007、010、012、016～019 |
| 异常流程 | UT-001～007、012～013 | API-006～009、011、013、016～017、022～024 | UI-008、013～014、021 |
| 业务约束 | UT-008～009、007 | API-004、009、013～017 | UI-005～006、009、011、015 |

---

## 功能需求追溯（自查）

| 需求章节 | 要点 | 主要对应用例 |
| --- | --- | --- |
| §5.1 新增 | 六字段必填、无解除日 | UT-001～006、010；API-005～009；UI-007～009 |
| §5.2 列表 | 途径/等级筛选、排序 | UT-014～015；API-001～004；UI-001～004 |
| §5.3 修改 | 仅未解除 | UT-008、012；API-012～014；UI-010～011 |
| §5.4 删除 | 均可删 | API-018～020；UI-016～017 |
| §5.5 详情 | 全字段 | API-010；UI-018 |
| §5.6 解除 | 日期、不可重复 | UT-007、009、011、013；API-015～017；UI-012～015 |
| §6 矩阵 | 操作按钮 | UT-008～009；API-013、017；UI-005～006、011、015 |
| §8 错误 | code/msg | API-024；UI-021 |

---

## 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：单元 16、接口 24、UI 21；处置状态由 release_date 推导；Playwright+Chrome；Base `/diseaseDetection/epidemicReport` |
