US-301: 客戶基本資料管理 - 手動測試指南
測試日期: ____________ 測試人員: ____________ 測試環境:
npm run dev(localhost:3000)
測試前準備
1. 啟動開發伺服器
npm run dev
2. 測試帳號
訪問 http://localhost:3000/login
| 用戶名 | 密碼 | 角色 | 權限說明 |
|---|---|---|---|
manager@florist.com | Password123! | ROLE_MANAGER | 可創建/編輯/停用/啟用客戶 |
staff@florist.com | Password123! | ROLE_STAFF | 可創建/編輯客戶(不可停用) |
3. 種子數據
Mock API 預設包含以下客戶資料:
| 客戶編號 | 姓名/公司名 | 類型 | 電話 | 等級 | 狀態 |
|---|---|---|---|---|---|
| ABC-CUST-000001 | 王小明 | 個人 | 0912-345-678 | VIP | 啟用 |
| ABC-CUST-000002 | 李美玲 | 個人 | 0923-456-789 | Regular | 啟用 |
| ABC-CUST-000003 | XX 科技公司 | 企業 | 02-1234-5678 | VVIP | 啟用 |
| ABC-CUST-000004 | 張三 | 個人 | 0934-567-890 | Regular | 停用 |
測試場景
✅ Scenario 1: 創建個人客戶(僅必填欄位)
目標: 驗證快速創建個人客戶流程(僅填寫姓名和電話)
操作步驟
-
以 Staff 帳號登入
- 登入
staff@florist.com
- 登入
-
導航至創建客戶頁面
- 訪問
http://localhost:3000/customers/new - ✅ 驗證: 看到頁面標題「新增客戶」
- ✅ 驗證: 預設選中「個人客戶」類型
- 訪問
-
填寫必填欄位
- 姓名:
陳大明 - 電話:
0955-123-456
- 姓名:
-
提交表單
- 點擊「儲存」按鈕
- ✅ 驗證: 顯示 Toast 通知「客戶創建成功」
- ✅ 驗證: 頁面導航至客戶詳情頁
-
驗證客戶資料
- ✅ 驗證: 客戶編號格式正確(
ABC-CUST-XXXXXX) - ✅ 驗證: 電話已標準化(
0955123456) - ✅ 驗證: 狀態為「啟用」
- ✅ 驗證: 等級為「普通客戶」
- ✅ 驗證: 累計消費為
NT$ 0
- ✅ 驗證: 客戶編號格式正確(
預期結果
- ✅ 客戶創建成功
- ✅ 客戶編號自動生成
- ✅ 電話格式標準化(移除連字號)
- ✅ 初始狀態為啟用、等級為普通客戶
✅ Scenario 2: 創建個人客戶(完整欄位)
目標: 驗證創建個人客戶時填寫所有欄位
操作步驟
-
導航至創建客戶頁面
- 訪問
http://localhost:3000/customers/new
- 訪問
-
填寫基本資訊
- 姓名:
林美華 - 電話:
0966-234-567 - Email:
meihwa@example.com - 性別:
女 - 生日:
1990-05-15
- 姓名:
-
填寫地址
- 點擊「+ 新增地址」
- 地址類型:
住家 - 地址:
台北市信義區信義路五段 7 號 - 設為預設地址
-
填寫附加資訊
- 來源:
網路搜尋 - 喜好備註:
喜歡粉色系花卉 - 標籤:
婚禮、企業送禮
- 來源:
-
提交表單
- 點擊「儲存」按鈕
- ✅ 驗證: 客戶創建成功
-
驗證客戶詳情
- ✅ 驗證: 所有欄位資料正確顯示
- ✅ 驗證: 地址區塊顯示「住家」標籤
- ✅ 驗證: 標籤區塊顯示「婚禮」、「企業送禮」
預期結果
- ✅ 所有欄位資料正確儲存
- ✅ 地址資訊完整
- ✅ 標籤正確顯示
✅ Scenario 3: 創建企業客戶(含聯絡人)
目標: 驗證創建企業客戶並添加多位聯絡人
操作步驟
-
導航至創建客戶頁面
- 訪問
http://localhost:3000/customers/new
- 訪問
-
切換至企業客戶
- 點擊「企業客戶」選項
- ✅ 驗證: 表單切換為企業客戶欄位
-
填寫企業基本資訊
- 公司名稱:
幸福花藝有限公司 - 統一編號:
12345678 - 公司電話:
02-8765-4321 - 公司地址:
新北市板橋區中山路一段 100 號 - 產業類別:
零售業 - 月結帳期:
30 天
- 公司名稱:
-
添加第一位聯絡人(主要)
- 點擊「+ 新增聯絡人」
- 姓名:
張經理 - 職稱:
採購經理 - 電話:
0912-111-222 - Email:
zhang@happyflower.com - 勾選「設為主要聯絡人」
-
添加第二位聯絡人
- 再次點擊「+ 新增聯絡人」
- 姓名:
李助理 - 職稱:
行政助理 - 電話:
0923-222-333 - Email:
li@happyflower.com
-
提交表單
- 點擊「儲存」按鈕
- ✅ 驗證: 客戶創建成功
-
驗證客戶詳情
- ✅ 驗證: 公司資訊正確顯示
- ✅ 驗證: 統一編號為 8 位數字
- ✅ 驗證: 顯示 2 位聯絡人
- ✅ 驗證: 張經理標示為「主要聯絡人」
預期結果
- ✅ 企業客戶創建成功
- ✅ 聯絡人資訊正確儲存
- ✅ 主要聯絡人標示正確
✅ Scenario 4: 編輯客戶基本資訊
目標: 驗證編輯客戶資料並即時反映
操作步驟
-
導航至客戶列表
- 訪問
http://localhost:3000/customers
- 訪問
-
選擇客戶進入詳情頁
- 點擊「王小明」進入詳情頁
- ✅ 驗證: 看到客戶詳情資料
-
進入編輯模式
- 點擊「編輯」按鈕
- ✅ 驗證: 頁面切換為編輯表單
- ✅ 驗證: 現有資料已預填
-
修改客戶資料
- 將電話從
0912-345-678改為0912-999-888 - 新增 Email:
xiaoming@example.com
- 將電話從
-
儲存變更
- 點擊「儲存」按鈕
- ✅ 驗證: 顯示 Toast 通知「客戶更新成功」
-
驗證更新結果
- ✅ 驗證: 詳情頁顯示新電話
0912999888 - ✅ 驗證: Email 欄位顯示
xiaoming@example.com - ✅ 驗證:
updatedAt時間戳已更新
- ✅ 驗證: 詳情頁顯示新電話
預期結果
- ✅ 客戶資料更新成功
- ✅ 變更即時反映在詳情頁
- ✅ 更新時間戳正確
✅ Scenario 5: 重複電話檢測(新增時警告)
目標: 驗證創建客戶時的電話重複檢測功能
操作步驟
-
導航至創建客戶頁面
- 訪問
http://localhost:3000/customers/new
- 訪問
-
填寫已存在的電話
- 姓名:
王小明的家人 - 電話:
0912-345-678(與「王小明」相同)
- 姓名:
-
觸發重複檢測
- 離開電話欄位(blur 事件)
- 等待 500ms(防抖)
- ✅ 驗證: 顯示黃色警告框
- ✅ 驗證: 警告訊息包含現有客戶名稱「王小明」
- ✅ 驗證: 警告框有「查看客戶」連結
-
選擇繼續創建
- 勾選「仍要繼續創建」
- 點擊「儲存」按鈕
- ✅ 驗證: 客戶創建成功(允許強制創建)
-
驗證審計日誌(可選)
- 檢查 Console 或 API 回應
- ✅ 驗證: 日誌記錄「重複警告被忽略」
預期結果
- ✅ 重複電話顯示警告
- ✅ 警告包含現有客戶資訊
- ✅ 允許用戶忽略警告並創建
✅ Scenario 6: 重複電話檢測(編輯時排除自身)
目標: 驗證編輯客戶時不會對自己的電話報警
操作步驟
-
導航至客戶編輯頁面
- 訪問
http://localhost:3000/customers/ABC-CUST-000001/edit - (或從客戶列表點擊「王小明」→「編輯」)
- 訪問
-
不修改電話,修改其他欄位
- 電話保持
0912-345-678 - 將 Email 改為
wang@example.com
- 電話保持
-
觸發重複檢測
- 點擊電話欄位後離開(blur)
- ✅ 驗證: 不應該顯示重複警告
- ✅ 驗證: 編輯自己的資料時排除自身
-
儲存變更
- 點擊「儲存」按鈕
- ✅ 驗證: 更新成功,無警告
預期結果
- ✅ 編輯模式排除自身電話檢測
- ✅ 不顯示誤報警告
- ✅ 更新正常完成
✅ Scenario 7: 停用客戶
目標: 驗證管理者可停用客戶並記錄原因
操作步驟
-
以 Manager 帳號登入
- 登入
manager@florist.com
- 登入
-
導航至客戶詳情頁
- 訪問客戶「李美玲」的詳情頁
-
點擊停用按鈕
- 點擊「停用客戶」按鈕
- ✅ 驗證: 顯示確認對話框
-
填寫停用原因
- 停用原因:選擇「客戶要求」
- 備註:
客戶暫時不需要服務
-
確認停用
- 點擊「確認停用」
- ✅ 驗證: 顯示 Toast 通知「客戶已停用」
-
驗證停用狀態
- ✅ 驗證: 客戶狀態變為「停用」(灰色標籤)
- ✅ 驗證: 停用原因已記錄
-
驗證訂單選擇列表
- 訪問
http://localhost:3000/orders/new - ✅ 驗證: 客戶下拉選單不包含「李美玲」
- 訪問
預期結果
- ✅ 客戶成功停用
- ✅ 停用原因已記錄
- ✅ 停用客戶不出現在訂單選擇列表
✅ Scenario 8: 重新啟用客戶
目標: 驗證管理者可重新啟用停用的客戶
操作步驟
-
以 Manager 帳號登入
- 登入
manager@florist.com
- 登入
-
找到停用客戶
- 訪問
http://localhost:3000/customers - 過濾條件選擇「停用」狀態
- ✅ 驗證: 看到「張三」(停用狀態)
- 訪問
-
進入客戶詳情頁
- 點擊「張三」進入詳情頁
-
點擊啟用按鈕
- 點擊「啟用客戶」按鈕
- ✅ 驗證: 顯示確認對話框
-
確認啟用
- 點擊「確認啟用」
- ✅ 驗證: 顯示 Toast 通知「客戶已啟用」
-
驗證啟用狀態
- ✅ 驗證: 客戶狀態變為「啟用」(綠色標籤)
-
驗證訂單選擇列表
- 訪問
http://localhost:3000/orders/new - ✅ 驗證: 客戶下拉選單包含「張三」
- 訪問
預期結果
- ✅ 客戶成功啟用
- ✅ 啟用後可在訂單選擇列表中看到
✅ Scenario 9: 權限驗證(Staff 無法停用客戶)
目標: 驗證 Staff 角色無法停用/啟用客戶
操作步驟
-
以 Staff 帳號登入
- 登入
staff@florist.com
- 登入
-
導航至客戶詳情頁
- 訪問任意客戶的詳情頁
-
檢查操作按鈕
- ✅ 驗證: 不顯示「停用客戶」按鈕
- ✅ 驗證: 不顯示「啟用客戶」按鈕
- ✅ 驗證: 僅顯示「編輯」按鈕
-
嘗試直接訪問 API(可選,開發者工具)
- 在 Console 執行 PATCH 請求
- ✅ 驗證: 返回 403 Forbidden
預期結果
- ✅ Staff 角色無法看到停用/啟用按鈕
- ✅ API 層級阻擋未授權操作
✅ Scenario 10: 必填欄位驗證
目標: 驗證表單必填欄位驗證
操作步驟
-
導航至創建客戶頁面
- 訪問
http://localhost:3000/customers/new
- 訪問
-
不填寫任何欄位,直接提交
- 點擊「儲存」按鈕
- ✅ 驗證: 姓名欄位顯示錯誤「請輸入姓名」
- ✅ 驗證: 電話欄位顯示錯誤「請輸入電話」
- ✅ 驗證: 欄位邊框變為紅色
-
切換至企業客戶
- 點擊「企業客戶」選項
- 不填寫任何欄位,直接提交
- ✅ 驗證: 公司名稱顯示錯誤「請輸入公司名稱」
- ✅ 驗證: 公司電話顯示錯誤「請輸入公司電話」
- ✅ 驗證: 聯絡人區塊顯示錯誤「至少需要一位聯絡人」
-
驗證表單狀態
- ✅ 驗證: 客戶未被創建
- ✅ 驗證: 已填寫的資料保留
預期結果
- ✅ 必填欄位驗證正確
- ✅ 錯誤訊息清晰明確
- ✅ 表單資料不會因驗證失敗而遺失
✅ Scenario 11: 格式驗證
目標: 驗證電話、Email、統一編號等格式驗證
操作步驟
-
導航至創建客戶頁面
- 訪問
http://localhost:3000/customers/new
- 訪問
-
測試電話格式驗證
- 姓名:
測試客戶 - 電話:
abc123(無效格式) - 離開電話欄位
- ✅ 驗證: 顯示錯誤「請輸入有效的電話號碼」
- 姓名:
-
測試 Email 格式驗證
- 電話:
0912-345-678(有效) - Email:
invalid-email(無效格式) - 離開 Email 欄位
- ✅ 驗證: 顯示錯誤「請輸入有效的 Email」
- 電話:
-
切換至企業客戶測試統一編號
- 點擊「企業客戶」選項
- 統一編號:
1234(不足 8 位) - 離開統一編號欄位
- ✅ 驗證: 顯示錯誤「統一編號必須為 8 位數字」
-
測試有效格式
- 電話:
0912-345-678、02-1234-5678、0912345678 - ✅ 驗證: 以上三種格式都可接受
- 電話:
預期結果
- ✅ 電話格式驗證正確
- ✅ Email 格式驗證正確
- ✅ 統一編號格式驗證正確
- ✅ 支援多種電話格式
✅ Scenario 12: 聯絡人管理(企業客戶)
目標: 驗證企業客戶的聯絡人新增、刪除、設為主要功能
操作步驟
-
導航至創建企業客戶頁面
- 訪問
http://localhost:3000/customers/new - 選擇「企業客戶」
- 訪問
-
新增第一位聯絡人
- 點擊「+ 新增聯絡人」
- ✅ 驗證: 出現聯絡人表單區塊
- 填寫:姓名「陳經理」、電話「0912-111-111」
- ✅ 驗證: 自動設為主要聯絡人(唯一時)
-
新增第二位聯絡人
- 再次點擊「+ 新增聯絡人」
- 填寫:姓名「王助理」、電話「0923-222-222」
- ✅ 驗證: 第二位聯絡人未標記為主要
-
切換主要聯絡人
- 在第二位聯絡人處點擊「設為主要」
- ✅ 驗證: 第二位聯絡人變為主要(藍色標籤)
- ✅ 驗證: 第一位聯絡人不再是主要
-
刪除聯絡人
- 在第一位聯絡人處點擊「刪除」
- ✅ 驗證: 顯示確認對話框
- 點擊「確認」
- ✅ 驗證: 第一位聯絡人已移除
- ✅ 驗證: 僅剩一位聯絡人(王助理)
-
驗證至少一位聯絡人
- 嘗試刪除最後一位聯絡人
- ✅ 驗證: 顯示錯誤「至少需要一位聯絡人」或刪除按鈕禁用
預期結果
- ✅ 可新增多位聯絡人
- ✅ 可切換主要聯絡人
- ✅ 可刪除聯絡人
- ✅ 至少保留一位聯絡人
測試檢查清單
完成所有測試場景後,請勾選以下項目:
基本功能
- Scenario 1: 創建個人客戶(僅必填欄位)
- Scenario 2: 創建個人客戶(完整欄位)
- Scenario 3: 創建企業客戶(含聯絡人)
- Scenario 4: 編輯客戶基本資訊
重複檢測
- Scenario 5: 重複電話檢測(新增時警告)
- Scenario 6: 重複電話檢測(編輯時排除自身)
停用/啟用
- Scenario 7: 停用客戶
- Scenario 8: 重新啟用客戶
- Scenario 9: 權限驗證(Staff 無法停用)
錯誤處理
- Scenario 10: 必填欄位驗證
- Scenario 11: 格式驗證
- Scenario 12: 聯絡人管理
UI/UX
- 個人/企業客戶表單切換流暢
- 錯誤訊息顯示在正確位置(欄位下方)
- 警告訊息使用黃色樣式
- 成功訊息使用 Toast 通知
- 響應式設計(桌面版雙欄、手機版單欄)
API
- POST /api/v1/customers 正常運作
- PUT /api/v1/customers/{id} 正常運作
- GET /api/v1/customers/check-duplicate 正常運作
- PATCH /api/v1/customers/{id}/status 正常運作
- 錯誤響應格式正確(400/403/404)
安全性
- 權限控制正確(Staff 不可停用/啟用)
- 多租戶隔離(只能看到自己租戶的客戶)
已知問題
記錄測試過程中發現的問題:
測試結論
- 測試通過: ☐ 是 / ☐ 否
- 備註: ___________________________________________________________
- 測試人員簽名: ________________ 日期: ________________
最後更新: 2025-12-08