test_sample_freight.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """样本运费:运输方式字典解析与关联规则"""
  2. import unittest
  3. from decimal import Decimal
  4. from unittest.mock import MagicMock
  5. from app.services.sample_transport_mode import resolve_transport_mode_value
  6. class TestResolveTransportMode(unittest.TestCase):
  7. def test_empty_raises(self):
  8. db = MagicMock()
  9. with self.assertRaises(ValueError):
  10. resolve_transport_mode_value(db, tenant_no="zkxw", raw="", user_id=None)
  11. def test_hit_by_value(self):
  12. db = MagicMock()
  13. type_exists = MagicMock()
  14. row = MagicMock(dict_value="sfkd", dict_label="顺丰快递", del_flag=0)
  15. db.query.return_value.filter.return_value.first.side_effect = [type_exists, row]
  16. self.assertEqual(
  17. resolve_transport_mode_value(db, tenant_no="zkxw", raw="sfkd", user_id=None),
  18. "sfkd",
  19. )
  20. def test_hit_by_label_then_create_path_not_called(self):
  21. db = MagicMock()
  22. type_exists = MagicMock()
  23. miss = None
  24. hit = MagicMock(dict_value="zxc", dict_label="专线车", del_flag=0)
  25. db.query.return_value.filter.return_value.first.side_effect = [
  26. type_exists,
  27. miss,
  28. hit,
  29. ]
  30. self.assertEqual(
  31. resolve_transport_mode_value(db, tenant_no="zkxw", raw="专线车", user_id=None),
  32. "zxc",
  33. )
  34. db.add.assert_not_called()
  35. class TestFreightAmountValidation(unittest.TestCase):
  36. def test_negative_rejected(self):
  37. from app.crud.sample_freight import _parse_amount
  38. with self.assertRaises(ValueError):
  39. _parse_amount(-1)
  40. def test_zero_ok(self):
  41. from app.crud.sample_freight import _parse_amount
  42. self.assertEqual(_parse_amount(0), Decimal("0"))
  43. def test_empty_rejected(self):
  44. from app.crud.sample_freight import _parse_amount
  45. with self.assertRaises(ValueError):
  46. _parse_amount(None)
  47. with self.assertRaises(ValueError):
  48. _parse_amount("")
  49. if __name__ == "__main__":
  50. unittest.main()