This commit is contained in:
Your Name
2026-10-08 14:12:44 +08:00
parent 5543f45850
commit 1c9b093e08
7 changed files with 268 additions and 54 deletions
+48 -2
View File
@@ -197,6 +197,52 @@ def test_prescription_action_without_permission_does_not_call_ai_or_repository(
dialog.close()
@pytest.mark.parametrize(
("grants", "visible"),
[
(["tcm.diagnosis/aiAssistant"], False),
(["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang"], False),
(["tcm.diagnosis/aiAssistant", "tcm.diagnosis/aiGeneratePrescription"], False),
(["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang", "tcm.diagnosis/aiGeneratePrescription"], True),
],
)
def test_ai_prescription_quick_prompt_requires_both_permissions(
application: QApplication,
grants: list[str],
visible: bool,
) -> None:
dialog = AiConsultDialog(DemoDoctorRepository(), PermissionSet(grants))
buttons = dialog.findChildren(QPushButton, "AiConsultChipButton")
assert ("AI 生成处方" in [button.text() for button in buttons]) is visible
dialog.close()
def test_prescription_action_with_write_permission_but_without_ai_grant_is_blocked(
application: QApplication,
) -> None:
class Repository:
def create_prescription(self, _payload: Any) -> None:
raise AssertionError("must not create without AI prescription permission")
def generate_ai_prescription(self, _diagnosis_id: int) -> None:
raise AssertionError("must not generate without AI prescription permission")
dialog = AiConsultDialog(
Repository(),
PermissionSet(["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang"]),
)
dialog.diagnosis_id = 501
dialog._ask("开个处方")
application.processEvents()
bodies = [
browser.toPlainText()
for browser in dialog.findChildren(QTextBrowser, "AiConsultBubbleText")
]
assert any("没有 AI 生成处方权限" in body for body in bodies)
assert dialog._stream_worker is None
dialog.close()
def test_prescription_action_opens_editor_and_forces_current_diagnosis_ownership(
application: QApplication,
immediate_async: None,
@@ -298,7 +344,7 @@ def test_prescription_action_opens_editor_and_forces_current_diagnosis_ownership
dialog = AiConsultDialog(
Repository(),
PermissionSet(
["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang"]
["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang", "tcm.diagnosis/aiGeneratePrescription"]
),
parent=host,
)
@@ -366,7 +412,7 @@ def test_prescription_action_rejects_mismatched_patient_detail(
dialog = AiConsultDialog(
Repository(),
PermissionSet(
["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang"]
["tcm.diagnosis/aiAssistant", "tcm.diagnosis/chufang", "tcm.diagnosis/aiGeneratePrescription"]
),
)
dialog.diagnosis_id = 501