# 可支配收入数据填报 — 测试用例

> 依据：`可支配收入数据填报功能需求.md`、`可支配收入数据填报技术方案.md`  
> **接口 Base Path**：`/dataModel/disposableIncome`  
> **建表**：执行 `sql/biz_disposable_income.sql`

**通用前置**：已登录且具备模块权限；测试库无冲突年份数据或已隔离。

---

## 一、单元测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ZCZX-KZPMSR-UT-001 | 增幅增速 | 未填时按公式补齐 | 单元测试 | JUnit5 | 可选填+公式 | 本年 13346、上年 11886 | `fillMissingGrowth` | 增幅=1460；增速=12.28 |
| ZCZX-KZPMSR-UT-002 | 增幅增速 | 已填保留手工值 | 单元测试 | JUnit5 | 不覆盖 | 已填增幅/增速 | `fillMissingGrowth` | 仍为手工值 |
| ZCZX-KZPMSR-UT-003 | 增幅增速 | 无上年数据 | 单元测试 | JUnit5 | 首年 | previous=null | `fillMissingGrowth` | 增幅、增速仍为 null |
| ZCZX-KZPMSR-UT-004 | 增幅增速 | 上年为 0 | 单元测试 | JUnit5 | 除零保护 | 上年可支配收入=0 | `fillMissingGrowth` | 仅补齐增幅；增速仍 null |
| ZCZX-KZPMSR-UT-005 | 增幅增速 | 强制重算覆盖手工值 | 单元测试 | JUnit5 | 口径变更 | 已有手工增幅增速 | `recalculateGrowth` | 按公式覆盖为新值 |
| ZCZX-KZPMSR-UT-006 | 校验 | 必填年份 | 单元测试 | JUnit5 | 保存校验 | 缺 `statYear` | `validateRowForSave` | 抛 `ServiceException` |
| ZCZX-KZPMSR-UT-007 | 校验 | 非法年份 | 单元测试 | JUnit5 | 年份范围 | `statYear=1999` | `validateRowForSave` | 抛「所属年份不在可选范围内」 |
| ZCZX-KZPMSR-UT-008 | 校验 | 负收入拒绝 | 单元测试 | JUnit5 | 非负约束 | 可支配收入=-1 | `validateRowForSave` | 抛 `ServiceException` |
| ZCZX-KZPMSR-UT-009 | 校验 | 备注超长 | 单元测试 | JUnit5 | 长度限制 | remark 长度>500 | `validateRowForSave` | 抛「备注不能超过500字」 |
| ZCZX-KZPMSR-UT-010 | 校验 | 合法保存 | 单元测试 | JUnit5 | 正向 | 本年合法数据 | `validateRowForSave` | 不抛异常 |

对应代码：`DisposableIncomeGrowthSupportTest`、`DisposableIncomeValidationTest`

---

## 二、接口测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ZCZX-KZPMSR-API-001 | 列表 | 默认分页 | 接口测试 | Postman | 列表 | 有样本 | `GET /list` | `code=200`；含年份、可支配收入、增幅、增速、人均纯收入 |
| ZCZX-KZPMSR-API-002 | 列表 | 按年份筛选 | 接口测试 | Postman | 搜索 | 多年数据 | `statYear=2025` | 仅 2025 |
| ZCZX-KZPMSR-API-003 | 列表 | 展示落库增幅增速 | 接口测试 | Postman | 落库展示 | 记录已含增幅增速 | `GET /list` | 返回库中增幅、增速（可为 null） |
| ZCZX-KZPMSR-API-004 | 详情 | 全字段 | 接口测试 | Postman | 详情 | 有效 id | `GET /{id}` | 含收入字段与增幅、增速 |
| ZCZX-KZPMSR-API-005 | 新增 | 必填成功 | 接口测试 | Postman | 新增 | 该年无记录 | `POST` 含年份+两项收入 | 成功；有上年时自动补增幅增速 |
| ZCZX-KZPMSR-API-005a | 新增 | 手工填增幅增速 | 接口测试 | Postman | 可选填 | 有上年 | `POST` 同时传自定义增幅增速 | 成功；保留手工值 |
| ZCZX-KZPMSR-API-006 | 新增 | 缺年份 | 接口测试 | Postman | 校验 | 已登录 | 缺 `statYear` | 失败 |
| ZCZX-KZPMSR-API-007 | 新增 | 缺可支配收入 | 接口测试 | Postman | 校验 | 已登录 | 缺 `ruralDisposableIncome` | 失败 |
| ZCZX-KZPMSR-API-008 | 新增 | 重复年份 | 接口测试 | Postman | 唯一键 | 已有同年记录 | 再 `POST` 同年 | 失败「该年份数据已存在」 |
| ZCZX-KZPMSR-API-009 | 修改 | 更新收入 | 接口测试 | Postman | 强制重算 | 有效 id 且存在上年 | `PUT` 改可支配收入 | 成功；增幅增速按新收入重算 |
| ZCZX-KZPMSR-API-009a | 修改 | 改年份重算 | 接口测试 | Postman | 强制重算 | 已有 2021、2026 | 将 2026 改为 2022 | 成功；按相对 2021 重算增幅增速 |
| ZCZX-KZPMSR-API-010 | 修改 | 改到已有年份 | 接口测试 | Postman | 唯一键 | 存在 2024、2025 | 将 2025 的年份改为 2024 | 失败 |
| ZCZX-KZPMSR-API-011 | 删除 | 物理删除 | 接口测试 | Postman | 删除 | 有效 id | `DELETE /{id}` | 记录移除；再查 404/空 |
| ZCZX-KZPMSR-API-012 | 下拉 | 年份选项 | 接口测试 | Postman | 下拉 | 已登录 | `GET /yearOptions` | 当前年起向前 5 年共 6 个 |
| ZCZX-KZPMSR-API-013 | 权限 | 无 add | 接口测试 | Postman | 权限 | 仅 list | `POST /` | 403 |
| ZCZX-KZPMSR-API-014 | 权限 | 无 remove | 接口测试 | Postman | 权限 | 无 remove | `DELETE /{id}` | 403 |
| ZCZX-KZPMSR-API-015 | 端到端 | 增-查-改-删 | 接口测试 | Postman | 闭环 | 空库该年 | 新增→list→详情→修改→删除 | 各步数据一致 |

