Files
shanxia2.0/backend/tests/test_crm_contract_no_align.py
T
zlwuandCursor 594e4ce38e feat(crm): sync contract number date segment with sign date
Align standard contract nos on create/update (keep seq, bump on collision),
preview the change in contract forms, and sync name parentheses.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 11:46:11 +08:00

64 lines
1.9 KiB
Python

from datetime import date
from unittest.mock import MagicMock, patch
from app.crud.crm.contract import align_contract_no_to_sign_date, replace_contract_no_date
def test_replace_keeps_seq_and_swaps_date():
assert (
replace_contract_no_date("SX/X-JT20250803001", date(2025, 8, 10))
== "SX/X-JT20250810001"
)
def test_replace_noop_when_same_date():
assert replace_contract_no_date("SX/X-JT20250803001", date(2025, 8, 3)) == "SX/X-JT20250803001"
def test_replace_returns_none_for_nonstandard():
assert replace_contract_no_date("CUSTOM-001", date(2025, 8, 10)) is None
assert replace_contract_no_date("", date(2025, 8, 10)) is None
assert replace_contract_no_date(None, date(2025, 8, 10)) is None
def test_align_returns_original_when_nonstandard():
db = MagicMock()
assert (
align_contract_no_to_sign_date(
db, "t1", "CUSTOM-001", date(2025, 8, 10)
)
== "CUSTOM-001"
)
def test_align_bumps_seq_when_occupied():
db = MagicMock()
def _exists(db_, tenant, no, exclude_id=None):
return no == "SX/X-JT20250810001"
with patch("app.crud.crm.contract.contract_no_exists", side_effect=_exists):
out = align_contract_no_to_sign_date(
db, "t1", "SX/X-JT20250803001", date(2025, 8, 10)
)
assert out == "SX/X-JT20250810002"
def test_align_exclude_id_skips_self():
db = MagicMock()
def _exists(db_, tenant, no, exclude_id=None):
if exclude_id == "self-id":
return False
return no == "SX/X-JT20250810001"
with patch("app.crud.crm.contract.contract_no_exists", side_effect=_exists):
out = align_contract_no_to_sign_date(
db,
"t1",
"SX/X-JT20250803001",
date(2025, 8, 10),
exclude_id="self-id",
)
assert out == "SX/X-JT20250810001"