# 共同富裕成果 — 测试用例

> 依据：`共同富裕成果功能需求.md`、`共同富裕成果技术方案.md`  
> **接口 Base Path（示例）**：`/commonProsperity/achievement`；若含 `context-path` 或网关前缀须补齐。鉴权与若依一致（Cookie / Token）。

**通用前置（无特殊说明）**：具备本模块菜单与按钮权限的账号已登录。**统计范围**：`YYYY-MM`（如 `2026-05`），同月**不可重复**。**比率字段**（数字平台使用率、品牌产品溢价率）：**0～1**（如 `0.85` 表示 85%）。**整数项**（人数、个数等）：非负整数。**金额/面积**：≥ 0，建议最多 2 位小数。

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

---

## 一、单元测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| GTFY-CG-UT-001 | 参数校验 | 统计范围格式 | 单元测试 | JUnit5 | YYYY-MM | 无 | `2026-05` 通过；`2026-13`、`202605`、`2026/05`、空 失败 | 与 §3.4 一致 |
| GTFY-CG-UT-002 | 参数校验 | 统计范围唯一 | 单元测试 | JUnit5 | §5.1 | 库中已有 `2026-01` | 新增同 `statPeriod` | 失败；提示月份已存在 |
| GTFY-CG-UT-003 | 参数校验 | 集体经济收入 | 单元测试 | JUnit5 | ≥0，2 位小数 | 无 | -1、0、0.01、999999.99、三位小数 | 负/三位小数失败；0 及合法正数通过 |
| GTFY-CG-UT-004 | 参数校验 | 整数项非负 | 单元测试 | JUnit5 | 人数/个数 | 无 | `employmentDrivenCount` 为 -1、1.5、0、100 | 负/小数失败；0、100 通过 |
| GTFY-CG-UT-005 | 参数校验 | 绿化面积 | 单元测试 | JUnit5 | ≥0 可小数 | 无 | `newGreenArea` 为 -0.1、0、12.5 | 负失败；0、12.5 通过 |
| GTFY-CG-UT-006 | 参数校验 | 数字平台使用率 | 单元测试 | JUnit5 | [0,1] | 无 | -0.01、0、0.85、1、1.01 | 越界失败；0、0.85、1 通过 |
| GTFY-CG-UT-007 | 参数校验 | 品牌产品溢价率 | 单元测试 | JUnit5 | [0,1] | 无 | 同 UT-006 规则 | 与 UT-006 一致 |
| GTFY-CG-UT-008 | 参数校验 | 必填项非空 | 单元测试 | JUnit5 | §5.1 全必填 | 无 | 缺 `statPeriod` 或任一整数字段 null | 失败 |
| GTFY-CG-UT-009 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常登记 | 合法实体、月份未占用 | `insert(...)` | 各指标与入参一致；无发布状态字段 |
| GTFY-CG-UT-010 | Service | 修改排除自身查重 | 单元测试 | JUnit5+Mockito | §5.3 | id=1 为 `2026-01`；存在 `2026-02` | 将 id=1 改为 `2026-02` | 失败（与 id=2 冲突） |
| GTFY-CG-UT-011 | Service | 修改同月保留 | 单元测试 | JUnit5+Mockito | 不改月份 | id=1 `2026-01` | 改收入仍 `2026-01` | 成功 |
| GTFY-CG-UT-012 | Service | 删除记录 | 单元测试 | JUnit5+Mockito | §5.4 | Mock Mapper | `deleteByIds([id])` | 调用删除；无附件清理 |
| GTFY-CG-UT-013 | Service | 列表按年筛选 SQL | 单元测试 | JUnit5 | statYear | 无 | 检查 XML：`statYear=2026` | 条件含 `2026-%` 或 `LEFT(stat_period,4)=2026` |
| GTFY-CG-UT-014 | Service | 列表排序 | 单元测试 | JUnit5 | 技术方案 | 无 | 检查 ORDER BY | `stat_period DESC`, `create_time DESC` |
| GTFY-CG-UT-015 | 修改守卫 | 无状态限制 | 单元测试 | JUnit5 | 台账 | 任意记录 | `canEdit(any)` 恒 true（若存在守卫） | 无「已发布不可改」类限制 |

---

