# 商城服务协议 — 测试用例

> **依据：** 《商城服务协议功能需求.md》v1.0、《商城服务协议技术方案.md》v1.0  
> **范围：** 平台 GET/PUT；C 端 `GET /api/member/serviceAgreement`、`/status`；Facade 注册/登录校验；会员 `register`/`login` 对接；业务规则 **SP1～SP10**  
> **排除：** 协议历史版本、勾选存证、强制阅读时长、PDF、下单页二次协议、平台/商家后台登录  
> **环境：** RuoYi v3.9.2；平台 `/agri/mallServiceAgreement`；C 端 `/api/member/serviceAgreement`；Playwright · Chromium

---

## 用例编号说明

| 前缀 | 类型 | 工具 |
|------|------|------|
| MSA-UT-xxx | 单元测试 | JUnit 5 + Mockito |
| MSA-API-xxx | 接口测试 | Apifox / MockMvc |
| MSA-UI-xxx | 界面测试 | Playwright（Chromium） |

---

## 一、单元测试

### MSA-UT-001 协议标题为空拒绝保存

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 保存校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit + Mockito |
| **测试目的** | 验证 §5.2、SP5 |
| **前置条件** | — |
| **测试步骤** | `saveConfig(dto)`，`agreementTitle` 为空 |
| **预期结果** | `ServiceException`；msg「请输入协议标题」 |

### MSA-UT-002 启用时正文为空拒绝

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 保存校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP5 |
| **前置条件** | — |
| **测试步骤** | `enableFlag=1`，`content` 空 |
| **预期结果** | msg「启用状态下请填写协议内容」 |

### MSA-UT-003 启用时仅空白 HTML 拒绝

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | AgreementContentSupport |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 §5.2 |
| **前置条件** | — |
| **测试步骤** | `saveConfig`，`content=<p></p>` |
| **预期结果** | msg「协议内容不能为空」 |

### MSA-UT-004 禁用时正文可空保存成功

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 保存校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 §5.1 |
| **前置条件** | 合法标题 |
| **测试步骤** | `enableFlag=0`，`content` 空 → `saveConfig` |
| **预期结果** | 成功；`enable_flag=0` |

### MSA-UT-005 enable_flag 非法值拒绝

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 字段校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证仅 0/1 |
| **前置条件** | — |
| **测试步骤** | `enableFlag=2` |
| **预期结果** | 校验失败 |

### MSA-UT-006 无库记录 getConfig 返回默认空壳

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | getConfig |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 §4.2 |
| **前置条件** | Mapper 返回 null |
| **测试步骤** | `getConfig()` |
| **预期结果** | `configId=1`；`enableFlag=0` |

### MSA-UT-007 首次保存 insert config_id=1

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 单例写入 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP1 |
| **前置条件** | 表无记录 |
| **测试步骤** | `saveConfig` 合法 dto |
| **预期结果** | 仅 `insert`；`config_id=1` |

### MSA-UT-008 再次保存 update 不新增行

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 单例更新 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP1 |
| **前置条件** | 已有 config_id=1 |
| **测试步骤** | 修改标题后 `saveConfig` |
| **预期结果** | 仅 `update` |

### MSA-UT-009 getForApp 禁用 SP4 三标志为 false

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | getForApp |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP4、技术方案 §4.1 |
| **前置条件** | `enable_flag=0` |
| **测试步骤** | `getForApp()` |
| **预期结果** | `enabled=false`；`registrationOpen=false`；`requireAgreementOnLogin=false`；`message` 含「会员注册暂未开放」；**无** content |

### MSA-UT-010 getForApp 启用三标志为 true

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | getForApp |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证启用态 |
| **前置条件** | 启用且正文有效 |
| **测试步骤** | `getForApp()` |
| **预期结果** | `enabled/registrationOpen/requireAgreementOnLogin` 均为 true；含 checkboxLabel |

### MSA-UT-011 checkboxLabel 含版本号

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | checkboxLabel |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证文案规则 |
| **前置条件** | 标题+版本非空 |
| **测试步骤** | `buildCheckboxLabel(title, "v1.0")` |
| **预期结果** | 「我已阅读并同意《…》（v1.0）」 |

### MSA-UT-012 assertAcceptedForRegister 未开放拒绝

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 注册校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP4 |
| **前置条件** | 协议禁用 |
| **测试步骤** | `assertAcceptedForRegister(true)` |
| **预期结果** | msg「会员注册暂未开放」 |

