test_sample_payment_progress.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. """样本缴费进度:状态码与已缴/待缴汇总"""
  2. from decimal import Decimal
  3. import unittest
  4. from app.services.sample_payment_progress import (
  5. compute_sample_payment_progress,
  6. )
  7. class TestSamplePaymentProgress(unittest.TestCase):
  8. def test_pending_when_no_transfers(self):
  9. r = compute_sample_payment_progress(
  10. schedules=[
  11. {"scheduleStatus": "open", "dueAmount": Decimal("1000")},
  12. ],
  13. transfers=[],
  14. )
  15. self.assertEqual(r["progressStatus"], "dfj")
  16. self.assertEqual(r["paidAmount"], Decimal("0"))
  17. self.assertEqual(r["dueRemainAmount"], Decimal("1000"))
  18. self.assertEqual(r["clearedScheduleCount"], 0)
  19. self.assertEqual(r["activeScheduleCount"], 1)
  20. self.assertTrue(r["canConfirm"])
  21. def test_confirming_wins_over_partial(self):
  22. r = compute_sample_payment_progress(
  23. schedules=[
  24. {"id": "s1", "scheduleStatus": "open", "dueAmount": Decimal("1000")},
  25. ],
  26. transfers=[
  27. {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("200")},
  28. {"scheduleId": "s1", "payStatus": "jfqrz", "transferAmount": Decimal("100")},
  29. ],
  30. )
  31. self.assertEqual(r["progressStatus"], "jfqrz")
  32. self.assertEqual(r["paidAmount"], Decimal("200"))
  33. self.assertFalse(r["canConfirm"])
  34. def test_partial_paid(self):
  35. r = compute_sample_payment_progress(
  36. schedules=[
  37. {"id": "s1", "scheduleStatus": "cleared", "dueAmount": Decimal("500")},
  38. {"id": "s2", "scheduleStatus": "open", "dueAmount": Decimal("500")},
  39. ],
  40. transfers=[
  41. {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("500")},
  42. ],
  43. )
  44. self.assertEqual(r["progressStatus"], "bfyj")
  45. self.assertEqual(r["clearedScheduleCount"], 1)
  46. self.assertEqual(r["activeScheduleCount"], 2)
  47. self.assertTrue(r["canConfirm"])
  48. def test_all_cleared(self):
  49. r = compute_sample_payment_progress(
  50. schedules=[
  51. {"id": "s1", "scheduleStatus": "cleared", "dueAmount": Decimal("500")},
  52. {"id": "s2", "scheduleStatus": "void", "dueAmount": Decimal("500")},
  53. ],
  54. transfers=[
  55. {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("500")},
  56. ],
  57. )
  58. self.assertEqual(r["progressStatus"], "yjq")
  59. self.assertEqual(r["activeScheduleCount"], 1)
  60. self.assertEqual(r["clearedScheduleCount"], 1)
  61. self.assertFalse(r["canConfirm"])
  62. self.assertEqual(r["dueRemainAmount"], Decimal("0"))
  63. def test_void_schedules_ignored(self):
  64. r = compute_sample_payment_progress(
  65. schedules=[
  66. {"scheduleStatus": "void", "dueAmount": Decimal("9999")},
  67. {"scheduleStatus": "open", "dueAmount": Decimal("100")},
  68. ],
  69. transfers=[],
  70. )
  71. self.assertEqual(r["activeScheduleCount"], 1)
  72. self.assertEqual(r["dueRemainAmount"], Decimal("100"))
  73. if __name__ == "__main__":
  74. unittest.main()