51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
"""分期应缴日:小数月间隔(30 天/月)与提前天数规则"""
|
|
|
|
import unittest
|
|
|
|
from app.services.protocol_payment_installment import calc_fq_installment_due_date
|
|
|
|
|
|
class TestCalcFqInstallmentDueDate(unittest.TestCase):
|
|
def test_first_period_equals_start_date(self):
|
|
self.assertEqual(calc_fq_installment_due_date("20260604", 0, 0.5), "20260604")
|
|
|
|
def test_fractional_interval_half_month_six_periods(self):
|
|
start = "20260604"
|
|
interval = 0.5
|
|
expected = [
|
|
"20260604",
|
|
"20260520",
|
|
"20260604",
|
|
"20260619",
|
|
"20260705",
|
|
"20260720",
|
|
]
|
|
for i, exp in enumerate(expected):
|
|
self.assertEqual(
|
|
calc_fq_installment_due_date(start, i, interval),
|
|
exp,
|
|
msg=f"period {i + 1}",
|
|
)
|
|
|
|
def test_fractional_interval_0_1_advance_30_days(self):
|
|
# +3 天 = 20260607,再提前 30 天
|
|
self.assertEqual(calc_fq_installment_due_date("20260604", 1, 0.1), "20260508")
|
|
|
|
def test_integer_interval_six_months(self):
|
|
# +6 日历月 = 20261204,再提前 30 天
|
|
self.assertEqual(calc_fq_installment_due_date("20260604", 1, 6), "20261104")
|
|
|
|
def test_fractional_interval_0_3(self):
|
|
# index=2 → 0.6 月 → 18 天 → 20260622,再提前 30 天
|
|
self.assertEqual(calc_fq_installment_due_date("20260604", 2, 0.3), "20260523")
|
|
|
|
def test_custom_advance_days_15(self):
|
|
self.assertEqual(
|
|
calc_fq_installment_due_date("20260604", 1, 6, advance_days=15),
|
|
"20261119",
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|