---

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

**工具**：Playwright / 手工均可。

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ZCZX-KZPMSR-UI-001 | 列表 | 列展示 | 界面测试 | Chrome | 列表 | 有数据 | 打开页面 | 显示年份、可支配收入、增幅、增速、人均纯收入 |
| ZCZX-KZPMSR-UI-001a | 列表 | null 显示为 0 | 界面测试 | Chrome | 展示规则 | 增幅或增速库中为 null | 打开列表/详情 | 增幅显示 `0.00`，增速显示 `0.00%` |
| ZCZX-KZPMSR-UI-002 | 列表 | 年份筛选 | 界面测试 | Chrome | 搜索 | 有多年数据 | 选年份→搜索 | 仅该年 |
| ZCZX-KZPMSR-UI-003 | 新增 | 默认本年 | 界面测试 | Chrome | 默认值 | 已登录 | 点新增 | 年份默认当前年；增幅、增速输入框为空（选填） |
| ZCZX-KZPMSR-UI-004 | 新增 | 保存成功 | 界面测试 | Chrome | 新增 | 该年无数据 | 填两项收入→确定 | 提示成功；有上年则列表显示自动增幅增速 |
| ZCZX-KZPMSR-UI-004a | 新增 | 手工填增幅增速 | 界面测试 | Chrome | 可选填 | 已登录 | 填写增幅、增速后保存 | 列表展示手工值 |
| ZCZX-KZPMSR-UI-005 | 新增 | 必填校验 | 界面测试 | Chrome | 校验 | 打开新增 | 不填收入直接确定 | 表单校验提示 |
| ZCZX-KZPMSR-UI-006 | 详情 | 只读含增幅增速 | 界面测试 | Chrome | 详情 | 有上年数据 | 点查看 | 展示增幅、增速（百分比） |
| ZCZX-KZPMSR-UI-007 | 修改 | 编辑回填 | 界面测试 | Chrome | 修改 | 有效行 | 点编辑 | 表单回填；null 的增幅增速保持空，不显示成 0 |
| ZCZX-KZPMSR-UI-007a | 修改 | 改年份重算 | 界面测试 | Chrome | 强制重算 | 已有 2021 与 2026 | 编辑 2026→改年份为 2022→保存 | 列表增幅增速按相对 2021 计算 |
| ZCZX-KZPMSR-UI-008 | 删除 | 确认删除 | 界面测试 | Chrome | 删除 | 有效行 | 点删除→确认 | 行消失 |
| ZCZX-KZPMSR-UI-009 | 范围 | 无导入导出按钮 | 界面测试 | Chrome | 需求边界 | 有权限 | 查看工具栏 | 无导入、导出入口 |

---

## 四、修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 首版：CRUD + 增幅/增速计算；无导入导出用例 |
| 1.1 | 增幅、增速改为可选填落库；未填按公式补齐 |
| 1.2 | 补充改年份强制重算、null 界面显示为 0、表单空值不落 0 等用例 |
