SBE Scenario 3: 組合搜尋與過濾
場景描述
店員同時使用搜尋與過濾功能,並搭配分頁導航,快速找到符合多個條件的訂單。
Given(前置條件)
系統狀態
- 當前日期: 2025-11-03
- 當前租戶:
ABC(ABC 花店) - 已登入用戶: 張店員 (ROLE_SALES)
測試資料
現有訂單(共 50 筆)
- 客戶姓氏為「李」的訂單: 15 筆
- 狀態為「已確認」: 5 筆
- 狀態為「設計中」: 3 筆
- 狀態為「待確認」: 7 筆
- 客戶姓氏為「王」的訂單: 20 筆
- 客戶姓氏為「張」的訂單: 15 筆
When(執行操作)
測試案例 1: 搜尋 + 狀態過濾
步驟 1: 輸入搜尋關鍵字
- 店員在搜尋框輸入「李」(搜尋客戶姓名)
步驟 2: 選擇過濾條件
- 店員在「狀態」下拉選單中勾選「已確認」
步驟 3: 套用過濾
- 店員點擊「套用過濾」按鈕
Then(預期結果 - 測試案例 1)
API 請求
端點: GET /api/v1/orders?search=李&status=confirmed
API 響應
{
"orders": [
{
"orderId": "ABC-20251101-0005",
"customer": {
"name": "李大華"
},
"status": "confirmed",
"deliveryDate": "2025-11-05",
"totalAmount": 2520
},
{
"orderId": "ABC-20251102-0007",
"customer": {
"name": "李小明"
},
"status": "confirmed",
"deliveryDate": "2025-11-07",
"totalAmount": 3500
},
{
"orderId": "ABC-20251103-0012",
"customer": {
"name": "李美麗"
},
"status": "confirmed",
"deliveryDate": "2025-11-09",
"totalAmount": 1800
},
{
"orderId": "ABC-20251104-0018",
"customer": {
"name": "李志明"
},
"status": "confirmed",
"deliveryDate": "2025-11-10",
"totalAmount": 4200
},
{
"orderId": "ABC-20251105-0023",
"customer": {
"name": "李國華"
},
"status": "confirmed",
"deliveryDate": "2025-11-11",
"totalAmount": 2900
}
],
"pagination": {
"currentPage": 1,
"totalPages": 1,
"totalItems": 5,
"itemsPerPage": 20
}
}
UI 顯示
- 顯示 5 筆訂單(客戶姓氏為「李」且狀態為「已確認」)
- 顯示已套用的條件標籤:
- 「搜尋: 李」
- 「狀態: 已確認」
- 顯示「顯示 1-5 筆,共 5 筆訂單」
When(執行操作)
測試案例 2: 搜尋 + 狀態過濾 + 日期範圍
步驟 1: 保持搜尋與狀態過濾
- 搜尋框: 「李」
- 狀態: 「已確認」
步驟 2: 添加日期範圍
- 店員在「配送日期」選擇器中選擇:
- 開始日期: 2025-11-01
- 結束日期: 2025-11-08
步驟 3: 套用過濾
- 店員點擊「套用過濾」按鈕
Then(預期結果 - 測試案例 2)
API 請求
端點: GET /api/v1/orders?search=李&status=confirmed&deliveryDateFrom=2025-11-01&deliveryDateTo=2025-11-08
API 響應
{
"orders": [
{
"orderId": "ABC-20251101-0005",
"customer": {
"name": "李大華"
},
"status": "confirmed",
"deliveryDate": "2025-11-05",
"totalAmount": 2520
},
{
"orderId": "ABC-20251102-0007",
"customer": {
"name": "李小明"
},
"status": "confirmed",
"deliveryDate": "2025-11-07",
"totalAmount": 3500
}
],
"pagination": {
"currentPage": 1,
"totalPages": 1,
"totalItems": 2,
"itemsPerPage": 20
}
}
UI 顯示
- 顯示 2 筆訂單(同時符合所有條件)
- 顯示已套用的條件標籤:
- 「搜尋: 李」
- 「狀態: 已確認」
- 「配送日期: 2025-11-01 至 2025-11-08」
- 顯示「顯示 1-2 筆,共 2 筆訂單」
When(執行操作)
測試案例 3: 分頁導航(50 筆訂單)
步驟 1: 清空所有過濾條件
- 店員點擊「清空過濾」按鈕
- 系統顯示所有 50 筆訂單(每頁 20 筆)
步驟 2: 查看第 2 頁
- 店員點擊「下一頁」或「2」
- 系統跳轉至第 2 頁
Then(預期結果 - 測試案例 3)
API 請求
端點: GET /api/v1/orders?page=2&limit=20
API 響應
{
"orders": [
// 第 21-40 筆訂單...
],
"pagination": {
"currentPage": 2,
"totalPages": 3,
"totalItems": 50,
"itemsPerPage": 20,
"hasNextPage": true,
"hasPreviousPage": true
}
}
UI 顯示
- 顯示第 21-40 筆訂單
- 顯示「顯示 21-40 筆,共 50 筆訂單」
- 分頁導航:
- 「上一頁」按鈕啟用
- 當前頁碼「2」高亮
- 「下一頁」按鈕啟用
When(執行操作)
測試案例 4: 調整每頁筆數
步驟 1: 選擇每頁筆數
- 店員在「每頁顯示」下拉選單中選擇「50 筆/頁」
Then(預期結果 - 測試案例 4)
API 請求
端點: GET /api/v1/orders?page=1&limit=50
API 響應
{
"orders": [
// 所有 50 筆訂單...
],
"pagination": {
"currentPage": 1,
"totalPages": 1,
"totalItems": 50,
"itemsPerPage": 50,
"hasNextPage": false,
"hasPreviousPage": false
}
}
UI 顯示
- 顯示所有 50 筆訂單
- 顯示「顯示 1-50 筆,共 50 筆訂單」
- 分頁導航消失(只有 1 頁)
驗證檢查清單
組合邏輯
- 搜尋 + 過濾採用 AND 邏輯(交集)
- 多個過濾條件採用 AND 邏輯
- 狀態多選採用 OR 邏輯(聯集)
分頁功能
- 顯示當前頁碼與總頁數
- 上一頁/下一頁按鈕正常
- 頁碼快速跳轉功能正常
- 每頁筆數調整功能正常
UI 互動
- 搜尋與過濾組合後自動跳回第 1 頁
- 已套用條件標籤正確顯示
- 清空過濾功能正常
效能
- 搜尋防抖功能正常(500ms)
- 快取機制正常(5 分鐘)
最後更新: 2025-11-03