### MSA-UT-013 assertAcceptedForRegister 未勾选拒绝

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 注册校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP3 |
| **前置条件** | 协议启用 |
| **测试步骤** | `assertAcceptedForRegister(false)` |
| **预期结果** | msg「请先阅读并同意商城服务协议」 |

### MSA-UT-014 assertAcceptedForLogin 禁用跳过校验

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 登录校验 SP4 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证老用户登录不要求勾选 |
| **前置条件** | 协议禁用 |
| **测试步骤** | `assertAcceptedForLogin(false)` |
| **预期结果** | **无异常** |

### MSA-UT-015 assertAcceptedForLogin 启用未勾选拒绝

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 登录校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP3 |
| **前置条件** | 协议启用 |
| **测试步骤** | `assertAcceptedForLogin(false)` |
| **预期结果** | msg「请先阅读并同意商城服务协议」 |

### MSA-UT-016 assertAcceptedForLogin 启用已勾选通过

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 登录校验 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 SP3 正向 |
| **前置条件** | 协议启用 |
| **测试步骤** | `assertAcceptedForLogin(true)` |
| **预期结果** | 无异常 |

### MSA-UT-017 isEnabled 启用但正文无效为 false

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | isEnabled |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit |
| **测试目的** | 验证 §6.4 配置异常 |
| **前置条件** | `enable_flag=1`，`content=<p></p>` |
| **测试步骤** | `isEnabled()` |
| **预期结果** | false |

### MSA-UT-018 saveConfig 不调用会员 Mapper

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 状态不级联 |
| **测试类型** | 单元测试 |
| **测试工具** | JUnit + Mockito |
| **测试目的** | 验证 SP10 |
| **前置条件** | Mock `BizMemberMapper`（若注入） |
| **测试步骤** | `saveConfig` |
| **预期结果** | 会员 Mapper **零次** 调用 |

---

## 二、接口测试

### MSA-API-001 平台获取配置成功

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | GET /agri/mallServiceAgreement |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox / MockMvc |
| **测试目的** | 验证 §4 |
| **前置条件** | `agri:mallServiceAgreement:query` |
| **测试步骤** | GET |
| **预期结果** | `code=200`；含 `agreementTitle`、`enableFlag` |

### MSA-API-002 无 Token 平台接口 401

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 鉴权 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP2 |
| **前置条件** | 无 Authorization |
| **测试步骤** | GET 平台配置 |
| **预期结果** | 401 |

### MSA-API-003 无 query 权限 403

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 权限 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP2 |
| **前置条件** | 无 query 权限 |
| **测试步骤** | GET |
| **预期结果** | 403 |

### MSA-API-004 保存启用配置成功

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | PUT |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 §5.3 |
| **前置条件** | `edit` 权限 |
| **测试步骤** | PUT 合法 Body |
| **预期结果** | `code=200`；再次 GET 一致 |

### MSA-API-005 保存标题为空失败

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | PUT 校验 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 §5.2 |
| **前置条件** | edit 权限 |
| **测试步骤** | PUT，`agreementTitle=""` |
| **预期结果** | 失败；「请输入协议标题」 |

### MSA-API-006 启用无正文失败

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | PUT 校验 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP5 |
| **前置条件** | edit 权限 |
| **测试步骤** | `enableFlag=1`，`content` 空 |
| **预期结果** | 失败 |

### MSA-API-007 无 edit 权限 PUT 403

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 权限 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP2 |
| **前置条件** | 仅 query |
| **测试步骤** | PUT |
| **预期结果** | 403 |

### MSA-API-008 保存后 C 端立即生效

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | SP9 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证即时生效 |
| **前置条件** | 已启用 |
| **测试步骤** | PUT 改 content → 匿名 GET `/api/member/serviceAgreement` |
| **预期结果** | C 端 content 已更新 |

### MSA-API-009 C 端获取协议无需登录

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | GET /api/member/serviceAgreement |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 Anonymous |
| **前置条件** | 协议已启用 |
| **测试步骤** | 无 Token GET |
| **预期结果** | `code=200` |

### MSA-API-010 C 端启用响应含 SP4 字段

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | C 端协议 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 §4.1 |
| **前置条件** | 启用且正文有效 |
| **测试步骤** | GET |
| **预期结果** | `registrationOpen=true`；`requireAgreementOnLogin=true`；含 content、checkboxLabel |

