17 KiB
ScriptEditor Test Cases
Tổng quan
ScriptEditor là component chính của Script Engine Editor, bao gồm:
- Sidebar: FileExplorer, VariableManager, TaskManager, MissionManager (có thể resize ngang)
- Editor Area: Monaco Editor để chỉnh sửa script files (có thể resize dọc)
- Console Panel: Hiển thị logs từ ScriptEngine (có thể resize dọc)
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ị loading overlay khi khởi tạo
Mô tả: Kiểm tra loading overlay hiển thị khi Workspace chưa được khởi tạo.
Các bước:
- Navigate đến ScriptEditor page
- Quan sát UI trong quá trình loading
Kết quả mong đợi:
- Loading overlay (MudOverlay với MudProgressCircular) hiển thị ngay lập tức
- Overlay có dark background và modal
- Overlay không tự động đóng (AutoClose="false")
- Overlay biến mất khi Workspace.IsInitialized = true
TC-002: Khởi tạo SignalR connections
Mô tả: Kiểm tra các SignalR connections được khởi tạo đúng.
Các bước:
- Navigate đến ScriptEditor page
- Mở browser DevTools > Network tab
- Quan sát SignalR connections
Kết quả mong đợi:
- FileManagerHub connection được khởi tạo
- ScriptManagerHub connection được khởi tạo
- Connections thành công (status 101 Switching Protocols)
- Không có lỗi connection trong console
TC-003: Request edit permission khi khởi tạo
Mô tả: Kiểm tra edit permission được request tự động khi khởi tạo.
Các bước:
- Navigate đến ScriptEditor page
- Quan sát Network tab hoặc server logs
Kết quả mong đợi:
- RequestEditPermission được gọi tự động
- Permission được grant nếu ScriptEngine state là Idle
- Permission bị từ chối nếu ScriptEngine state không phải Idle
- Workspace.IsReadOnly được set đúng dựa trên permission
TC-004: Khởi tạo Workspace với metadata references
Mô tả: Kiểm tra Workspace được khởi tạo với đúng metadata references.
Các bước:
- Navigate đến ScriptEditor page
- Đợi loading hoàn tất
- Mở một file trong editor
Kết quả mong đợi:
- Workspace.Initialize được gọi với đúng parameters:
- Metadata references từ ScriptResource
- Using namespaces
- AppGlobalType
- Root folder structure
- Editor có IntelliSense hoạt động đúng
- Không có lỗi trong console
TC-005: Khởi tạo JavaScript resize handlers
Mô tả: Kiểm tra JavaScript module cho resize handlers được load đúng.
Các bước:
- Navigate đến ScriptEditor page
- Đợi loading hoàn tất
- Thử resize sidebar hoặc console
Kết quả mong đợi:
- scriptEditorResize.js được load thành công
- initializeLayout được gọi
- Sidebar có thể resize ngang
- Console có thể resize dọc
- Editor area điều chỉnh kích thước đúng
2. Test Cases - Layout và Resize
TC-006: Resize sidebar ngang
Mô tả: Kiểm tra sidebar có thể resize ngang.
Các bước:
- Hover vào border bên phải của sidebar
- Drag để resize
- Quan sát UI
Kết quả mong đợi:
- Cursor đổi thành col-resize khi hover
- Border highlight khi hover
- Sidebar width thay đổi khi drag
- Editor area điều chỉnh width tự động
- Min width: 200px, Max width: 600px
- Width được giữ lại sau khi refresh (nếu có persistence)
TC-007: Resize console panel dọc
Mô tả: Kiểm tra console panel có thể resize dọc.
Các bước:
- Hover vào resizer giữa Editor và Console
- Drag để resize
- Quan sát UI
Kết quả mong đợi:
- Cursor đổi thành row-resize khi hover
- Resizer highlight khi hover
- Console height thay đổi khi drag
- Editor area điều chỉnh height tự động
- Min height cho editor: 200px
- Height được giữ lại sau khi refresh (nếu có persistence)
TC-008: Layout responsive khi resize window
Mô tả: Kiểm tra layout điều chỉnh đúng khi resize browser window.
Các bước:
- Resize browser window
- Quan sát layout
Kết quả mong đợi:
- Sidebar, Editor, Console điều chỉnh kích thước đúng
- Không có overflow hoặc scroll không mong muốn
- Layout vẫn hoạt động tốt ở các kích thước khác nhau
3. Test Cases - Edit Permission
TC-009: Edit permission được grant khi state là Idle
Mô tả: Kiểm tra edit permission được grant khi ScriptEngine state là Idle.
Các bước:
- Đảm bảo ScriptEngine state là Idle
- Navigate đến ScriptEditor page
- Thử edit một file
Kết quả mong đợi:
- RequestEditPermission thành công
- HasEditPermission trả về true
- Workspace.IsReadOnly = false
- Editor cho phép edit (không readonly)
- FileExplorer cho phép tạo/xóa/rename
TC-010: Edit permission bị từ chối khi state không phải Idle
Mô tả: Kiểm tra edit permission bị từ chối khi ScriptEngine state không phải Idle.
Các bước:
- Đảm bảo ScriptEngine state là Ready hoặc Running
- Navigate đến ScriptEditor page
- Thử edit một file
Kết quả mong đợi:
- RequestEditPermission vẫn được gọi (luôn thành công)
- HasEditPermission trả về false (vì state không phải Idle)
- Workspace.IsReadOnly = true
- Editor readonly (không cho phép edit)
- FileExplorer không cho phép tạo/xóa/rename
TC-011: Edit permission bị revoke từ client khác
Mô tả: Kiểm tra edit permission bị revoke khi client khác request permission.
Các bước:
- Mở ScriptEditor trên 2 clients (Client A và Client B)
- Client A có edit permission
- Client B request edit permission
- Quan sát Client A
Kết quả mong đợi:
- Client A nhận EditPermissionRevoked event
- PermissionRevokedDialog hiển thị trên Client A
- Workspace.IsReadOnly = true trên Client A
- Editor trở thành readonly trên Client A
- Dialog chỉ có thể đóng bằng nút Reload (không thể click outside hoặc Escape)
TC-012: Revoke edit permission khi dispose
Mô tả: Kiểm tra edit permission được revoke khi component dispose.
Các bước:
- Navigate đến ScriptEditor page
- Có edit permission
- Navigate away hoặc close tab
- Quan sát server logs
Kết quả mong đợi:
- RevokeEditPermission được gọi trước khi disconnect
- Permission được clear trên server
- Không có lỗi trong console
4. Test Cases - Component Integration
TC-013: FileExplorer tích hợp với Editor
Mô tả: Kiểm tra FileExplorer tích hợp đúng với Editor.
Các bước:
- Click vào một file trong FileExplorer
- Quan sát Editor
Kết quả mong đợi:
- File được mở trong Editor
- Editor hiển thị đúng nội dung file
- Workspace.CurrentFile được set đúng
- Editor header hiển thị tên file
TC-014: Editor tích hợp với Console
Mô tả: Kiểm tra Editor tích hợp đúng với Console.
Các bước:
- Build scripts từ Editor
- Quan sát Console
Kết quả mong đợi:
- Build messages hiển thị trong Console
- Error messages hiển thị trong Console
- Warning messages hiển thị trong Console
- Info messages hiển thị trong Console
TC-015: VariableManager tích hợp với ScriptEngine
Mô tả: Kiểm tra VariableManager hiển thị đúng variables từ ScriptEngine.
Các bước:
- Build scripts thành công
- Quan sát VariableManager trong sidebar
Kết quả mong đợi:
- Variables được load và hiển thị
- Chỉ hiển thị variables có PublicRead = true
- Values được hiển thị đúng
- Có thể edit variables có PublicWrite = true
TC-016: TaskManager tích hợp với ScriptEngine
Mô tả: Kiểm tra TaskManager hiển thị đúng tasks từ ScriptEngine.
Các bước:
- Build scripts thành công
- Start ScriptEngine
- Quan sát TaskManager trong sidebar
Kết quả mong đợi:
- Tasks được load và hiển thị khi state là Ready hoặc Running
- Task states được hiển thị đúng
- Có thể enable/disable tasks
- Tasks với AutoStart = true tự động start
TC-017: MissionManager tích hợp với ScriptEngine
Mô tả: Kiểm tra MissionManager hiển thị đúng missions từ ScriptEngine.
Các bước:
- Build scripts thành công
- Start ScriptEngine
- Quan sát MissionManager trong sidebar
Kết quả mong đợi:
- Missions được load và hiển thị khi state là Ready hoặc Running
- Mission parameters được hiển thị đúng
- Có thể instantiate missions
- Missions với AutoStart = true tự động start
5. Test Cases - State Management
TC-018: UI cập nhật khi ScriptEngine state thay đổi
Mô tả: Kiểm tra UI cập nhật đúng khi ScriptEngine state thay đổi.
Các bước:
- Build scripts
- Quan sát Editor header buttons
- Start ScriptEngine
- Quan sát Editor header buttons
Kết quả mong đợi:
- Build button enabled khi state là Idle hoặc BuildError
- Start button enabled khi state là Ready
- Stop button enabled khi state là Running
- Reset button enabled khi state là Idle, Ready, BuildError, Running, hoặc Fault
- Buttons disabled đúng theo state
TC-019: Editor readonly state theo ScriptEngine state
Mô tả: Kiểm tra Editor readonly state thay đổi theo ScriptEngine state.
Các bước:
- Đảm bảo ScriptEngine state là Idle
- Mở một file trong Editor
- Thử edit
- Build scripts (chuyển sang Ready state)
- Thử edit
Kết quả mong đợi:
- Editor cho phép edit khi state là Idle
- Editor trở thành readonly khi state không phải Idle
- Editor trở lại cho phép edit khi state quay về Idle
TC-020: Workspace state đồng bộ với ScriptEngine
Mô tả: Kiểm tra Workspace state đồng bộ đúng với ScriptEngine state.
Các bước:
- Thực hiện các thao tác (build, start, stop, reset)
- Kiểm tra Workspace state
Kết quả mong đợi:
- Workspace.IsReadOnly đồng bộ với ScriptEngine state
- Workspace.CurrentFile được cập nhật đúng
- Workspace.Folders và Workspace.Files được cập nhật đúng
6. Test Cases - Error Handling
TC-021: Xử lý lỗi khi SignalR connection fail
Mô tả: Kiểm tra xử lý lỗi khi SignalR connection không thể kết nối.
Các bước:
- Tắt server hoặc block SignalR port
- Navigate đến ScriptEditor page
- Quan sát UI
Kết quả mong đợi:
- Loading overlay vẫn hiển thị
- Error message hiển thị (nếu có)
- Không crash ứng dụng
- Có thể retry connection
TC-022: Xử lý lỗi khi JavaScript module không load
Mô tả: Kiểm tra xử lý lỗi khi scriptEditorResize.js không load được.
Các bước:
- Block scriptEditorResize.js trong browser DevTools
- Navigate đến ScriptEditor page
- Quan sát UI
Kết quả mong đợi:
- JSException được catch
- Ứng dụng vẫn hoạt động (không crash)
- Resize có thể không hoạt động nhưng không ảnh hưởng chức năng khác
TC-023: Xử lý lỗi khi Workspace initialization fail
Mô tả: Kiểm tra xử lý lỗi khi Workspace initialization thất bại.
Các bước:
- Simulate lỗi trong ResourceResolver hoặc FileManagerClient
- Navigate đến ScriptEditor page
- Quan sát UI
Kết quả mong đợi:
- Exception được catch
- Loading overlay có thể không biến mất hoặc hiển thị error
- Không crash ứng dụng
- Error message hiển thị cho user
7. Test Cases - Cleanup và Dispose
TC-024: Cleanup khi component dispose
Mô tả: Kiểm tra cleanup đúng khi component dispose.
Các bước:
- Navigate đến ScriptEditor page
- Navigate away
- Quan sát Network tab và console
Kết quả mong đợi:
- EditPermissionRevoked event được unsubscribe
- JavaScript module cleanup được gọi
- Edit permission được revoke
- SignalR connections được stop
- Không có memory leaks
- Không có lỗi trong console
TC-025: Xử lý JSDisconnectedException khi dispose
Mô tả: Kiểm tra xử lý JSDisconnectedException khi JS context đã disconnect.
Các bước:
- Navigate đến ScriptEditor page
- Close tab đột ngột
- Quan sát server logs
Kết quả mong đợi:
- JSDisconnectedException được catch
- Không có lỗi trong server logs
- Cleanup vẫn được thực hiện đúng
8. Test Cases - Performance
TC-026: Performance khi khởi tạo với nhiều files
Mô tả: Kiểm tra performance khi workspace có nhiều files.
Các bước:
- Tạo workspace với 100+ files
- Navigate đến ScriptEditor page
- Đo thời gian loading
Kết quả mong đợi:
- Loading time < 5 giây cho 100 files
- UI không bị freeze
- Workspace initialization hoàn tất trong thời gian hợp lý
TC-027: Performance khi resize layout
Mô tả: Kiểm tra performance khi resize sidebar và console.
Các bước:
- Resize sidebar liên tục
- Resize console liên tục
- Quan sát performance
Kết quả mong đợi:
- Resize mượt mà, không lag
- UI responsive
- Không có jank hoặc stutter
9. Test Cases - Edge Cases
TC-028: Multiple clients cùng lúc
Mô tả: Kiểm tra behavior khi có nhiều clients mở cùng lúc.
Các bước:
- Mở ScriptEditor trên 3+ clients
- Thực hiện các thao tác trên các clients khác nhau
- Quan sát behavior
Kết quả mong đợi:
- Chỉ 1 client có edit permission tại một thời điểm
- Clients khác được notify khi permission bị revoke
- File changes được sync qua SignalR events
- Không có conflict hoặc race conditions
TC-029: Reconnect sau khi disconnect
Mô tả: Kiểm tra behavior khi SignalR reconnect.
Các bước:
- Navigate đến ScriptEditor page
- Disconnect network tạm thời
- Reconnect network
- Quan sát behavior
Kết quả mong đợi:
- SignalR tự động reconnect
- State được reload sau khi reconnect
- Edit permission được request lại
- UI cập nhật đúng
TC-030: Navigate away và quay lại
Mô tả: Kiểm tra behavior khi navigate away và quay lại.
Các bước:
- Navigate đến ScriptEditor page
- Navigate đến page khác
- Navigate quay lại ScriptEditor
- Quan sát behavior
Kết quả mong đợi:
- Component được dispose đúng khi navigate away
- Component được khởi tạo lại khi quay lại
- State được reload
- Không có memory leaks
Checklist Test Execution
Pre-conditions
- Ứng dụng đã được build thành công
- Server đang chạy
- Database có dữ liệu test
- ScriptEngine đã được configure đúng
Test Environment
- Browser: Chrome/Firefox/Edge (latest version)
- Screen resolution: 1920x1080 hoặc tương đương
- Network: Stable connection
- JavaScript enabled
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 browsers khác nhau
Known Issues và Limitations
Đã Fix
- ✅ Edit permission không được request tự động khi khởi tạo
- ✅ Workspace không được khởi tạo đúng khi SignalR chưa connect
- ✅ Loading overlay không hiển thị đúng
Cần theo dõi
- Performance khi có quá nhiều files (>1000 items)
- Memory leak khi navigate nhiều lần
- SignalR reconnection behavior trong môi trường network không ổn định
Test Priority
High Priority (P0)
- TC-001, TC-002, TC-003, TC-004, TC-009, TC-010, TC-011, TC-013, TC-018, TC-019, TC-024
Medium Priority (P1)
- TC-005, TC-006, TC-007, TC-008, TC-012, TC-014, TC-015, TC-016, TC-017, TC-020, TC-021, TC-022, TC-023
Low Priority (P2)
- TC-025, TC-026, TC-027, TC-028, TC-029, TC-030
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]
Tài liệu này được tạo tự động và cần được cập nhật khi có thay đổi trong ScriptEditor component.