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

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

104 lines
3.0 KiB
Python

"""催缴纳入规则与金额口径"""
from datetime import date
from decimal import Decimal
import unittest
from app.services.payment_chase import (
chase_period_money,
is_chase_candidate,
parse_due_date_ymd,
)
class TestChase(unittest.TestCase):
def test_chase_paid_includes_dfj_jfqrz_yjf(self):
"""与缴费信息期次一致:已缴 = dfj + jfqrz + yjf"""
paid, arrears = chase_period_money(
due_amount=Decimal("1000"),
transfers=[
{
"transferAmount": Decimal("300"),
"payStatus": "dfj",
"transferTime": "2026-04-01 10:00:00",
},
{
"transferAmount": Decimal("200"),
"payStatus": "jfqrz",
"transferTime": "2026-04-02 10:00:00",
},
{
"transferAmount": Decimal("100"),
"payStatus": "yjf",
"transferTime": "2026-04-03 10:00:00",
},
],
)
self.assertEqual(paid, Decimal("600"))
self.assertEqual(arrears, Decimal("400"))
def test_chase_full_display_paid_not_candidate(self):
paid, arrears = chase_period_money(
due_amount=Decimal("500"),
transfers=[
{
"transferAmount": Decimal("500"),
"payStatus": "dfj",
"transferTime": "2026-04-01 10:00:00",
}
],
)
self.assertEqual(paid, Decimal("500"))
self.assertEqual(arrears, Decimal("0"))
self.assertFalse(
is_chase_candidate(
due_date=date(2026, 9, 1),
today=date(2026, 10, 9),
arrears=arrears,
)
)
def test_overdue(self):
self.assertTrue(
is_chase_candidate(
due_date=date(2026, 9, 1),
today=date(2026, 10, 9),
arrears=Decimal("100"),
)
)
def test_within_30(self):
self.assertTrue(
is_chase_candidate(
due_date=date(2026, 11, 1),
today=date(2026, 10, 9),
arrears=Decimal("100"),
)
)
def test_beyond_30(self):
self.assertFalse(
is_chase_candidate(
due_date=date(2026, 11, 10),
today=date(2026, 10, 9),
arrears=Decimal("100"),
)
)
def test_zero_arrears(self):
self.assertFalse(
is_chase_candidate(
due_date=date(2026, 9, 1),
today=date(2026, 10, 9),
arrears=Decimal("0"),
)
)
def test_parse_due_date(self):
self.assertEqual(parse_due_date_ymd("20261009"), date(2026, 10, 9))
self.assertEqual(parse_due_date_ymd("2026-10-09"), date(2026, 10, 9))
if __name__ == "__main__":
unittest.main()