test_protocol_pay_mode_switch.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. """缴费模式切换校验"""
  2. import unittest
  3. from app.services.protocol_pay_mode_switch import validate_payment_details_for_save
  4. class TestValidatePaymentDetailsForSave(unittest.TestCase):
  5. def test_dj_single_dfj_full_contract(self):
  6. validate_payment_details_for_save(
  7. "dj",
  8. 10000,
  9. None,
  10. [{"payStatus": "dfj", "dueAmount": 10000}],
  11. )
  12. def test_dj_rejects_multiple_dfj(self):
  13. with self.assertRaises(ValueError) as ctx:
  14. validate_payment_details_for_save(
  15. "dj",
  16. 10000,
  17. None,
  18. [
  19. {"payStatus": "dfj", "dueAmount": 5000},
  20. {"payStatus": "dfj", "dueAmount": 5000},
  21. ],
  22. )
  23. self.assertIn("仅允许一条待缴费", str(ctx.exception))
  24. def test_dj_partial_paid_remaining(self):
  25. validate_payment_details_for_save(
  26. "dj",
  27. 10000,
  28. None,
  29. [
  30. {"payStatus": "yjf", "dueAmount": 2000},
  31. {"payStatus": "dfj", "dueAmount": 8000},
  32. ],
  33. )
  34. def test_dj_partial_paid_wrong_remaining(self):
  35. with self.assertRaises(ValueError):
  36. validate_payment_details_for_save(
  37. "dj",
  38. 10000,
  39. None,
  40. [
  41. {"payStatus": "yjf", "dueAmount": 2000},
  42. {"payStatus": "dfj", "dueAmount": 10000},
  43. ],
  44. )
  45. def test_fq_count_mismatch(self):
  46. with self.assertRaises(ValueError):
  47. validate_payment_details_for_save(
  48. "fq",
  49. 6000,
  50. 6,
  51. [{"payStatus": "dfj", "dueAmount": 6000}],
  52. )
  53. def test_fq_partial_paid_valid(self):
  54. validate_payment_details_for_save(
  55. "fq",
  56. 10000,
  57. 4,
  58. [
  59. {"payStatus": "yjf", "installmentNo": 1, "dueAmount": 2500},
  60. {"payStatus": "yjf", "installmentNo": 2, "dueAmount": 2500},
  61. {"payStatus": "dfj", "installmentNo": 3, "dueAmount": 2500},
  62. {"payStatus": "dfj", "installmentNo": 4, "dueAmount": 2500},
  63. ],
  64. )
  65. def test_fq_jfqrz_rejected(self):
  66. with self.assertRaises(ValueError):
  67. validate_payment_details_for_save(
  68. "fq",
  69. 6000,
  70. 2,
  71. [
  72. {"payStatus": "jfqrz", "dueAmount": 3000},
  73. {"payStatus": "dfj", "dueAmount": 3000},
  74. ],
  75. )
  76. def test_fq_ytf_rejected(self):
  77. with self.assertRaises(ValueError):
  78. validate_payment_details_for_save(
  79. "fq",
  80. 6000,
  81. 2,
  82. [
  83. {"payStatus": "ytf", "dueAmount": 3000},
  84. {"payStatus": "dfj", "dueAmount": 3000},
  85. ],
  86. )
  87. def test_blocking_status_rejected(self):
  88. with self.assertRaises(ValueError):
  89. validate_payment_details_for_save(
  90. "dj",
  91. 10000,
  92. None,
  93. [{"payStatus": "jfqrz", "dueAmount": 10000}],
  94. )
  95. if __name__ == "__main__":
  96. unittest.main()