更新
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user