This commit is contained in:
Your Name
2026-08-12 18:09:57 +08:00
parent a1092c02c3
commit b2eb18c75f
391 changed files with 1666 additions and 638 deletions
+89 -11
View File
@@ -132,10 +132,20 @@ def test_nested_appointments_confirmation_and_prescription_labels() -> None:
prescription_action_label({"prescription_audit_status": 1, "prescription_void_status": 0})
== "查看处方"
)
assert (
prescription_action_label({"prescription_audit_status": 1, "prescription_void_status": 1})
== ""
)
assert (
prescription_action_label({"prescription_audit_status": 1, "prescription_void_status": 1})
== "编辑处"
)
assert (
prescription_action_label(
{
"has_prescription": 1,
"prescription_audit_status": 0,
"prescription_void_status": 0,
}
)
== "编辑处方"
)
def test_default_query_matches_admin_today_and_page_size_contract(
@@ -313,7 +323,7 @@ def test_prescription_query_error_is_fail_closed_without_diagnosis_fallback(
application.processEvents()
def test_new_prescription_uses_authoritative_case_snapshot_and_exact_ids(
def test_new_prescription_uses_authoritative_case_snapshot_and_exact_ids(
application: QApplication,
immediate_async: None,
monkeypatch: pytest.MonkeyPatch,
@@ -321,8 +331,16 @@ def test_new_prescription_uses_authoritative_case_snapshot_and_exact_ids(
calls: list[tuple[str, int]] = []
created: list[dict[str, Any]] = []
dialog_seeds: list[dict[str, Any]] = []
case_record = {
"diagnosis": {"id": 501, "patient_name": "林晓岚", "chief_complaint": "咳嗽"},
case_record = {
"diagnosis": {
"id": 501,
"patient_name": "林晓岚",
"chief_complaint": "咳嗽",
"tongue": "面象哨兵",
"tongue_image": "舌象哨兵",
"pulse": "脉象哨兵",
"pulse_condition": "脉象详情哨兵",
},
"patient": {"id": 301, "gender": 2, "age": 36},
}
@@ -370,10 +388,70 @@ def test_new_prescription_uses_authoritative_case_snapshot_and_exact_ids(
assert created[0]["appointment_id"] == 202
assert created[0]["case_record"] == case_record
assert created[0]["case_record"] is not case_record
assert dialog_seeds[0]["case_record"] == case_record
assert dialog_seeds[0]["case_record"] is not case_record
page.close()
application.processEvents()
assert dialog_seeds[0]["case_record"] == case_record
assert dialog_seeds[0]["case_record"] is not case_record
assert dialog_seeds[0]["tongue"] == "面象哨兵"
assert dialog_seeds[0]["tongue_image"] == "舌象哨兵"
assert dialog_seeds[0]["pulse"] == "脉象哨兵"
assert dialog_seeds[0]["pulse_condition"] == "脉象详情哨兵"
page.close()
application.processEvents()
def test_existing_pending_prescription_is_edited_in_place_not_duplicated(
application: QApplication,
immediate_async: None,
monkeypatch: pytest.MonkeyPatch,
) -> None:
updated: list[tuple[int, dict[str, Any]]] = []
created: list[dict[str, Any]] = []
existing = {
"id": 901,
"diagnosis_id": 501,
"patient_name": "林晓岚",
"audit_status": 0,
"void_status": 0,
"clinical_diagnosis": "气虚",
"herbs": [{"medicine_id": 31, "name": "黄芪", "dosage": 15}],
}
class Repository:
def get_prescription_by_appointment(self, appointment_id: int) -> dict[str, Any]:
assert appointment_id == 202
return existing
def update_prescription(
self, prescription: int, changes: dict[str, Any]
) -> dict[str, Any]:
updated.append((prescription, dict(changes)))
return {"id": prescription}
def create_prescription(self, prescription: dict[str, Any]) -> dict[str, Any]:
created.append(dict(prescription))
return {"id": 999}
def list_consultations(self, **_kwargs: Any) -> dict[str, Any]:
return {"lists": [], "count": 0}
class AcceptedEditor:
def __init__(self, _repository: Any, source: Any, **kwargs: Any) -> None:
assert source is existing
assert kwargs["mode"] == "edit"
def exec(self) -> QDialog.DialogCode:
return QDialog.DialogCode.Accepted
def payload(self) -> dict[str, Any]:
return {"id": 901, "clinical_diagnosis": "气血两虚"}
monkeypatch.setattr(consultations_module, "PrescriptionEditorDialog", AcceptedEditor)
page = ConsultationsPage(Repository(), permissions=PermissionSet(["*"]))
page._begin_prescription_load(_row(appointment_id=202), mode="open")
assert updated == [(901, {"id": 901, "clinical_diagnosis": "气血两虚"})]
assert created == []
page.close()
application.processEvents()
def test_switching_rows_invalidates_prescription_worker_and_clears_busy(