Files
BQP/docs/ScriptEngine/ScriptEditor_TestCases.md
2026-07-13 09:25:40 +07:00

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:

  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.