| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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"
|