| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- """样本运费:运输方式字典解析与关联规则"""
- import unittest
- from decimal import Decimal
- from unittest.mock import MagicMock
- from app.services.sample_transport_mode import resolve_transport_mode_value
- class TestResolveTransportMode(unittest.TestCase):
- def test_empty_raises(self):
- db = MagicMock()
- with self.assertRaises(ValueError):
- resolve_transport_mode_value(db, tenant_no="zkxw", raw="", user_id=None)
- def test_hit_by_value(self):
- db = MagicMock()
- type_exists = MagicMock()
- row = MagicMock(dict_value="sfkd", dict_label="顺丰快递", del_flag=0)
- db.query.return_value.filter.return_value.first.side_effect = [type_exists, row]
- self.assertEqual(
- resolve_transport_mode_value(db, tenant_no="zkxw", raw="sfkd", user_id=None),
- "sfkd",
- )
- def test_hit_by_label_then_create_path_not_called(self):
- db = MagicMock()
- type_exists = MagicMock()
- miss = None
- hit = MagicMock(dict_value="zxc", dict_label="专线车", del_flag=0)
- db.query.return_value.filter.return_value.first.side_effect = [
- type_exists,
- miss,
- hit,
- ]
- self.assertEqual(
- resolve_transport_mode_value(db, tenant_no="zkxw", raw="专线车", user_id=None),
- "zxc",
- )
- db.add.assert_not_called()
- class TestFreightAmountValidation(unittest.TestCase):
- def test_negative_rejected(self):
- from app.crud.sample_freight import _parse_amount
- with self.assertRaises(ValueError):
- _parse_amount(-1)
- def test_zero_ok(self):
- from app.crud.sample_freight import _parse_amount
- self.assertEqual(_parse_amount(0), Decimal("0"))
- def test_empty_rejected(self):
- from app.crud.sample_freight import _parse_amount
- with self.assertRaises(ValueError):
- _parse_amount(None)
- with self.assertRaises(ValueError):
- _parse_amount("")
- class TestFreightListHelpers(unittest.TestCase):
- def test_item_dict_has_enrichment_keys(self):
- from app.crud.sample_freight import _item_to_dict_enriched
- class I:
- id = "i1"
- freight_id = "f1"
- sample_source = "cell_storage"
- sample_id = "s1"
- sample_code = "CODE1"
- protocol_id = "p1"
- d = _item_to_dict_enriched(
- I(),
- protocol_no="CP001",
- sample_type_name="脐带血",
- mother_name="张三",
- newborn_name="张小宝",
- )
- self.assertEqual(d["protocolNo"], "CP001")
- self.assertEqual(d["sampleTypeName"], "脐带血")
- self.assertEqual(d["sampleSource"], "cell_storage")
- self.assertEqual(d["motherName"], "张三")
- self.assertEqual(d["newbornName"], "张小宝")
- def test_row_dict_includes_create_by(self):
- from app.crud.sample_freight import _row_to_dict
- class F:
- id = "f1"
- freight_no = "YF20261008001"
- transport_mode = "sfkd"
- freight_amount = Decimal("10.00")
- tenant_no = "zkxw"
- order_num = 0
- remark = None
- create_by = "u1"
- create_time = None
- update_time = None
- d = _row_to_dict(F(), linked_sample_count=2, create_by_name="张三")
- self.assertEqual(d["createBy"], "u1")
- self.assertEqual(d["createByName"], "张三")
- self.assertEqual(d["linkedSampleCount"], 2)
- self.assertEqual(d["freightNo"], "YF20261008001")
- class TestGenerateFreightNo(unittest.TestCase):
- def test_first_of_day(self):
- from datetime import datetime
- from app.crud.sample_freight import _generate_freight_no
- db = MagicMock()
- db.query.return_value.filter.return_value.order_by.return_value.first.return_value = None
- no = _generate_freight_no(db, "zkxw", when=datetime(2026, 10, 8, 12, 0, 0))
- self.assertEqual(no, "YF20261008001")
- def test_increments_from_existing(self):
- from datetime import datetime
- from app.crud.sample_freight import _generate_freight_no
- db = MagicMock()
- db.query.return_value.filter.return_value.order_by.return_value.first.return_value = (
- "YF20261008003",
- )
- no = _generate_freight_no(db, "zkxw", when=datetime(2026, 10, 8, 12, 0, 0))
- self.assertEqual(no, "YF20261008004")
- def test_rejects_over_999(self):
- from datetime import datetime
- from app.crud.sample_freight import _generate_freight_no
- db = MagicMock()
- db.query.return_value.filter.return_value.order_by.return_value.first.return_value = (
- "YF20261008999",
- )
- with self.assertRaises(ValueError):
- _generate_freight_no(db, "zkxw", when=datetime(2026, 10, 8, 12, 0, 0))
- if __name__ == "__main__":
- unittest.main()
|