Files
Denso/docs/ScriptEngine/ScriptEditor_TestCases.md
2026-07-03 16:31:37 +07:00

582 lines
17 KiB
Markdown

# 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:**
1. Navigate đến ScriptEditor page
2. 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:**
1. Navigate đến ScriptEditor page
2. Mở browser DevTools > Network tab
3. 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:**
1. Navigate đến ScriptEditor page
2. 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:**
1. Navigate đến ScriptEditor page
2. Đợi loading hoàn tất
3. 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:**
1. Navigate đến ScriptEditor page
2. Đợi loading hoàn tất
3. 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:**
1. Hover vào border bên phải của sidebar
2. Drag để resize
3. 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:**
1. Hover vào resizer giữa Editor và Console
2. Drag để resize
3. 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:**
1. Resize browser window
2. 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:**
1. Đảm bảo ScriptEngine state là Idle
2. Navigate đến ScriptEditor page
3. 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:**
1. Đảm bảo ScriptEngine state là Ready hoặc Running
2. Navigate đến ScriptEditor page
3. 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:**
1. Mở ScriptEditor trên 2 clients (Client A và Client B)
2. Client A có edit permission
3. Client B request edit permission
4. 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:**
1. Navigate đến ScriptEditor page
2. Có edit permission
3. Navigate away hoặc close tab
4. 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:**
1. Click vào một file trong FileExplorer
2. 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:**
1. Build scripts từ Editor
2. 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:**
1. Build scripts thành công
2. 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:**
1. Build scripts thành công
2. Start ScriptEngine
3. 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:**
1. Build scripts thành công
2. Start ScriptEngine
3. 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:**
1. Build scripts
2. Quan sát Editor header buttons
3. Start ScriptEngine
4. 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:**
1. Đảm bảo ScriptEngine state là Idle
2. Mở một file trong Editor
3. Thử edit
4. Build scripts (chuyển sang Ready state)
5. 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:**
1. Thực hiện các thao tác (build, start, stop, reset)
2. 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:**
1. Tắt server hoặc block SignalR port
2. Navigate đến ScriptEditor page
3. 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:**
1. Block scriptEditorResize.js trong browser DevTools
2. Navigate đến ScriptEditor page
3. 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:**
1. Simulate lỗi trong ResourceResolver hoặc FileManagerClient
2. Navigate đến ScriptEditor page
3. 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:**
1. Navigate đến ScriptEditor page
2. Navigate away
3. 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:**
1. Navigate đến ScriptEditor page
2. Close tab đột ngột
3. 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:**
1. Tạo workspace với 100+ files
2. Navigate đến ScriptEditor page
3. Đ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:**
1. Resize sidebar liên tục
2. Resize console liên tục
3. 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:**
1. Mở ScriptEditor trên 3+ clients
2. Thực hiện các thao tác trên các clients khác nhau
3. 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:**
1. Navigate đến ScriptEditor page
2. Disconnect network tạm thời
3. Reconnect network
4. 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:**
1. Navigate đến ScriptEditor page
2. Navigate đến page khác
3. Navigate quay lại ScriptEditor
4. 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.*