| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """协议单样本预计到达时间:运费批次改造后仍应可写回运输表。"""
- import unittest
- from datetime import datetime
- from unittest.mock import MagicMock, patch
- from app.crud.collection_protocol import save_sample_transports
- from app.crud.research_donation import _create_transport
- class TestSaveSampleTransportsEta(unittest.TestCase):
- @patch("app.crud.collection_protocol.generate_uuid", return_value="tr-1")
- @patch("app.crud.collection_protocol._soft_delete_transports_for_protocol")
- def test_accepts_eta_only_without_transport_type(self, _soft_del, _uuid):
- db = MagicMock()
- sample = MagicMock()
- sample.id = "s1"
- sample.sample_code = "SC001"
- save_sample_transports(
- db,
- collection_protocol_id="p1",
- tenant_no="t1",
- user_id="u1",
- saved_samples=[sample],
- input_samples=[
- {"transport": {"etaTime": "2026-10-12 14:30:00"}},
- ],
- )
- self.assertTrue(db.add.called)
- obj = db.add.call_args[0][0]
- self.assertEqual(obj.sample_id, "s1")
- self.assertEqual(obj.eta_time, datetime(2026, 10, 12, 14, 30, 0))
- self.assertEqual(obj.transport_type, "")
- @patch("app.crud.collection_protocol.generate_uuid", return_value="tr-2")
- @patch("app.crud.collection_protocol._soft_delete_transports_for_protocol")
- def test_accepts_top_level_eta_time_for_mobile(self, _soft_del, _uuid):
- db = MagicMock()
- sample = MagicMock()
- sample.id = "s2"
- sample.sample_code = "SC002"
- save_sample_transports(
- db,
- collection_protocol_id="p1",
- tenant_no="t1",
- user_id="u1",
- saved_samples=[sample],
- input_samples=[{"etaTime": "2026-10-13 09:00:00"}],
- )
- self.assertTrue(db.add.called)
- obj = db.add.call_args[0][0]
- self.assertEqual(obj.eta_time, datetime(2026, 10, 13, 9, 0, 0))
- @patch("app.crud.collection_protocol._soft_delete_transports_for_protocol")
- def test_skips_when_no_eta_and_no_transport_type(self, _soft_del):
- db = MagicMock()
- sample = MagicMock()
- sample.id = "s3"
- sample.sample_code = "SC003"
- save_sample_transports(
- db,
- collection_protocol_id="p1",
- tenant_no="t1",
- user_id="u1",
- saved_samples=[sample],
- input_samples=[{"transport": {"waybillNo": "SF123"}}],
- )
- db.add.assert_not_called()
- class TestDonationCreateTransportEta(unittest.TestCase):
- @patch("app.crud.research_donation.generate_uuid", return_value="dtr-1")
- def test_create_transport_accepts_eta_only(self, _uuid):
- db = MagicMock()
- now = datetime(2026, 10, 12, 10, 0, 0)
- obj = _create_transport(
- db,
- donation_id="d1",
- sample_id="s1",
- tenant_no="t1",
- user_id="u1",
- raw={"etaTime": "2026-10-15 16:00:00"},
- order_num=0,
- now=now,
- sample_code="SC001",
- )
- self.assertIsNotNone(obj)
- self.assertEqual(obj.eta_time, datetime(2026, 10, 15, 16, 0, 0))
- self.assertEqual(obj.transport_type, "")
- db.add.assert_called_once()
- if __name__ == "__main__":
- unittest.main()
|