fix(qa): resolve DF-002/DF-003/DF-006, log Defect Management sheet
DF-002 (Co4E): node đã chạy xong (STEP_DONE) vẫn bị khoá edit — chỉ khoá khi node đang thực sự chạy (STEP_RUNNING). Phần "status sai khi back tab" đã được xử lý từ trước (2a5ee29/13e2c22), xác minh vẫn nguyên vẹn. DF-003: run.bat chỉ ẩn console ngay trước lúc chạy app, nên các bước kiểm tra (Python/thư viện/junction) phía trước vẫn hiện console một chút — ẩn ngay từ đầu file, hiện lại đúng lúc báo lỗi. DF-006 (Monitoring): options số dòng/trang đổi thành 5/10/20/50/100 (mặc định 20); EventTable giờ phân trang thật (next/prev, page_count) thay vì chỉ cắt top-N rồi bỏ phần còn lại. Thêm tests/test_co4e_edit_lock.py (chưa có test nào phủ hành vi khoá edit trước đó); viết lại tests/test_monitoring_page_size.py cho đúng options/phân trang mới. Cập nhật Task Tracking Template.xlsx — điền Bước tái hiện/Root Cause/ Cách xử lý/Regression Test/Evidence cho DF-002, DF-003, DF-005, DF-006 và dòng "Cowork/GraphRAG chỉ hiện khi chọn project" (qua Excel COM, để không làm mất shape/data-validation nâng cao khác trong file). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""DF-002 (phần b) — node đang chạy HOẶC đã chạy xong không cho edit thông
|
||||
tin trong Node. Trước khi sửa, ``_LOCKED_NODE_STATUSES`` khoá cả STEP_RUNNING
|
||||
lẫn STEP_DONE, nên một bước đã chạy xong không bao giờ sửa lại được nữa.
|
||||
|
||||
Fix: chỉ khoá khi bước ĐANG chạy (STEP_RUNNING) — chạy xong rồi thì mở khoá
|
||||
trở lại. Test này chốt cả nguồn sự thật (tuple
|
||||
``co4e_workflow_crud._LOCKED_NODE_STATUSES``) lẫn hành vi ở widget
|
||||
(``StepConfigPanel.set_locked``), để không bị hồi quy về hành vi cũ.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
||||
|
||||
import pytest
|
||||
|
||||
QApplication = pytest.importorskip("PySide6.QtWidgets").QApplication
|
||||
|
||||
from cowork_local.core.co4e import (
|
||||
STEP_DONE, STEP_ERROR, STEP_IDLE, STEP_PLANNED, STEP_RUNNING,
|
||||
)
|
||||
from cowork_local.presentation.co4e.co4e_workflow_crud import _LOCKED_NODE_STATUSES
|
||||
from cowork_local.presentation.co4e.node_property_panel import StepConfigPanel
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def qapp():
|
||||
app = QApplication.instance() or QApplication([])
|
||||
yield app
|
||||
|
||||
|
||||
def test_only_running_status_is_locked() -> None:
|
||||
"""Một bước đã chạy xong (STEP_DONE) phải sửa lại được — chỉ bước đang
|
||||
thực sự chạy (STEP_RUNNING) mới bị khoá."""
|
||||
assert _LOCKED_NODE_STATUSES == (STEP_RUNNING,)
|
||||
assert STEP_DONE not in _LOCKED_NODE_STATUSES
|
||||
assert STEP_IDLE not in _LOCKED_NODE_STATUSES
|
||||
assert STEP_ERROR not in _LOCKED_NODE_STATUSES
|
||||
assert STEP_PLANNED not in _LOCKED_NODE_STATUSES
|
||||
|
||||
|
||||
def test_set_locked_disables_then_reenables_edit_fields(qapp) -> None:
|
||||
panel = StepConfigPanel()
|
||||
panel.setEnabled(True) # panel starts disabled until a step is loaded
|
||||
|
||||
panel.set_locked(True)
|
||||
assert not panel.label_edit.isEnabled()
|
||||
assert not panel.instructions_edit.isEnabled()
|
||||
assert not panel.model_combo.isEnabled()
|
||||
|
||||
panel.set_locked(False)
|
||||
assert panel.label_edit.isEnabled()
|
||||
assert panel.instructions_edit.isEnabled()
|
||||
assert panel.model_combo.isEnabled()
|
||||
Reference in New Issue
Block a user