## 二、接口测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| GTFY-CG-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录；有多月数据 | `GET /commonProsperity/achievement/list` | `rows`≤20；`statPeriod` 月份倒序 |
| GTFY-CG-API-002 | 列表 | 统计年份筛选 | 接口测试 | Postman | 按年 | 含 `2025-12`、`2026-03` | `statYear=2026` | 仅 `2026-xx` 记录 |
| GTFY-CG-API-003 | 列表 | 年份为空不过滤 | 接口测试 | Postman | 全量 | 已登录 | 不传 `statYear` | 含不同年份记录 |
| GTFY-CG-API-004 | 列表 | 无数据年份 | 接口测试 | Postman | 边界 | 已登录 | `statYear=1999` | `rows` 为空或 total=0 |
| GTFY-CG-API-005 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录；`2026-06` 未占用 | `POST` Body 全部必填合法 | `code` 成功；详情字段一致 |
| GTFY-CG-API-006 | 新增 | 统计范围重复 | 接口测试 | Postman | 唯一 | 已存在 `2026-01` | `POST` `statPeriod=2026-01` | 失败；`msg` 可区分；库中仍 1 条 |
| GTFY-CG-API-007 | 新增 | 统计范围格式非法 | 接口测试 | Postman | YYYY-MM | 已登录 | `statPeriod=2026-13` 或 `202605` | 失败 |
| GTFY-CG-API-008 | 新增 | 比率大于 1 | 接口测试 | Postman | [0,1] | 已登录 | `digitalPlatformUsageRate=1.2` | 失败 |
| GTFY-CG-API-009 | 新增 | 比率为负 | 接口测试 | Postman | [0,1] | 已登录 | `brandPremiumRate=-0.1` | 失败 |
| GTFY-CG-API-010 | 新增 | 整数项含小数 | 接口测试 | Postman | 整数 | 已登录 | `employmentDrivenCount=10.5` | 失败 |
| GTFY-CG-API-011 | 新增 | 收入为负 | 接口测试 | Postman | ≥0 | 已登录 | `collectiveEconomyIncome=-1` | 失败 |
| GTFY-CG-API-012 | 新增 | 边界比率 0 和 1 | 接口测试 | Postman | 闭区间 | 未占用两个月 | 分别新增 `rate=0`、`rate=1` 的两条 | 均成功 |
| GTFY-CG-API-013 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET /commonProsperity/achievement/{id}` | 含 12 项指标及审计字段 |
| GTFY-CG-API-014 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 |
| GTFY-CG-API-015 | 修改 | 合法修改指标 | 接口测试 | Postman | §5.3 | 已登录；有记录 | `PUT` 改 `collectiveEconomyIncome`、人数等 | 成功；详情已更新 |
| GTFY-CG-API-016 | 修改 | 改月冲突 | 接口测试 | Postman | 唯一 | A=`2026-01`、B=`2026-02` | 将 A 改为 `2026-02` | 失败 |
| GTFY-CG-API-017 | 修改 | 校验仍生效 | 接口测试 | Postman | 异常 | 已登录 | `PUT` 比率改为 2 | 失败；原数据不变 |
| GTFY-CG-API-018 | 删除 | 单条删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE .../achievement/{id}` | 成功；详情 404 |
| GTFY-CG-API-019 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录 | `DELETE id1,id2` | 均不可查 |
| GTFY-CG-API-020 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 已登录 | 新增→列表(statYear)→详情→改→删 | 全流程成功 |
| GTFY-CG-API-021 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../list` | 401 或统一未登录 |
| GTFY-CG-API-022 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list | `POST .../achievement` | 无权限失败 |
| GTFY-CG-API-023 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发重复月份、比率越界 | `code`、`msg` 可区分 |
| GTFY-CG-API-024 | 导出 | 按年导出（可选） | 接口测试 | Postman | §3.6 | 有 export 权限 | `POST .../export`+`statYear=2026` | 文件仅含 2026 年数据 |

---

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

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

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| GTFY-CG-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录；数据>20 | 进入「共同富裕成果」 | 每页 20；统计范围月份新在前 |
| GTFY-CG-UI-002 | 列表 | 统计年份筛选 | UI 测试 | Playwright+Chrome | statYear | 含 2025、2026 数据 | 选年份 `2026`→查询 | 仅显示 `2026-xx` |
| GTFY-CG-UI-003 | 列表 | 重置筛选 | UI 测试 | Playwright+Chrome | 恢复 | 已按年筛选 | 重置 | 年份清空；显示全部 |
| GTFY-CG-UI-004 | 列表 | 操作按钮 | UI 测试 | Playwright+Chrome | §6 | 有数据 | 查看操作列 | 查看/编辑/删除可见（按权限） |
| GTFY-CG-UI-005 | 新增 | 合法全指标提交 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→选统计月份→填全部指标→确定 | 成功；列表出现该行 |
| GTFY-CG-UI-006 | 新增 | 统计范围必选 | UI 测试 | Playwright+Chrome | 必填 | 已登录 | 不选月份→提交 | 校验失败 |
| GTFY-CG-UI-007 | 新增 | 重复月份 | UI 测试 | Playwright+Chrome | 唯一 | 已有 `2026-01` | 再新增 `2026-01` | 提示月份已存在 |
| GTFY-CG-UI-008 | 新增 | 比率超 1 | UI 测试 | Playwright+Chrome | 0～1 | 已登录 | 使用率填 `1.2`→提交 | 校验失败 |
| GTFY-CG-UI-009 | 新增 | 整数项填小数 | UI 测试 | Playwright+Chrome | 整数 | 已登录 | 带动就业人数 `10.5`→提交 | 校验失败 |
| GTFY-CG-UI-010 | 新增 | 收入为负 | UI 测试 | Playwright+Chrome | ≥0 | 已登录 | 集体经济收入 `-1`→提交 | 校验失败 |
| GTFY-CG-UI-011 | 新增 | 比率边界 0/1 | UI 测试 | Playwright+Chrome | 闭区间 | 两个未占用月 | 分别填 0 和 1 提交 | 均成功 |
| GTFY-CG-UI-012 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 12 项指标+审计信息齐全 |
| GTFY-CG-UI-013 | 详情 | 比率展示格式 | UI 测试 | Playwright+Chrome | 展示约定 | 使用率 0.85 | 查看详情 | 显示为 0.85 或 85%（与产品一致） |
| GTFY-CG-UI-014 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改收入/人数→保存 | 列表/详情已更新 |
| GTFY-CG-UI-015 | 修改 | 改月冲突 | UI 测试 | Playwright+Chrome | 唯一 | 已有 01、02 月 | 将 01 月改为 02 月保存 | 失败提示 |
| GTFY-CG-UI-016 | 修改 | 清空必填失败 | UI 测试 | Playwright+Chrome | 校验 | 有记录 | 清空某必填整数项→保存 | 校验失败 |
| GTFY-CG-UI-017 | 删除 | 单条确认删除 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 行消失 |
| GTFY-CG-UI-018 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 行仍在 |
| GTFY-CG-UI-019 | 删除 | 批量删除 | UI 测试 | Playwright+Chrome | 批量 | 多条 | 勾选→批量删→确认 | 选中均消失 |
| GTFY-CG-UI-020 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→按年查→详情→改→删 | 全流程成功 |
| GTFY-CG-UI-021 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §8 | 无 add/edit/remove | 登录进模块 | 无对应按钮或操作拒绝 |
| GTFY-CG-UI-022 | 导出 | 按年导出（可选） | UI 测试 | Playwright+Chrome | export | 有导出权限 | 选年→点导出 | 下载文件且数据为所选年 |
| GTFY-CG-UI-023 | 表单 | 月份选择器 | UI 测试 | Playwright+Chrome | YYYY-MM | 已登录 | 新增打开月份控件 | 仅能选到月；提交值为 `YYYY-MM` |
| GTFY-CG-UI-024 | 错误提示 | 业务失败可读 | UI 测试 | Playwright+Chrome | §7 | 已登录 | 触发重复月提交 | Message 含明确原因 |

---

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

- 安装：`npm i -D @playwright/test`；`npx playwright install chromium`；本机 Chrome：`channel: 'chrome'`。  
- 菜单：`getByText('共同富裕成果')` 或 `goto('/commonProsperity/achievement')`（以实际路由为准）。  
- 统计年份：筛选区 `el-select` 或年份输入；统计范围表单用 `type="month"` 的 date-picker（若依 `value-format="yyyy-MM"`）。  
- 比率输入：对数字输入框 `fill('1.2')` 后点确定，断言错误提示。

---

## 覆盖对照

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

---

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

| 需求章节 | 要点 | 主要对应用例 |
| --- | --- | --- |
| §5.1 新增 | 12 项必填、YYYY-MM、整数/比率/金额规则、月唯一 | UT-001～010；API-005～012；UI-005～011 |
| §5.2 列表 | statYear、分页、月份倒序 | API-001～004；UI-001～003 |
| §5.3 修改 | 全字段可改、改月查重 | UT-010～011；API-015～017；UI-014～016 |
| §5.4 删除 | 确认、批量 | UT-012；API-018～019；UI-017～019 |
| §5.5 详情 | 全指标展示 | API-013～014；UI-012～013 |
| §6 矩阵 | 无发布状态 | UT-015；无发布/下架用例 |
| §7 错误约定 | code/msg | API-023；UI-024 |

---

## 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：单元 15、接口 24、UI 24；台账无发布态；Playwright+Chrome；Base `/commonProsperity/achievement` |
