# 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:** 1. Navigate đến InstanceMissionManager page 2. 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:** 1. Navigate đến InstanceMissionManager page 2. Mở browser DevTools > Network tab 3. 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:** 1. Navigate đến InstanceMissionManager page 2. Resize browser window 3. 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:** 1. Navigate đến InstanceMissionManager page 2. Đợi data load 3. 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:** 1. Load table với data 2. 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:** 1. Load table với missions ở các states khác nhau 2. 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:** 1. Load table với missions có score 2. Quan sát Score column **Kết quả mong đợi:** - Score hiển thị dưới dạng: `(score / totalScore) * 100` vớ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:** 1. Load table với missions 2. 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:** 1. Load table với missions ở các states khác nhau 2. 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:** 1. Load table với missions ở các states khác nhau 2. 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:** 1. Load table với nhiều missions (> page size) 2. Click vào page 2 3. 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:** 1. Load table 2. Thay đổi page size (10, 25, 50, 100) 3. 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:** 1. Load table với nhiều pages 2. Navigate: Page 1 → Page 2 → Page 3 → Page 1 3. 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:** 1. Load table 2. Nhập text vào search box 3. Đợi debounce (1 second) 4. 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:** 1. Load table 2. Nhập text vào search box 3. Nhấn Enter 4. 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:** 1. Load table 2. Nhập text vào search box 3. Click vào search icon (adornment) 4. 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:** 1. Search với một text 2. Clear search text (để trống) 3. Đợi debounce hoặc nhấn Enter 4. 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:** 1. Search với text chứa special characters (%, _, @, etc.) 2. 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:** 1. Click vào View Log button của một mission 2. 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:** 1. Click vào Cancel button của một Running mission 2. 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:** 1. Click vào Cancel button của một Running mission 2. Nhập reason (hoặc để trống) 3. Click Confirm 4. 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:** 1. Click vào Cancel button của một Running mission 2. Click Cancel trong dialog 3. 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:** 1. Simulate error khi cancel mission (disconnect network hoặc server error) 2. Click Cancel button và confirm 3. 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:** 1. Click vào Pause button của một Running mission 2. 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:** 1. Click vào Resume button của một Paused mission 2. 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:** 1. Load table 2. Thực hiện một action (cancel mission, etc.) 3. Click Refresh button 4. 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:** 1. Simulate error (disconnect network hoặc server error) 2. Navigate đến InstanceMissionManager page 3. 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:** 1. Block SignalR port hoặc tắt server 2. Navigate đến InstanceMissionManager page 3. 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:** 1. Tạo 1000+ missions 2. Load table 3. Navigate giữa các pages 4. 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:** 1. Load table với 1000+ missions 2. Search với text 3. 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:** 1. Load table khi không có missions 2. 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:** 1. Load table với missions 2. Search với text không match 3. 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:** 1. Resize browser window 2. Quan sát table height 3. 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:** 1. Navigate đến InstanceMissionManager page 2. Navigate away 3. 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:** 1. Login với một user 2. Cancel một mission 3. 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:** 1. Thực hiện các actions (cancel, pause, resume) 2. 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.*