This commit is contained in:
Your Name
2026-08-12 17:18:56 +08:00
parent 28cd110dae
commit f48a66b611
24 changed files with 3095 additions and 233 deletions
+103
View File
@@ -7,6 +7,7 @@ from typing import Any
import pytest
from doctor_workstation.core.errors import ApiProtocolError
from doctor_workstation.core.models import Appointment, Consultation, PageResult, Prescription
from doctor_workstation.services.mock_repository import DemoDoctorRepository
from doctor_workstation.services.repository import (
@@ -76,6 +77,8 @@ class RecordingClient:
self.post_calls.append((endpoint, body))
if endpoint in {"tcm.prescription/add", "tcm.prescriptionOrder/create"}:
return {"id": 88}
if endpoint == "tcm.diagnosis/startCall":
return {"call_record_id": 901}
return {"ok": True}
@@ -253,6 +256,106 @@ def test_remote_new_contracts_use_exact_admin_endpoints_and_dtos() -> None:
} <= get_endpoints
def test_remote_transcription_endpoints_use_exact_normalized_dtos() -> None:
"""Realtime transcript persistence stays within the three audited POST DTOs."""
client = RecordingClient()
repository = RemoteDoctorRepository(client) # type: ignore[arg-type]
repository.start_call_transcription(501, 901, " session-1 ", language=" zh-CN ")
repository.upsert_call_transcript_segments(
501,
901,
"session-1",
[
{
"segment_id": "seg-1",
"speaker_user_id": "patient_301",
"speaker_role": "patient",
"timestamp": "1200",
"text": " patient words ",
}
],
)
repository.finish_call_transcription(
501,
901,
"session-1",
expected_segment_count=1,
status="completed",
)
assert client.post_calls == [
(
"tcm.diagnosis/startCallTranscription",
{
"diagnosis_id": 501,
"call_record_id": 901,
"transcription_session_id": "session-1",
"language": "zh-CN",
},
),
(
"tcm.diagnosis/upsertCallTranscriptSegments",
{
"diagnosis_id": 501,
"call_record_id": 901,
"transcription_session_id": "session-1",
"segments": [
{
"segment_id": "seg-1",
"speaker_user_id": "patient_301",
"speaker_role": "patient",
"timestamp": 1200,
"text": "patient words",
}
],
},
),
(
"tcm.diagnosis/finishCallTranscription",
{
"diagnosis_id": 501,
"call_record_id": 901,
"transcription_session_id": "session-1",
"expected_segment_count": 1,
"status": "completed",
},
),
]
def test_remote_start_call_requires_and_normalizes_current_record_id() -> None:
client = RecordingClient()
repository = RemoteDoctorRepository(client) # type: ignore[arg-type]
assert repository.start_call(501, 301) == {"call_record_id": 901}
assert client.post_calls == [
(
"tcm.diagnosis/startCall",
{"diagnosis_id": 501, "patient_id": 301, "call_type": 2},
)
]
@pytest.mark.parametrize(
"response",
[None, {}, {"ok": True}, {"call_record_id": 0}, {"callRecordId": -1}, {"id": True}],
)
def test_remote_start_call_rejects_missing_or_invalid_record_id(response: Any) -> None:
class StartCallClient(RecordingClient):
def post(self, endpoint: str, payload: dict[str, Any] | None = None) -> Any:
if endpoint == "tcm.diagnosis/startCall":
self.post_calls.append((endpoint, dict(payload or {})))
return response
return super().post(endpoint, payload)
repository = RemoteDoctorRepository(StartCallClient()) # type: ignore[arg-type]
with pytest.raises(ApiProtocolError, match="call_record"):
repository.start_call(501, 301)
@pytest.mark.parametrize(
"unsafe_reference",
[r"C:\records\tongue.jpg", r"\\server\share\report.pdf", "file:///tmp/a.jpg"],