Files
zkxw/backend/tests/test_sample_payment_fgd_convert.py
T
zlwuandCursor db31990ebe feat: 细胞存储缴费催缴、统一样本信息与协议支付能力增强
汇总近期业务改动:催缴菜单与后端、样本信息快捷登记与进度、运费关联、客户档案扩展、协议优惠/期次与押金划转,并同步 SQL 迁移与管理端页面收敛。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 21:20:37 +08:00

57 lines
2.7 KiB
Python

"""fq → fgd:软删后续期,剩余欠缴并入第一期未清期"""
from decimal import Decimal
import unittest
from app.services.sample_payment_fgd_convert import plan_fq_to_fgd_merge
class TestFgdConvert(unittest.TestCase):
def test_merge_into_period_3(self):
schedules = [
{"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("5000"), "scheduleStatus": "cleared"},
{"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("5000"), "scheduleStatus": "cleared"},
{"id": "s3", "scheduleNo": 3, "dueAmount": Decimal("5000"), "scheduleStatus": "open"},
{"id": "s4", "scheduleNo": 4, "dueAmount": Decimal("5000"), "scheduleStatus": "open"},
{"id": "s5", "scheduleNo": 5, "dueAmount": Decimal("5000"), "scheduleStatus": "open"},
{"id": "s6", "scheduleNo": 6, "dueAmount": Decimal("4800"), "scheduleStatus": "open"},
]
transfers = [
{"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("5000")},
{"scheduleId": "s2", "payStatus": "yjf", "transferAmount": Decimal("5000")},
]
plan = plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers)
self.assertEqual(plan["targetScheduleId"], "s3")
self.assertEqual(plan["newDueAmount"], Decimal("19800"))
self.assertEqual(set(plan["softDeleteScheduleIds"]), {"s4", "s5", "s6"})
self.assertEqual(plan["newInstallmentCount"], 3)
def test_allow_when_jfqrz(self):
"""缴费确认中不再阻断分改趸并期规划。"""
schedules = [
{"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
{"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
]
transfers = [
{"scheduleId": "s1", "payStatus": "jfqrz", "transferAmount": Decimal("500")},
]
plan = plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers)
self.assertEqual(plan["targetScheduleId"], "s1")
self.assertEqual(set(plan["softDeleteScheduleIds"]), {"s2"})
def test_reject_when_later_period_has_yjf(self):
schedules = [
{"id": "s1", "scheduleNo": 1, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
{"id": "s2", "scheduleNo": 2, "dueAmount": Decimal("1000"), "scheduleStatus": "open"},
]
transfers = [
{"scheduleId": "s2", "payStatus": "yjf", "transferAmount": Decimal("1000")},
]
with self.assertRaises(ValueError) as ctx:
plan_fq_to_fgd_merge(schedules=schedules, transfers=transfers)
self.assertIn("后续期", str(ctx.exception))
if __name__ == "__main__":
unittest.main()