质检样本接收列表与弹窗需查看采集协议侧附件。后端待接收/已接收列表补齐协议附件字段;前端列表增加知情同意书缩略图,接收弹窗右侧改为上运输、下协议附件分组展示。 关联 #43 Co-authored-by: Cursor <cursoragent@cursor.com>
130 lines
4.2 KiB
Python
130 lines
4.2 KiB
Python
"""样本接收列表项应携带协议侧附件字段,供质检查看。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
from unittest.mock import patch
|
|
|
|
|
|
class _FakeQuery:
|
|
def filter(self, *args, **kwargs):
|
|
return self
|
|
|
|
def all(self):
|
|
return []
|
|
|
|
def first(self):
|
|
return None
|
|
|
|
|
|
class _FakeDb:
|
|
def query(self, *args, **kwargs):
|
|
return _FakeQuery()
|
|
|
|
|
|
class TestSampleReceptionProtocolAttachments(unittest.TestCase):
|
|
def test_cell_storage_item_includes_protocol_consent_health_files(self):
|
|
from app.crud import sample_reception as svc
|
|
|
|
protocol = SimpleNamespace(
|
|
id="proto-1",
|
|
protocol_no="P1",
|
|
protocol_status="effective",
|
|
protocol_attachments="http://a/p.pdf",
|
|
consent_form_urls="http://a/c.pdf",
|
|
health_survey_form_urls="http://a/h.pdf",
|
|
)
|
|
sample = SimpleNamespace(
|
|
id="sample-1",
|
|
sample_code="S001",
|
|
sample_type_id="t1",
|
|
collect_amount=None,
|
|
sample_status="",
|
|
)
|
|
party = SimpleNamespace(mother_name="妈妈", newborn_name="宝宝")
|
|
transport = SimpleNamespace(
|
|
eta_time=None,
|
|
transport_type="",
|
|
waybill_no="",
|
|
express_company_id="",
|
|
carrier_name="",
|
|
carrier_phone="",
|
|
)
|
|
|
|
with patch.object(
|
|
svc,
|
|
"urls_to_attachment_list",
|
|
side_effect=lambda urls, *_a, **_k: [{"fileUrl": urls}] if urls else [],
|
|
), patch.object(svc, "sample_special_to_dict", return_value={}), patch.object(
|
|
svc.prod_reception_svc, "get_map_by_reception_ids", return_value={}
|
|
), patch(
|
|
"app.services.qc_work_order_fee_summary.build_protocol_payment_summaries",
|
|
return_value={},
|
|
):
|
|
items = svc._rows_to_sample_list_items(
|
|
_FakeDb(),
|
|
[(sample, protocol, party, transport)],
|
|
"t1",
|
|
reception_map={},
|
|
)
|
|
|
|
self.assertEqual(len(items), 1)
|
|
item = items[0]
|
|
self.assertEqual(item["protocolAttachmentFiles"][0]["fileUrl"], "http://a/p.pdf")
|
|
self.assertEqual(item["consentAttachmentFiles"][0]["fileUrl"], "http://a/c.pdf")
|
|
self.assertEqual(item["healthSurveyAttachmentFiles"][0]["fileUrl"], "http://a/h.pdf")
|
|
|
|
def test_donation_item_includes_consent_infectious_other_files(self):
|
|
from app.crud import sample_reception as svc
|
|
|
|
donation = SimpleNamespace(
|
|
id="don-1",
|
|
donation_no="D1",
|
|
donation_status="effective",
|
|
consent_form_urls="http://a/c.pdf",
|
|
infectious_disease_report_urls="http://a/i.pdf",
|
|
attachment_urls="http://a/o.pdf",
|
|
)
|
|
sample = SimpleNamespace(
|
|
id="ds-1",
|
|
sample_code="D001",
|
|
sample_type_id="t1",
|
|
collect_amount=None,
|
|
)
|
|
party = SimpleNamespace(mother_name="妈妈", newborn_name="宝宝")
|
|
transport = SimpleNamespace(
|
|
eta_time=None,
|
|
transport_type="",
|
|
waybill_no="",
|
|
express_company_id="",
|
|
carrier_name="",
|
|
carrier_phone="",
|
|
)
|
|
|
|
with patch.object(
|
|
svc,
|
|
"urls_to_attachment_list",
|
|
side_effect=lambda urls, *_a, **_k: [{"fileUrl": urls}] if urls else [],
|
|
), patch.object(svc, "sample_special_to_dict", return_value={}), patch.object(
|
|
svc.prod_reception_svc, "get_map_by_reception_ids", return_value={}
|
|
):
|
|
items = svc._donation_rows_to_sample_list_items(
|
|
_FakeDb(),
|
|
[(sample, donation, party, transport)],
|
|
"t1",
|
|
reception_map={},
|
|
)
|
|
|
|
self.assertEqual(len(items), 1)
|
|
item = items[0]
|
|
self.assertEqual(item["consentAttachmentFiles"][0]["fileUrl"], "http://a/c.pdf")
|
|
self.assertEqual(
|
|
item["infectiousDiseaseReportAttachmentFiles"][0]["fileUrl"], "http://a/i.pdf"
|
|
)
|
|
self.assertEqual(item["attachmentFiles"][0]["fileUrl"], "http://a/o.pdf")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|