### MSA-API-011 C 端禁用响应 SP4

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | C 端协议 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP4 |
| **前置条件** | `enable_flag=0` |
| **测试步骤** | GET |
| **预期结果** | `registrationOpen=false`；`requireAgreementOnLogin=false`；message 含「会员注册暂未开放」 |

### MSA-API-012 GET status 与开放状态一致

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | GET /status |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 §4.2 |
| **前置条件** | — |
| **测试步骤** | 启用/禁用各测 GET `/api/member/serviceAgreement/status` |
| **预期结果** | 与 `isEnabled()` 一致 |

### MSA-API-013 注册未勾选失败

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | POST /api/member/register |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP3 |
| **前置条件** | 协议启用；合法手机号未注册 |
| **测试步骤** | POST，`agreementAccepted=false` 或缺省 |
| **预期结果** | 失败；「请先阅读并同意商城服务协议」 |

### MSA-API-014 注册协议未开放失败

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | POST /api/member/register |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP4 |
| **前置条件** | 协议禁用 |
| **测试步骤** | POST，`agreementAccepted=true` |
| **预期结果** | 失败；「会员注册暂未开放」 |

### MSA-API-015 注册勾选成功路径

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | POST /api/member/register |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证正向 |
| **前置条件** | 协议启用；验证码有效 |
| **测试步骤** | POST，`agreementAccepted=true` + 合法注册字段 |
| **预期结果** | `code=200`；返回 memberId（以会员接口为准） |

### MSA-API-016 登录协议启用未勾选失败

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | POST /api/member/login |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP3 登录 |
| **前置条件** | 协议启用；会员启用 |
| **测试步骤** | POST 登录，`agreementAccepted=false` |
| **预期结果** | 失败；协议文案 |

### MSA-API-017 登录协议禁用可不传勾选

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | POST /api/member/login |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 SP4 登录 |
| **前置条件** | 协议禁用；会员启用 |
| **测试步骤** | POST 登录，不传 `agreementAccepted` |
| **预期结果** | 可按会员规则成功登录（不因协议失败） |

### MSA-API-018 登录会员禁用仍失败

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | POST /api/member/login |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证 M4 优先于协议 |
| **前置条件** | 协议启用；会员 `status` 禁用 |
| **测试步骤** | POST，`agreementAccepted=true` |
| **预期结果** | 失败；「账号已禁用」类文案（M4） |

### MSA-API-019 改协议不改动会员启用状态

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 × 会员 |
| **测试项** | 状态不级联 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox + SQL |
| **测试目的** | 验证 SP10 |
| **前置条件** | 会员 M 状态已知 |
| **测试步骤** | PUT 改协议 → 查会员 M |
| **预期结果** | 会员 `status` **不变** |

### MSA-API-020 不提供删除接口

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 接口存在性 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证单例无删 |
| **前置条件** | — |
| **测试步骤** | DELETE `/agri/mallServiceAgreement` |
| **预期结果** | 404 或 405 |

### MSA-API-021 与入驻协议路径独立

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | SP7 |
| **测试类型** | 接口测试 |
| **测试工具** | Apifox |
| **测试目的** | 验证路径隔离 |
| **前置条件** | 两协议均已配置 |
| **测试步骤** | GET `/api/member/serviceAgreement` 与 GET `/api/merchant/entry/agreement` |
| **预期结果** | 返回不同 `agreementTitle`/正文 |

---

## 三、界面测试（Playwright）

> **通用前置：** 平台：管理员登录 →「内容管理 → 商城服务协议」；C 端：用户商城 URL。

### MSA-UI-001 进入服务协议配置页

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 配置页加载 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright (Chrome) |
| **测试目的** | 验证 §3、§4 |
| **前置条件** | 有 query 权限 |
| **测试步骤** | 登录平台 → 进入「商城服务协议」 |
| **预期结果** | 单页：标题、版本、启用、富文本、保存 |

### MSA-UI-002 保存启用协议完整流程

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 编辑保存 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §5.3 |
| **前置条件** | 有 edit 权限 |
| **测试步骤** | 填写标题、正文 → 启用=是 → 保存 |
| **预期结果** | 保存成功；刷新回显 |

### MSA-UI-003 启用开关旁说明文案

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 页面说明 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §7 |
| **前置条件** | 在配置页 |
| **测试步骤** | 查看启用开关说明 |
| **预期结果** | 含关闭后无法新注册、已注册会员登录不要求勾选等说明 |

