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()