test_protocol_payment_installment.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. """分期应缴日:小数月间隔(30 天/月)与提前天数规则"""
  2. import unittest
  3. from app.services.protocol_payment_installment import calc_fq_installment_due_date
  4. class TestCalcFqInstallmentDueDate(unittest.TestCase):
  5. def test_first_period_equals_start_date(self):
  6. self.assertEqual(calc_fq_installment_due_date("20260604", 0, 0.5), "20260604")
  7. def test_fractional_interval_half_month_six_periods(self):
  8. start = "20260604"
  9. interval = 0.5
  10. expected = [
  11. "20260604",
  12. "20260520",
  13. "20260604",
  14. "20260619",
  15. "20260705",
  16. "20260720",
  17. ]
  18. for i, exp in enumerate(expected):
  19. self.assertEqual(
  20. calc_fq_installment_due_date(start, i, interval),
  21. exp,
  22. msg=f"period {i + 1}",
  23. )
  24. def test_fractional_interval_0_1_advance_30_days(self):
  25. # +3 天 = 20260607,再提前 30 天
  26. self.assertEqual(calc_fq_installment_due_date("20260604", 1, 0.1), "20260508")
  27. def test_integer_interval_six_months(self):
  28. # +6 日历月 = 20261204,再提前 30 天
  29. self.assertEqual(calc_fq_installment_due_date("20260604", 1, 6), "20261104")
  30. def test_fractional_interval_0_3(self):
  31. # index=2 → 0.6 月 → 18 天 → 20260622,再提前 30 天
  32. self.assertEqual(calc_fq_installment_due_date("20260604", 2, 0.3), "20260523")
  33. def test_custom_advance_days_15(self):
  34. self.assertEqual(
  35. calc_fq_installment_due_date("20260604", 1, 6, advance_days=15),
  36. "20261119",
  37. )
  38. if __name__ == "__main__":
  39. unittest.main()