This commit is contained in:
Your Name
2026-08-13 11:54:00 +08:00
parent 07188e82f8
commit 72a5300b08
19 changed files with 1441 additions and 577 deletions
+87 -6
View File
@@ -7,9 +7,12 @@ from typing import Any
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
import pytest
from PySide6.QtCore import Qt
from PySide6.QtCore import QSize, Qt
from PySide6.QtGui import QColor, QImage, QPainter
from PySide6.QtPdf import QPdfDocument
from PySide6.QtWidgets import QApplication
from doctor_workstation import app as app_module
from doctor_workstation.core import PermissionSet
from doctor_workstation.services import DemoDoctorRepository
from doctor_workstation.ui.dialogs import prescription as dialog_module
@@ -530,8 +533,9 @@ def test_order_payload_and_a4_print_document(
assert "林晓岚" in rendered
assert "黄芪" in rendered
assert "酸枣仁" in rendered
assert "服药前请核对姓名、电话、医生等信息" in rendered
assert '<table align="center" class="paper" width="794" height="1123"' in rendered
assert "服药前请核对姓名、电话、医生等信息以及服法、医嘱等要点" in rendered
assert '<table align="center" class="paper" width="100%"' in rendered
assert 'height="1123"' not in rendered
assert '<col width="44"/><col/><col width="64"/><col width="24"/>' in rendered
assert "Rp." in rendered
assert "药房联" in rendered
@@ -539,18 +543,93 @@ def test_order_payload_and_a4_print_document(
assert "辅方" in rendered
assert "105克" in rendered
assert "84克" in rendered
assert "剂量:</span> 27克" in rendered
assert "剂量:</span> 27克" in rendered
assert "每天2次, 一次2袋, 每袋5g, 温水送服, 饭后" in rendered
assert "主服法:" in rendered
assert "辅服法:" in rendered
assert "处方编号:" in rendered
assert "流转编号(挂号):" in rendered
assert "成都双流甄养堂互联网医院有限公司 联系方式:4001667339" in rendered
assert "四川省成都市双流区黄甲街道黄龙大道二段280号" in rendered
user_rendered = render_prescription_html(prescription, variant="user")
assert "成都双流甄养堂互联网医院 处方笺" in user_rendered
assert "用量" in user_rendered
assert "总量" not in user_rendered
assert "主服法" not in user_rendered
assert "类型:" not in user_rendered
assert "黄芪 (15克)" not in user_rendered
assert "黄芪" in user_rendered
viewer = PrescriptionDetailDialog(prescription)
document_html = viewer.document.toHtml()
assert "用药 (单剂)" in document_html
assert viewer.document.idealWidth() == pytest.approx(794.0)
assert viewer.preview.__class__.__name__ == "_PrescriptionPaperPreview"
assert [viewer.tabs.tabText(index) for index in range(2)] == ["药房联", "处方联"]
viewer.close()
order.close()
application.processEvents()
def test_prescription_pdf_export_writes_visible_content(
application: QApplication,
tmp_path: Any,
) -> None:
prescription = {
"id": 12,
"sn": "CF-12",
"patient_name": "林晓岚",
"phone": "13800000000",
"gender": 0,
"age": 33,
"clinical_diagnosis": "脾气虚",
"doctor_name": "周医生",
"audit_status": 1,
"dose_count": 7,
"herbs": [{"name": "黄芪", "dosage": 15, "formula_type": "主方"}],
}
image = dialog_module.render_prescription_slip_image(prescription)
ink = dialog_module.count_slip_ink_pixels(image)
page = QImage(1240, 1754, QImage.Format.Format_RGB32)
page.fill(QColor("#ffffff"))
painter = QPainter(page)
dialog_module._draw_slip_image_on_page(painter, image)
painter.end()
page_ink = dialog_module.count_slip_ink_pixels(page)
png_path = tmp_path / "prescription-slip.png"
assert image.save(str(png_path), "PNG")
viewer = PrescriptionDetailDialog(prescription)
output = tmp_path / "prescription-slip.pdf"
app_module._install_chinese_translations(application)
viewer.export_pdf(output)
payload = output.read_bytes()
pdf = QPdfDocument()
assert pdf.load(str(output)) == QPdfDocument.Error.None_
assert pdf.pageCount() == 1
page_size = pdf.pagePointSize(0)
rendered_page = pdf.render(0, QSize(1240, 1754))
visible_ink = sum(
1
for y in range(0, rendered_page.height(), 3)
for x in range(0, rendered_page.width(), 3)
if (color := rendered_page.pixelColor(x, y)).alpha() > 0 and color.lightness() < 245
)
viewer.close()
application.processEvents()
assert dialog_module._ensure_slip_fonts()
assert image.format() == QImage.Format.Format_RGB32
assert image.width() >= 700
assert image.height() >= 400
assert ink > 200
assert page_ink > 200
assert png_path.stat().st_size > 40_000
assert payload.startswith(b"%PDF")
assert b"/Image" in payload or b"/XObject" in payload
assert len(payload) > 50_000
assert page_size.width() == pytest.approx(595.0, abs=2.0)
assert page_size.height() == pytest.approx(842.0, abs=2.0)
assert visible_ink > 1_000
def test_prescription_detail_can_open_immutable_case_record_tab(
application: QApplication,
) -> None:
@@ -569,7 +648,9 @@ def test_prescription_detail_can_open_immutable_case_record_tab(
}
viewer = PrescriptionDetailDialog(prescription, initial_tab="case")
assert viewer.tabs.count() == 2
assert viewer.tabs.count() == 3
assert viewer.tabs.tabText(0) == "药房联"
assert viewer.tabs.tabText(1) == "处方联"
assert viewer.tabs.tabText(viewer.tabs.currentIndex()) == "详细病历"
assert viewer.case_document is not None
case_html = viewer.case_document.toHtml()