汇总近期业务改动:催缴菜单与后端、样本信息快捷登记与进度、运费关联、客户档案扩展、协议优惠/期次与押金划转,并同步 SQL 迁移与管理端页面收敛。 Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
"""样本各期应缴合计 vs 合同金额校验"""
|
|
|
|
from decimal import Decimal
|
|
import unittest
|
|
|
|
from app.services.sample_payment_schedule_validate import (
|
|
schedule_dues_match_contract,
|
|
schedule_required_fields_ok,
|
|
)
|
|
|
|
|
|
class TestScheduleValidate(unittest.TestCase):
|
|
def test_match(self):
|
|
ok, msg = schedule_dues_match_contract(
|
|
contract_amount=Decimal("1000"),
|
|
schedules=[{"dueAmount": 600}, {"dueAmount": 400}],
|
|
)
|
|
self.assertTrue(ok)
|
|
self.assertIsNone(msg)
|
|
|
|
def test_mismatch(self):
|
|
ok, msg = schedule_dues_match_contract(
|
|
contract_amount=Decimal("1000"),
|
|
schedules=[{"dueAmount": 600}, {"dueAmount": 300}],
|
|
sample_code="S001",
|
|
)
|
|
self.assertFalse(ok)
|
|
self.assertIn("900", msg or "")
|
|
self.assertIn("1000", msg or "")
|
|
self.assertIn("S001", msg or "")
|
|
|
|
def test_skip_void(self):
|
|
ok, msg = schedule_dues_match_contract(
|
|
contract_amount=Decimal("500"),
|
|
schedules=[
|
|
{"dueAmount": 500, "scheduleStatus": "open"},
|
|
{"dueAmount": 200, "scheduleStatus": "void"},
|
|
],
|
|
)
|
|
self.assertTrue(ok)
|
|
self.assertIsNone(msg)
|
|
|
|
def test_empty_schedules_skip(self):
|
|
ok, msg = schedule_dues_match_contract(
|
|
contract_amount=Decimal("1000"),
|
|
schedules=[],
|
|
)
|
|
self.assertTrue(ok)
|
|
self.assertIsNone(msg)
|
|
|
|
def test_require_amount_and_due_date(self):
|
|
ok, msg = schedule_dues_match_contract(
|
|
contract_amount=Decimal("1000"),
|
|
schedules=[
|
|
{"dueAmount": None, "dueDate": "20261001"},
|
|
{"dueAmount": 500, "dueDate": ""},
|
|
],
|
|
sample_code="S1",
|
|
require_schedule_fields=True,
|
|
)
|
|
self.assertFalse(ok)
|
|
self.assertIn("应缴金额", msg or "")
|
|
|
|
def test_require_fields_ok(self):
|
|
ok, msg = schedule_required_fields_ok(
|
|
schedules=[
|
|
{"dueAmount": 500, "dueDate": "20261001"},
|
|
{"dueAmount": 500, "due_date": "20261101"},
|
|
]
|
|
)
|
|
self.assertTrue(ok)
|
|
self.assertIsNone(msg)
|