### MSA-UI-004 启用无正文前端校验

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 保存校验 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §5.2 |
| **前置条件** | edit 权限 |
| **测试步骤** | 启用=是，正文空 → 保存 |
| **预期结果** | 前端提示；不提交 |

### MSA-UI-005 无 edit 权限保存不可用

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 权限 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 SP2 |
| **前置条件** | 仅 query |
| **测试步骤** | 进入配置页 |
| **预期结果** | 保存隐藏/禁用 |

### MSA-UI-006 C 端注册页展示协议与勾选

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 注册流程 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §6.1 |
| **前置条件** | 协议已启用 |
| **测试步骤** | 打开 C 端注册页 |
| **预期结果** | 协议正文+勾选框；文案与 checkboxLabel 一致 |

### MSA-UI-007 C 端注册未勾选提交阻断

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 注册勾选 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 SP3 |
| **前置条件** | 协议启用 |
| **测试步骤** | 填注册信息 → 不勾选 → 提交 |
| **预期结果** | 提示「请先阅读并同意商城服务协议」 |

### MSA-UI-008 C 端登录须勾选（协议启用）

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 登录流程 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §6.2、SP3 |
| **前置条件** | 协议启用；已有会员 |
| **测试步骤** | 登录页不勾选 → 提交 |
| **预期结果** | 协议类提示；不登录成功 |

### MSA-UI-009 协议禁用后登录无勾选框

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | SP4 登录 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §6.2 |
| **前置条件** | 平台关闭协议启用；已有会员 |
| **测试步骤** | 打开 C 端登录页 |
| **预期结果** | **无** 服务协议勾选区；可凭账号密码登录 |

### MSA-UI-010 协议禁用后注册不可用

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | SP4 注册 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §2.1 |
| **前置条件** | 协议禁用 |
| **测试步骤** | 打开 C 端注册页/入口 |
| **预期结果** | 「会员注册暂未开放」或入口不可见 |

### MSA-UI-011 访客浏览首页不要求勾选

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | 访客浏览 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §6.2 |
| **前置条件** | 协议启用 |
| **测试步骤** | 无痕打开首页 |
| **预期结果** | 可浏览；**无** 强制服务协议弹窗（非本期全站弹窗） |

### MSA-UI-012 与入驻协议页面分离

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | SP7 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证 §2.2 |
| **前置条件** | 注册页、商家入驻页可访问 |
| **测试步骤** | 分别打开两页 |
| **预期结果** | 注册页为 **服务协议**；入驻页为 **入驻协议** |

### MSA-UI-013 平台修改正文 C 端注册页更新

| 要素 | 内容 |
|------|------|
| **测试模块** | 商城服务协议 |
| **测试项** | SP9 |
| **测试类型** | 界面测试 |
| **测试工具** | Playwright |
| **测试目的** | 验证即时生效 |
| **前置条件** | 协议启用 |
| **测试步骤** | 平台改正文含关键字「MSA_UI_13」→ 保存 → C 端刷新注册页 |
| **预期结果** | C 端正文出现该关键字 |

---

## 四、用例与业务规则对照

| 规则 | 覆盖用例 |
|------|----------|
| SP1 | MSA-UT-007/008，MSA-API-020 |
| SP2 | MSA-API-002/003/007，MSA-UI-005 |
| SP3 | MSA-UT-013/015/016，MSA-API-013/016，MSA-UI-007/008 |
| SP4 | MSA-UT-009/012/014，MSA-API-011/014/017，MSA-UI-009/010 |
| SP5 | MSA-UT-002/003，MSA-API-006 |
| SP6 | MSA-API-019（数据不变） |
| SP7 | MSA-API-021，MSA-UI-012 |
| SP8 | 排除后台登录（文档范围） |
| SP9 | MSA-API-008，MSA-UI-013 |
| SP10 | MSA-UT-018，MSA-API-019 |

---

## 五、统计与执行说明

| 类型 | 数量 |
|------|------|
| 单元测试 | 18 |
| 接口测试 | 21 |
| 界面测试 | 13 |
| **合计** | **52** |

**执行顺序：** `sql/biz_mall_service_agreement.sql` → `mvn -pl baqing-shop test "-Dtest=com.ruoyi.web.modules.content.**MallService*"` → 接口/UI。

**自动化示例：**

```bash
mvn -pl baqing-shop test "-Dtest=com.ruoyi.web.modules.content.**"
```

---

*文档版本：v1.0 · 关联《商城服务协议功能需求.md》v1.0、《商城服务协议技术方案.md》v1.0*
