"""样本运费:运输方式字典解析与关联规则""" 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("") if __name__ == "__main__": unittest.main()