"""样本接收列表项应携带协议侧附件字段,供质检查看。""" 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()