Files
zkxw/backend/tests/test_protocol_sample_eta.py
2026-10-13 15:18:01 +08:00

101 lines
3.3 KiB
Python

"""协议单样本预计到达时间:运费批次改造后仍应可写回运输表。"""
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()