代付審核修改收款人姓名 - 完整 QA 測試計劃
功能概述
用戶在後台審核代付(payout)訂單時(狀態為 AUDITING),可在審核彈窗中修改收款人姓名(payout_name)。修改後的姓名在推送到上游渠道時使用。
API: PATCH /backstage/api/v1/tasks/external-tasks/{task_id}
新增欄位: payout_name(String, 可選)
測試範圍
1. Happy Path -- AUDITING 狀態下修改姓名並審核通過
| ID | 測試場景 | 前置條件 | 測試步驟 | 預期結果 | 優先級 | 類型 |
|---|---|---|---|---|---|---|
| TC-PEN-001 | AUDITING 訂單傳 payout_name + 有效渠道 | 訂單狀態為 AUDITING | 1. 建立 AUDITING 狀態 payout 2. PATCH 傳 status=2, platform_channel_id, payout_name="新姓名" | 姓名更新為 "新姓名",狀態轉為 EXECUTING | P0 | E2E |
| TC-PEN-002 | AUDITING 訂單不傳 payout_name | 訂單狀態為 AUDITING | 1. 建立 AUDITING 狀態 payout 2. PATCH 傳 status=2, platform_channel_id,不傳 payout_name | 保留原始姓名,狀態正常轉為 EXECUTING | P0 | E2E |
| TC-PEN-003 | AUDITING 訂單傳 payout_name="" (空字串) | 訂單狀態為 AUDITING | 1. 建立 AUDITING 狀態 payout 2. PATCH 傳 status=2, platform_channel_id, payout_name="" | 保留原始姓名,狀態正常轉為 EXECUTING | P0 | E2E |
2. DB 持久化驗證
| ID | 測試場景 | 前置條件 | 測試步驟 | 預期結果 | 優先級 | 類型 |
|---|---|---|---|---|---|---|
| TC-PEN-004 | 修改姓名後 DB payout_name 已更新 | 訂單狀態為 AUDITING | 1. 建立 AUDITING 狀態 payout (原始姓名="原始姓名") 2. PATCH 傳 payout_name="修改後姓名" 3. 直接查 DB payout_tab | DB 中 payout_name = "修改後姓名" | P0 | 整合 |
| TC-PEN-005 | 不傳 payout_name 時 DB 不變 | 訂單狀態為 AUDITING | 1. 建立 AUDITING 狀態 payout (原始姓名="原始姓名") 2. PATCH 不傳 payout_name 3. 查 DB | DB 中 payout_name 仍為 "原始姓名" | P0 | 整合 |
3. 邊界條件測試
| ID | 測試場景 | 前置條件 | 測試步驟 | 預期結果 | 優先級 | 類型 |
|---|---|---|---|---|---|---|
| TC-PEN-006 | payout_name 為 null | 訂單狀態為 AUDITING | 1. PATCH 傳 payout_name=null | 保留原始姓名 | P0 | E2E |
| TC-PEN-007 | payout_name 僅含空白字元 | 訂單狀態為 AUDITING | 1. PATCH 傳 payout_name=" " | 保留原始姓名(視同空字串) | P1 | E2E |
| TC-PEN-008 | payout_name 含特殊字元 | 訂單狀態為 AUDITING | 1. PATCH 傳 payout_name="張@三#test" | 姓名更新為 "張@三#test" | P1 | E2E |
| TC-PEN-009 | payout_name 為超長字串 (>64 chars) | 訂單狀態為 AUDITING | 1. PATCH 傳 65 字元的 payout_name | 視系統處理,可能截斷或報錯(DB 欄位 varchar(64)) | P2 | E2E |
4. 非 AUDITING 狀態驗證 -- payout_name 應被忽略
| ID | 測試場景 | 前置條件 | 測試步驟 | 預期結果 | 優先級 | 類型 |
|---|---|---|---|---|---|---|
| TC-PEN-010 | PENDING 狀態訂單傳 payout_name | 訂單狀態為 PENDING | 1. 建立 PENDING 狀態 payout 2. 嘗試觸發帶 payout_name 的操作 | payout_name 被忽略,保留原始姓名 | P0 | E2E |
| TC-PEN-011 | EXECUTING 狀態訂單傳 payout_name | 訂單狀態為 EXECUTING | 1. 同上 | payout_name 被忽略 | P1 | E2E |
| TC-PEN-012 | SUCCESS 狀態訂單傳 payout_name | 訂單狀態為 SUCCESS | 1. 同上 | payout_name 被忽略 | P1 | E2E |
| TC-PEN-013 | CANCEL 狀態訂單傳 payout_name | 訂單狀態為 CANCEL | 1. 同上 | payout_name 被忽略 | P1 | E2E |
5. 上游渠道驗證
| ID | 測試場景 | 前置條件 | 測試步驟 | 預期結果 | 優先級 | 類型 |
|---|---|---|---|---|---|---|
| TC-PEN-014 | 修改姓名後上游渠道收到新姓名 | 訂單狀態為 AUDITING,已配置上游渠道 | 1. 修改 payout_name 2. 審核通過推送上游 3. 檢查 channel_log | channel_log 中上游請求包含修改後的姓名 | P0 | 手動/整合 |
6. 前端 UI 測試
| ID | 測試場景 | 前置條件 | 測試步驟 | 預期結果 | 優先級 | 類型 |
|---|---|---|---|---|---|---|
| TC-PEN-015 | 審核彈窗顯示 payout_name 輸入欄位 | AUDITING 狀態的代付訂單 | 1. 打開審核彈窗 | 彈窗中顯示可編輯的「收款人姓名」欄位,預填原始姓名 | P0 | 手動 |
| TC-PEN-016 | 修改姓名後提交 | 同上 | 1. 修改姓名 2. 選擇渠道 3. 點擊送出 | 請求帶上 payout_name 欄位,API 回傳成功 | P0 | 手動 |
| TC-PEN-017 | 不修改姓名直接提交 | 同上 | 1. 不修改姓名 2. 選擇渠道 3. 點擊送出 | 請求不帶 payout_name 或帶原始值,正常通過 | P1 | 手動 |
| TC-PEN-018 | 清空姓名後提交 | 同上 | 1. 清空姓名欄位 2. 選擇渠道 3. 點擊送出 | 保留原始姓名(空值視為不修改) | P1 | 手動 |
測試環境要求
- 資料庫: Testcontainers (MySQL 8.0) + Flyway migrations
- 測試資料: 使用 type1_lifecycle.sql(audit_type=1,有 AUDITING 流程)
- 測試框架: JUnit 5 + Spring Boot Test + Testcontainers
測試數據準備
自動化測試利用既有的 E2E 測試基礎設施(BaseIntegrationTest + Testcontainers),使用 type1_lifecycle.sql 準備 audit_type=1 的商戶資料,確保訂單能經過 AUDITING 狀態。
自動化測試覆蓋
P0 自動化測試
測試檔案: PayoutEditNameP0Test.java
執行命令:
mvn test -Dtest="com.diamondpayintegration.feature.PayoutEditNameP0Test" -f /Users/david.ku/side-project/diamond-pay/diamond-pay-backstage-backend-payout-edit-name/pom.xml
覆蓋測試項目:
| 測試類別 | 測試項目數 | 說明 |
|---|---|---|
| Happy Path | 3 項 | TC-PEN-001 ~ TC-PEN-003: AUDITING 狀態下傳/不傳/空字串 payout_name |
| DB 驗證 | 2 項 | TC-PEN-004 ~ TC-PEN-005: 驗證 DB payout_name 欄位更新 |
| 邊界條件 | 1 項 | TC-PEN-006: payout_name=null |
| 非 AUDITING 狀態 | 1 項 | TC-PEN-010: PENDING 狀態忽略 payout_name |
額外回歸測試: TC-PEN-REG-001: 修改姓名不影響餘額計算
需手動驗證的項目
| ID | 項目 | 原因 |
|---|---|---|
| TC-PEN-014 | 上游渠道收到新姓名 | 需要真實上游渠道或 mock,超出黑盒 E2E 範圍 |
| TC-PEN-015 ~ TC-PEN-018 | 前端 UI 測試 | 需瀏覽器環境 |
測試執行結果
執行時間: 2026-02-26 執行環境: Testcontainers (MySQL 8.0 + Redis 5), JUnit 5, Spring Boot 2.1.4 執行命令:
mvn clean test -Dtest="com.diamondpayintegration.feature.PayoutEditNameP0Test" -DfailIfNoTests=false -f /Users/david.ku/side-project/diamond-pay/diamond-pay-backstage-backend-payout-edit-name/pom.xml
結果摘要
| 指標 | 數值 |
|---|---|
| 總測試數 | 8 |
| 通過 | 8 |
| 失敗 | 0 |
| 錯誤 | 0 |
| 跳過 | 0 |
| 耗時 | 58.489 秒 |
各測試案例結果
| ID | 測試名稱 | 結果 |
|---|---|---|
| TC-PEN-001 | AUDITING + payout_name="新姓名" → 姓名更新 | PASS |
| TC-PEN-002 | AUDITING + 不傳 payout_name → 保留原始姓名 | PASS |
| TC-PEN-003 | AUDITING + payout_name="" → 保留原始姓名 | PASS |
| TC-PEN-004 | DB 驗證 — 中英文混合姓名持久化 | PASS |
| TC-PEN-005 | DB 驗證 — 不傳時 payout_name 不變 | PASS |
| TC-PEN-006 | payout_name=null → 保留原始姓名 | PASS |
| TC-PEN-010 | PENDING 狀態 — reassign 應失敗 | PASS |
| TC-PEN-REG-001 | 修改姓名不影響餘額計算 | PASS |
Bug 清單
無。所有 P0 測試案例均通過。
回歸測試清單
確保本次變更不影響現有功能:
- 正常的 Payout 建單流程(每個測試案例都先建單驗證)
- AUDITING → PENDING (reassign) 審核通過流程
- 非 AUDITING 狀態拒絕 reassign(TC-PEN-010)
- 餘額計算正確性不受影響(TC-PEN-REG-001)
- AUDITING → CANCEL 審核取消流程(需手動驗證)
- 前端 UI 互動流程(需手動驗證)