19 KiB
InstanceMissionManager Test Cases
Tổng quan
InstanceMissionManager là component để quản lý và hiển thị danh sách các instance missions (mission instances đã được tạo và chạy). Component sử dụng MudTable với server-side pagination và search.
Tài liệu này mô tả các test case cần thiết để đảm bảo component hoạt động đúng.
1. Test Cases - Khởi tạo và Loading
TC-001: Hiển thị table khi khởi tạo
Mô tả: Kiểm tra table hiển thị đúng khi component được load.
Các bước:
- Navigate đến InstanceMissionManager page
- Quan sát UI
Kết quả mong đợi:
- MudTable hiển thị với các columns: Mission Name, State, Score, Created At, Stopped At, Actions
- Loading indicator hiển thị khi đang load data
- Table height được tính toán đúng dựa trên container height
- Toolbar với search box và refresh button hiển thị
TC-002: Khởi tạo SignalR connection
Mô tả: Kiểm tra InstanceMissionHub connection được khởi tạo đúng.
Các bước:
- Navigate đến InstanceMissionManager page
- Mở browser DevTools > Network tab
- Quan sát SignalR connections
Kết quả mong đợi:
- InstanceMissionHub connection được khởi tạo
- Connection thành công (status 101 Switching Protocols)
- Không có lỗi connection trong console
TC-003: Tính toán table height động
Mô tả: Kiểm tra table height được tính toán đúng dựa trên container.
Các bước:
- Navigate đến InstanceMissionManager page
- Resize browser window
- Quan sát table height
Kết quả mong đợi:
- Table height được tính toán dựa trên container height
- Table height = container height - toolbar height - padding
- Table height cập nhật khi resize window
- Table không bị overflow
TC-004: Load data ban đầu
Mô tả: Kiểm tra data được load đúng khi component khởi tạo.
Các bước:
- Navigate đến InstanceMissionManager page
- Đợi data load
- Quan sát table
Kết quả mong đợi:
- LoadData được gọi với page 1, page size mặc định
- Data được hiển thị trong table
- Total items được hiển thị đúng trong pagination
- Loading indicator biến mất sau khi load xong
2. Test Cases - Table Display
TC-005: Hiển thị mission name
Mô tả: Kiểm tra mission name được hiển thị đúng.
Các bước:
- Load table với data
- Quan sát Mission Name column
Kết quả mong đợi:
- Mission name hiển thị đúng cho mỗi row
- Text không bị truncate không mong muốn
- Format đúng
TC-006: Hiển thị state với color coding
Mô tả: Kiểm tra state được hiển thị với đúng màu sắc.
Các bước:
- Load table với missions ở các states khác nhau
- Quan sát State column
Kết quả mong đợi:
- Running: Color.Success (green)
- Paused: Color.Warning (yellow)
- Pausing: Color.Warning (yellow)
- Resuming: Color.Info (blue)
- Completed: Color.Success (green)
- Canceled: Color.Default (gray)
- Error: Color.Error (red)
- Idle: Color.Default (gray)
- MudChip hiển thị đúng state name và color
TC-007: Hiển thị score percentage
Mô tả: Kiểm tra score được hiển thị dưới dạng percentage.
Các bước:
- Load table với missions có score
- Quan sát Score column
Kết quả mong đợi:
- Score hiển thị dưới dạng:
(score / totalScore) * 100với 2 decimal places - Format: "XX.XX%"
- Hiển thị "0.00%" nếu score = 0
- Hiển thị "100.00%" nếu score = totalScore
TC-008: Hiển thị Created At
Mô tả: Kiểm tra Created At được hiển thị đúng format.
Các bước:
- Load table với missions
- Quan sát Created At column
Kết quả mong đợi:
- Created At hiển thị format: "yyyy-MM-dd HH:mm:ss"
- Timezone đúng (UTC hoặc local time)
- Hiển thị cho tất cả missions
TC-009: Hiển thị Stopped At
Mô tả: Kiểm tra Stopped At chỉ hiển thị khi mission đã stopped.
Các bước:
- Load table với missions ở các states khác nhau
- Quan sát Stopped At column
Kết quả mong đợi:
- Stopped At hiển thị format: "yyyy-MM-dd HH:mm:ss" cho missions ở states: Canceled, Completed, Error
- Stopped At hiển thị "--" cho missions ở states khác (Running, Paused, etc.)
- Format đúng
TC-010: Hiển thị actions buttons theo state
Mô tả: Kiểm tra action buttons hiển thị đúng theo mission state.
Các bước:
- Load table với missions ở các states khác nhau
- Quan sát Actions column
Kết quả mong đợi:
- View Log button: Hiển thị cho tất cả missions
- Cancel button: Chỉ hiển thị cho Running, Paused, Pausing states
- Pause button: Chỉ hiển thị cho Running state
- Resume button: Chỉ hiển thị cho Paused state
- Buttons không hiển thị khi không applicable
3. Test Cases - Pagination
TC-011: Pagination hoạt động đúng
Mô tả: Kiểm tra pagination hoạt động đúng với server-side data.
Các bước:
- Load table với nhiều missions (> page size)
- Click vào page 2
- Quan sát data
Kết quả mong đợi:
- LoadData được gọi với page number đúng (MudTable uses 0-based, API uses 1-based)
- Data được load đúng cho page được chọn
- Total items được hiển thị đúng trong pagination
- Page number được highlight đúng
TC-012: Change page size
Mô tả: Kiểm tra thay đổi page size hoạt động đúng.
Các bước:
- Load table
- Thay đổi page size (10, 25, 50, 100)
- Quan sát data
Kết quả mong đợi:
- LoadData được gọi với page size mới
- Data được load đúng số lượng items theo page size
- Pagination cập nhật đúng
- Table height vẫn đúng
TC-013: Navigate giữa các pages
Mô tả: Kiểm tra navigate giữa các pages hoạt động đúng.
Các bước:
- Load table với nhiều pages
- Navigate: Page 1 → Page 2 → Page 3 → Page 1
- Quan sát data
Kết quả mong đợi:
- Data được load đúng cho mỗi page
- Loading indicator hiển thị khi đang load
- Không có duplicate data
- Page number được highlight đúng
4. Test Cases - Search
TC-014: Search bằng text input
Mô tả: Kiểm tra search hoạt động khi nhập text.
Các bước:
- Load table
- Nhập text vào search box
- Đợi debounce (1 second)
- Quan sát data
Kết quả mong đợi:
- Search được trigger sau 1 second debounce
- LoadData được gọi với TxtSearch parameter đúng
- Table reload với kết quả search
- Total items cập nhật theo kết quả search
TC-015: Search bằng Enter key
Mô tả: Kiểm tra search hoạt động khi nhấn Enter.
Các bước:
- Load table
- Nhập text vào search box
- Nhấn Enter
- Quan sát data
Kết quả mong đợi:
- Search được trigger ngay lập tức (không đợi debounce)
- LoadData được gọi với TxtSearch parameter đúng
- Table reload với kết quả search
TC-016: Search bằng search icon click
Mô tả: Kiểm tra search hoạt động khi click vào search icon.
Các bước:
- Load table
- Nhập text vào search box
- Click vào search icon (adornment)
- Quan sát data
Kết quả mong đợi:
- Search được trigger ngay lập tức
- LoadData được gọi với TxtSearch parameter đúng
- Table reload với kết quả search
TC-017: Search với empty text
Mô tả: Kiểm tra search với empty text trả về tất cả records.
Các bước:
- Search với một text
- Clear search text (để trống)
- Đợi debounce hoặc nhấn Enter
- Quan sát data
Kết quả mong đợi:
- LoadData được gọi với TxtSearch = ""
- Table reload với tất cả records
- Total items trở về tổng số records
TC-018: Search với special characters
Mô tả: Kiểm tra search hoạt động với special characters.
Các bước:
- Search với text chứa special characters (%, _, @, etc.)
- Quan sát data
Kết quả mong đợi:
- Search không crash
- Kết quả search đúng (hoặc empty nếu không match)
- Special characters được handle đúng
5. Test Cases - Actions
TC-019: View Log action
Mô tả: Kiểm tra View Log action mở dialog với đúng log content.
Các bước:
- Click vào View Log button của một mission
- Quan sát dialog
Kết quả mong đợi:
- MissionLogDialog được mở
- Dialog title: "Mission Log: {missionName}"
- Dialog hiển thị đúng log content
- Dialog có thể đóng bằng Close button
- Dialog size: MaxWidth.Large, FullWidth = true
TC-020: Cancel Mission action - Dialog
Mô tả: Kiểm tra Cancel Mission action mở dialog xác nhận.
Các bước:
- Click vào Cancel button của một Running mission
- Quan sát dialog
Kết quả mong đợi:
- CancelMissionDialog được mở
- Dialog title: "Cancel Mission"
- Dialog có input field để nhập reason
- Dialog có Cancel và Confirm buttons
- Dialog size: MaxWidth.Small, FullWidth = true
TC-021: Cancel Mission action - Success
Mô tả: Kiểm tra Cancel Mission action thành công.
Các bước:
- Click vào Cancel button của một Running mission
- Nhập reason (hoặc để trống)
- Click Confirm
- Quan sát UI
Kết quả mong đợi:
- CancelMissionAsync được gọi với mission ID và reason
- Reason format: "Canceled by {userName}: {userReason}" hoặc "Canceled by {userName}" nếu reason trống
- Success snackbar hiển thị
- Table reload để cập nhật state
- Mission state chuyển sang Canceled
TC-022: Cancel Mission action - Cancel dialog
Mô tả: Kiểm tra Cancel Mission action khi cancel dialog.
Các bước:
- Click vào Cancel button của một Running mission
- Click Cancel trong dialog
- Quan sát UI
Kết quả mong đợi:
- Dialog đóng
- Mission không bị cancel
- Table không reload
- Không có snackbar
TC-023: Cancel Mission action - Error handling
Mô tả: Kiểm tra error handling khi Cancel Mission fail.
Các bước:
- Simulate error khi cancel mission (disconnect network hoặc server error)
- Click Cancel button và confirm
- Quan sát UI
Kết quả mong đợi:
- Error được catch
- Error snackbar hiển thị với message
- Table không reload
- Mission state không thay đổi
TC-024: Pause Mission action
Mô tả: Kiểm tra Pause Mission action.
Các bước:
- Click vào Pause button của một Running mission
- Quan sát UI
Kết quả mong đợi:
- PauseMissionAsync được gọi với mission ID
- Success snackbar hiển thị nếu thành công
- Error snackbar hiển thị nếu thất bại
- Table có thể reload để cập nhật state (nếu có auto-refresh)
TC-025: Resume Mission action
Mô tả: Kiểm tra Resume Mission action.
Các bước:
- Click vào Resume button của một Paused mission
- Quan sát UI
Kết quả mong đợi:
- ResumeMissionAsync được gọi với mission ID
- Success snackbar hiển thị nếu thành công
- Error snackbar hiển thị nếu thất bại
- Table có thể reload để cập nhật state (nếu có auto-refresh)
TC-026: Refresh button
Mô tả: Kiểm tra Refresh button reload table data.
Các bước:
- Load table
- Thực hiện một action (cancel mission, etc.)
- Click Refresh button
- Quan sát data
Kết quả mong đợi:
- Table reload với data mới nhất
- Current page và search text được giữ nguyên
- Loading indicator hiển thị khi đang load
6. Test Cases - Error Handling
TC-027: Error khi load data fail
Mô tả: Kiểm tra error handling khi load data thất bại.
Các bước:
- Simulate error (disconnect network hoặc server error)
- Navigate đến InstanceMissionManager page
- Quan sát UI
Kết quả mong đợi:
- Exception được catch
- Error snackbar hiển thị: "Error loading missions: {errorMessage}"
- Table hiển thị empty state (No matching records found)
- Loading indicator biến mất
- Không crash ứng dụng
TC-028: Error khi SignalR connection fail
Mô tả: Kiểm tra error handling khi SignalR connection thất bại.
Các bước:
- Block SignalR port hoặc tắt server
- Navigate đến InstanceMissionManager page
- Quan sát UI
Kết quả mong đợi:
- Connection error được handle
- Table vẫn có thể load data (nếu server-side API vẫn hoạt động)
- Không crash ứng dụng
- Error message hiển thị nếu cần
7. Test Cases - Performance
TC-029: Performance khi load nhiều records
Mô tả: Kiểm tra performance khi có nhiều missions.
Các bước:
- Tạo 1000+ missions
- Load table
- Navigate giữa các pages
- Quan sát performance
Kết quả mong đợi:
- Table load trong thời gian hợp lý (< 2 giây cho mỗi page)
- Pagination hoạt động mượt mà
- UI không bị freeze
- Memory usage hợp lý
TC-030: Performance khi search
Mô tả: Kiểm tra performance khi search với nhiều records.
Các bước:
- Load table với 1000+ missions
- Search với text
- Quan sát performance
Kết quả mong đợi:
- Search hoàn tất trong thời gian hợp lý (< 2 giây)
- Debounce hoạt động đúng (không search mỗi keystroke)
- UI responsive
- Không có lag
8. Test Cases - Edge Cases
TC-031: Empty state - No missions
Mô tả: Kiểm tra hiển thị khi không có missions.
Các bước:
- Load table khi không có missions
- Quan sát UI
Kết quả mong đợi:
- Table hiển thị "No matching records found"
- Pagination hiển thị 0 items
- Search box vẫn hoạt động
- Refresh button vẫn hoạt động
TC-032: Empty state - No search results
Mô tả: Kiểm tra hiển thị khi search không có kết quả.
Các bước:
- Load table với missions
- Search với text không match
- Quan sát UI
Kết quả mong đợi:
- Table hiển thị "No matching records found"
- Pagination hiển thị 0 items
- Clear search trả về tất cả records
TC-033: Table height với toolbar height khác nhau
Mô tả: Kiểm tra table height tính toán đúng với toolbar height khác nhau.
Các bước:
- Resize browser window
- Quan sát table height
- Kiểm tra toolbar height
Kết quả mong đợi:
- Table height = container height - max(toolbar height, 64) - padding
- Table không bị overflow
- Table scroll hoạt động đúng
TC-034: Dispose và cleanup
Mô tả: Kiểm tra cleanup đúng khi component dispose.
Các bước:
- Navigate đến InstanceMissionManager page
- Navigate away
- Quan sát Network tab và console
Kết quả mong đợi:
- InstanceMissionHub connection được stop
- Không có memory leaks
- Không có lỗi trong console
9. Test Cases - Integration
TC-035: Tích hợp với Authentication
Mô tả: Kiểm tra tích hợp với authentication để lấy user name.
Các bước:
- Login với một user
- Cancel một mission
- Kiểm tra reason trong log
Kết quả mong đợi:
- User name được lấy từ AuthenticationStateProvider
- Reason format: "Canceled by {userName}: {reason}"
- User name đúng với user đã login
TC-036: Tích hợp với Snackbar
Mô tả: Kiểm tra snackbar hiển thị đúng cho các actions.
Các bước:
- Thực hiện các actions (cancel, pause, resume)
- Quan sát snackbar
Kết quả mong đợi:
- Success snackbar hiển thị khi action thành công
- Error snackbar hiển thị khi action thất bại
- Message đúng và rõ ràng
- Snackbar tự động dismiss sau vài giây
Checklist Test Execution
Pre-conditions
- Ứng dụng đã được build thành công
- Server đang chạy
- Database có dữ liệu test (missions)
- Authentication đã được configure
Test Environment
- Browser: Chrome/Firefox/Edge (latest version)
- Screen resolution: 1920x1080 hoặc tương đương
- Network: Stable connection
- User đã login
Test Execution Notes
- Ghi chú các bug phát hiện trong quá trình test
- Ghi lại screenshots cho các test case failed
- Ghi lại performance metrics nếu có vấn đề
- Test với nhiều số lượng missions khác nhau
Known Issues và Limitations
Đã Fix
- ✅ Table height không được tính toán đúng khi toolbar height thay đổi
- ✅ Search không hoạt động với Enter key
- ✅ Cancel mission reason không include user name
Cần theo dõi
- Performance khi có quá nhiều missions (>10000)
- Memory usage khi pagination với nhiều pages
- Auto-refresh khi mission state thay đổi (có thể cần thêm feature)
Test Priority
High Priority (P0)
- TC-001, TC-002, TC-004, TC-005, TC-006, TC-010, TC-011, TC-014, TC-019, TC-020, TC-021, TC-027
Medium Priority (P1)
- TC-003, TC-007, TC-008, TC-009, TC-012, TC-013, TC-015, TC-016, TC-017, TC-022, TC-023, TC-024, TC-025, TC-026, TC-028
Low Priority (P2)
- TC-018, TC-029, TC-030, TC-031, TC-032, TC-033, TC-034, TC-035, TC-036
Test Results Template
Test Case ID: TC-XXX
Test Date: YYYY-MM-DD
Tester: [Name]
Status: Pass/Fail/Blocked
Notes: [Any additional notes]
Screenshots: [If applicable]
Browser: [Browser name and version]
Missions Count: [Number of missions in test data]
Tài liệu này được tạo tự động và cần được cập nhật khi có thay đổi trong InstanceMissionManager component.