跳至主要内容

SBE Scenario 2: 確認訂單

場景描述

店員在店員工作台中確認一筆待確認的訂單,訂單狀態變更為「已確認」。


Given(前置條件)

系統狀態

  • 當前日期: 2025-12-01
  • 當前租戶: ABC (ABC 花店)
  • 已登入用戶: 張店員 (ROLE_SALES)

測試資料

待確認訂單

{
"orderId": "ABC-20251201-0001",
"orderNumber": "ABC-20251201-0001",
"tenantId": "ABC",
"status": "pending_confirmation",
"customer": {
"name": "李大華",
"phone": "0912-345-678"
},
"deliveryDate": "2025-12-02",
"totalAmount": 2520,
"createdAt": "2025-12-01T09:00:00Z"
}

When(執行操作)

步驟 1: 點擊確認按鈕

  • 店員在訂單卡片上點擊「確認訂單」按鈕
  • 系統顯示確認對話框

步驟 2: 確認操作

  • 對話框顯示:「確定要確認訂單嗎?」
  • 選項:[是] [否]
  • 店員點擊「是」

Then(預期結果)

API 請求

端點: PATCH /api/v1/orders/ABC-20251201-0001/status

Request Body

{
"newStatus": "confirmed"
}

Response Body (200 OK)

{
"orderId": "ABC-20251201-0001",
"oldStatus": "pending_confirmation",
"newStatus": "confirmed",
"updatedAt": "2025-12-01T10:30:00Z",
"updatedBy": {
"userId": "user-001",
"userName": "張店員",
"role": "ROLE_SALES"
},
"message": "訂單狀態已更新為「已確認」"
}

UI 反饋

1. 成功訊息

  • Toast 通知: 「狀態更新成功」
  • 訊息類型: 成功(綠色)

2. 列表更新

  • 該訂單從列表中消失
  • Badge 數量從 2 減為 1
  • 列表自動刷新

資料庫變更

1. 更新 orders 表

UPDATE orders
SET status = 'confirmed',
updated_at = '2025-12-01T10:30:00Z'
WHERE order_id = 'ABC-20251201-0001';

2. 新增狀態歷史記錄

{
"id": "history-001",
"orderId": "ABC-20251201-0001",
"tenantId": "ABC",
"oldStatus": "pending_confirmation",
"newStatus": "confirmed",
"timestamp": "2025-12-01T10:30:00Z",
"operatorId": "user-001",
"operatorName": "張店員",
"operatorRole": "ROLE_SALES",
"description": "手動確認訂單"
}

查詢快取無效化

執行以下無效化操作:

invalidateOrder('ABC-20251201-0001')  // 無效化單筆訂單
invalidateAll() // 無效化訂單列表

驗證檢查清單

狀態流轉

  • 訂單狀態從 pending_confirmation 變更為 confirmed
  • 狀態歷史記錄正確生成
  • 操作者資訊正確記錄

UI 更新

  • 訂單從列表中消失
  • Badge 數量正確更新
  • 成功通知顯示

快取管理

  • 訂單快取已無效化
  • 列表快取已無效化

最後更新: 2025-12-19