59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
from __future__ import annotations
|
||
|
||
import os
|
||
import socket
|
||
from concurrent.futures import ThreadPoolExecutor
|
||
|
||
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
||
|
||
import pytest
|
||
from PySide6.QtWidgets import QApplication, QDialog, QPlainTextEdit, QWidget
|
||
|
||
from doctor_workstation.core.transcript_text import simplified_transcript
|
||
from doctor_workstation.ui.dialogs.diagnosis import DiagnosisDialog
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
("source", "expected"),
|
||
[
|
||
("你會說老家話嗎?很會,很會。", "你会说老家话吗?很会,很会。"),
|
||
("沒有過敏,沒有吃藥。0.5 mg,不是 5 mg。", "没有过敏,没有吃药。0.5 mg,不是 5 mg。"),
|
||
("血壓 120/80 mmHg,血糖 2.00–30.00 mmol/L,HbA1c 6.5%。",
|
||
"血压 120/80 mmHg,血糖 2.00–30.00 mmol/L,HbA1c 6.5%。"),
|
||
("唔係,冇食藥,咩事?", "唔系,冇食药,咩事?"),
|
||
("患者:口乾。\n醫生:不?\n患者:不。", "患者:口干。\n医生:不?\n患者:不。"),
|
||
("简体,不! \n0.5 mg\tB12", "简体,不! \n0.5 mg\tB12"),
|
||
("", ""),
|
||
],
|
||
)
|
||
def test_script_conversion_is_offline_and_preserves_clinical_tokens(monkeypatch, source, expected):
|
||
def no_network(*args, **kwargs):
|
||
pytest.fail("Script conversion must use bundled dictionaries only")
|
||
|
||
monkeypatch.setattr(socket.socket, "connect", no_network)
|
||
# A fresh thread loads its own dictionaries, even when a prior test ran.
|
||
with ThreadPoolExecutor(max_workers=1) as pool:
|
||
assert pool.submit(simplified_transcript, source).result() == expected
|
||
assert simplified_transcript(expected) == expected
|
||
|
||
|
||
def test_historical_transcript_dialog_displays_simplified_without_changing_record(monkeypatch):
|
||
application = QApplication.instance() or QApplication([])
|
||
parent = QWidget()
|
||
record = {"transcript_text": "患者:你會說老家話嗎?\n患者:沒有吃藥,0.5 mg。"}
|
||
source = DiagnosisDialog._call_transcript_text(record)
|
||
displayed = []
|
||
|
||
def inspect(dialog):
|
||
displayed.append(dialog.findChild(QPlainTextEdit, "DiagnosisCallTranscriptText").toPlainText())
|
||
return 0
|
||
|
||
monkeypatch.setattr(QDialog, "exec", inspect)
|
||
try:
|
||
DiagnosisDialog._view_call_transcript(parent, 12, source)
|
||
assert displayed == ["患者:你会说老家话吗?\n患者:没有吃药,0.5 mg。"]
|
||
assert record["transcript_text"] == source
|
||
finally:
|
||
parent.close()
|
||
application.processEvents()
|