"""样本缴费进度:状态码与已缴/待缴汇总""" from decimal import Decimal import unittest from app.services.sample_payment_progress import ( compute_sample_payment_progress, ) class TestSamplePaymentProgress(unittest.TestCase): def test_pending_when_no_transfers(self): r = compute_sample_payment_progress( schedules=[ {"scheduleStatus": "open", "dueAmount": Decimal("1000")}, ], transfers=[], ) self.assertEqual(r["progressStatus"], "dfj") self.assertEqual(r["paidAmount"], Decimal("0")) self.assertEqual(r["dueRemainAmount"], Decimal("1000")) self.assertEqual(r["clearedScheduleCount"], 0) self.assertEqual(r["activeScheduleCount"], 1) self.assertTrue(r["canConfirm"]) def test_confirming_wins_over_partial(self): r = compute_sample_payment_progress( schedules=[ {"id": "s1", "scheduleStatus": "open", "dueAmount": Decimal("1000")}, ], transfers=[ {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("200")}, {"scheduleId": "s1", "payStatus": "jfqrz", "transferAmount": Decimal("100")}, ], ) self.assertEqual(r["progressStatus"], "jfqrz") self.assertEqual(r["paidAmount"], Decimal("200")) self.assertFalse(r["canConfirm"]) def test_partial_paid(self): r = compute_sample_payment_progress( schedules=[ {"id": "s1", "scheduleStatus": "cleared", "dueAmount": Decimal("500")}, {"id": "s2", "scheduleStatus": "open", "dueAmount": Decimal("500")}, ], transfers=[ {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("500")}, ], ) self.assertEqual(r["progressStatus"], "bfyj") self.assertEqual(r["clearedScheduleCount"], 1) self.assertEqual(r["activeScheduleCount"], 2) self.assertTrue(r["canConfirm"]) def test_all_cleared(self): r = compute_sample_payment_progress( schedules=[ {"id": "s1", "scheduleStatus": "cleared", "dueAmount": Decimal("500")}, {"id": "s2", "scheduleStatus": "void", "dueAmount": Decimal("500")}, ], transfers=[ {"scheduleId": "s1", "payStatus": "yjf", "transferAmount": Decimal("500")}, ], ) self.assertEqual(r["progressStatus"], "yjq") self.assertEqual(r["activeScheduleCount"], 1) self.assertEqual(r["clearedScheduleCount"], 1) self.assertFalse(r["canConfirm"]) self.assertEqual(r["dueRemainAmount"], Decimal("0")) def test_void_schedules_ignored(self): r = compute_sample_payment_progress( schedules=[ {"scheduleStatus": "void", "dueAmount": Decimal("9999")}, {"scheduleStatus": "open", "dueAmount": Decimal("100")}, ], transfers=[], ) self.assertEqual(r["activeScheduleCount"], 1) self.assertEqual(r["dueRemainAmount"], Decimal("100")) if __name__ == "__main__": unittest.main()