test_sample_payment_schedule_validate.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. """样本各期应缴合计 vs 合同金额校验"""
  2. from decimal import Decimal
  3. import unittest
  4. from app.services.sample_payment_schedule_validate import (
  5. schedule_dues_match_contract,
  6. schedule_required_fields_ok,
  7. )
  8. class TestScheduleValidate(unittest.TestCase):
  9. def test_match(self):
  10. ok, msg = schedule_dues_match_contract(
  11. contract_amount=Decimal("1000"),
  12. schedules=[{"dueAmount": 600}, {"dueAmount": 400}],
  13. )
  14. self.assertTrue(ok)
  15. self.assertIsNone(msg)
  16. def test_mismatch(self):
  17. ok, msg = schedule_dues_match_contract(
  18. contract_amount=Decimal("1000"),
  19. schedules=[{"dueAmount": 600}, {"dueAmount": 300}],
  20. sample_code="S001",
  21. )
  22. self.assertFalse(ok)
  23. self.assertIn("900", msg or "")
  24. self.assertIn("1000", msg or "")
  25. self.assertIn("S001", msg or "")
  26. def test_skip_void(self):
  27. ok, msg = schedule_dues_match_contract(
  28. contract_amount=Decimal("500"),
  29. schedules=[
  30. {"dueAmount": 500, "scheduleStatus": "open"},
  31. {"dueAmount": 200, "scheduleStatus": "void"},
  32. ],
  33. )
  34. self.assertTrue(ok)
  35. self.assertIsNone(msg)
  36. def test_empty_schedules_skip(self):
  37. ok, msg = schedule_dues_match_contract(
  38. contract_amount=Decimal("1000"),
  39. schedules=[],
  40. )
  41. self.assertTrue(ok)
  42. self.assertIsNone(msg)
  43. def test_require_amount_and_due_date(self):
  44. ok, msg = schedule_dues_match_contract(
  45. contract_amount=Decimal("1000"),
  46. schedules=[
  47. {"dueAmount": None, "dueDate": "20261001"},
  48. {"dueAmount": 500, "dueDate": ""},
  49. ],
  50. sample_code="S1",
  51. require_schedule_fields=True,
  52. )
  53. self.assertFalse(ok)
  54. self.assertIn("应缴金额", msg or "")
  55. def test_require_fields_ok(self):
  56. ok, msg = schedule_required_fields_ok(
  57. schedules=[
  58. {"dueAmount": 500, "dueDate": "20261001"},
  59. {"dueAmount": 500, "due_date": "20261101"},
  60. ]
  61. )
  62. self.assertTrue(ok)
  63. self.assertIsNone(msg)