This commit is contained in:
Your Name
2026-09-10 15:33:21 +08:00
parent caab2cabe3
commit bbe3e870a1
2 changed files with 112 additions and 10 deletions
+66 -2
View File
@@ -250,6 +250,69 @@ def test_list_batches_visible_ids_and_stops_on_hide(application: QApplication, i
assert repository.calls == calls
def test_blank_list_row_has_no_ai_display_or_entry_points(application: QApplication, immediate: None, monkeypatch: pytest.MonkeyPatch) -> None:
repository = Repository()
opened = []
monkeypatch.setattr(page_module, "present_issued_prescription_ai", lambda *args, **kwargs: opened.append(kwargs))
page = page_module.PrescriptionsPage(repository, ["*"])
page.resize(1366, 800)
page.show()
application.processEvents()
# Demo row 801 contains herbs; row 802 is an empty manual prescription.
assert all(call[1] == [801] for call in repository.calls if call[0] == "statuses")
assert not page.table.isColumnHidden(11) and not page.table.isColumnHidden(12)
page._ai_statuses[802] = batch(prescription_id=802)
page._render_ai_statuses()
for column in (11, 12):
item = page.table.item(1, column)
assert item.text() == item.toolTip() == item.data(Qt.ItemDataRole.AccessibleTextRole) == ""
assert not any(button.accessibleName() == "AI 报告" for button in page.table.cellWidget(1, 2).findChildren(QPushButton))
page.table.selectRow(1)
assert page.ai_report_button.isHidden() and not page.ai_report_button.isEnabled()
page._open_ai_report()
page.table.itemClicked.emit(page.table.item(1, 11))
page.table.itemClicked.emit(page.table.item(1, 12))
page._open_ai_context_menu(page.table.visualItemRect(page.table.item(1, 1)).center())
assert not hasattr(page, "_ai_context_menu")
assert opened == []
page.table.selectRow(0)
assert page.ai_report_button.isVisible() and page.ai_report_button.isEnabled()
page.ai_report_button.click()
assert opened == [{"prescription_id": 801}]
page.close()
@pytest.mark.parametrize("blank_fields", [
{"is_system_auto": "1", "herbs": []},
{"is_system_auto": True, "herbs": [{"name": "黄芪"}]},
{"is_system_auto": 0, "herbs": [{}, {"name": " "}]},
{"is_system_auto": 0, "herbs": None},
])
def test_all_blank_list_hides_ai_until_prescription_is_saved(application: QApplication, immediate: None, monkeypatch: pytest.MonkeyPatch, blank_fields: dict[str, Any]) -> None:
repository = Repository()
row = {"id": 803, "sn": "RX-BLANK", "patient_name": "测试患者", **blank_fields}
monkeypatch.setattr(repository, "list_prescriptions", lambda **_filters: {"lists": [row], "count": 1})
page = page_module.PrescriptionsPage(repository, ["*"])
page.resize(1366, 800)
page.show()
application.processEvents()
assert page.table.isColumnHidden(11) and page.table.isColumnHidden(12)
assert page.ai_report_button.isHidden() and page.ai_status_notice.isHidden()
assert not page._ai_timer.isActive()
assert not any(call[0] == "statuses" for call in repository.calls)
assert not any(button.accessibleName() == "AI 报告" for button in page.table.cellWidget(0, 2).findChildren(QPushButton))
row.update(is_system_auto=0, herbs=[{"name": "黄芪", "dosage": 12}])
page.refresh()
application.processEvents()
assert ("statuses", [803]) in repository.calls
assert not page.table.isColumnHidden(11) and not page.table.isColumnHidden(12)
assert page.ai_report_button.isVisible() and page.ai_status_notice.isVisible()
assert "千问 0%" in page.table.item(0, 12).text()
assert any(button.accessibleName() == "AI 报告" for button in page.table.cellWidget(0, 2).findChildren(QPushButton))
page.close()
def test_list_disabled_explains_availability_and_keeps_history(application: QApplication, immediate: None) -> None:
repository = Repository()
repository.enabled = False
@@ -447,8 +510,9 @@ def test_context_menu_targets_clicked_prescription(application: QApplication, im
page.resize(1366, 800)
page.show()
application.processEvents()
item = page.table.item(1, 1)
expected_id = page.table.item(1, 0).data(Qt.ItemDataRole.UserRole).id
page.table.selectRow(1)
item = page.table.item(0, 1)
expected_id = page.table.item(0, 0).data(Qt.ItemDataRole.UserRole).id
page._open_ai_context_menu(page.table.visualItemRect(item).center())
page._ai_context_menu.actions()[0].trigger()
assert opened == [{"prescription_id": expected_id}]