Files
shanxia2.0/backend/tests/test_crm_contract_name_from_parties.py
T
2026-08-04 15:33:41 +08:00

170 lines
6.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""合同名称按供需方面板(partyA/partyB)解析简称。"""
from app.crud.crm.contract import generate_contract_name, resolve_party_short_name
def test_resolve_matches_supplier_exact_name():
assert (
resolve_party_short_name(
"安庆市山峡化工有限公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
)
== "山峡"
)
def test_resolve_matches_customer_exact_name():
assert (
resolve_party_short_name(
"安徽辉隆农资集团股份有限公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
)
== "辉隆"
)
def test_resolve_matches_customer_invoice_name():
assert (
resolve_party_short_name(
"辉隆开票公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
customer_invoice_name="辉隆开票公司",
)
== "辉隆"
)
def test_resolve_fallback_to_party_full_name():
assert (
resolve_party_short_name(
"第三方单位",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
)
== "第三方单位"
)
def test_resolve_does_not_fuzzy_match_short_inside_longer_name():
"""避免「山峡」子串误匹配客户全称中的山峡二字到交易主体。"""
assert (
resolve_party_short_name(
"安庆市山峡化工有限公司",
supplier_name="其他主体",
supplier_short_name="山峡",
customer_name="安庆市山峡化工有限公司",
customer_short_name="山峡客户",
)
== "山峡客户"
)
def test_generate_empty_uses_party_order_after_swap():
"""调换后供方=辉隆、需方=山峡 → 辉隆-山峡(编号),不因类型反序。"""
name = generate_contract_name(
"SX/X-JT20260804001",
party_a="安徽辉隆农资集团股份有限公司",
party_b="安庆市山峡化工有限公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
user_contract_name="",
)
assert name == "辉隆-山峡(SX/X-JT20260804001)"
def test_generate_empty_default_party_order():
name = generate_contract_name(
"SX/X-JT20260804001",
party_a="安庆市山峡化工有限公司",
party_b="安徽辉隆农资集团股份有限公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
user_contract_name="",
)
assert name == "山峡-辉隆(SX/X-JT20260804001)"
def test_generate_purchase_does_not_reverse_party_order():
name = generate_contract_name(
"SX/X-JT20260804001",
party_a="安徽辉隆农资集团股份有限公司",
party_b="安庆市山峡化工有限公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
user_contract_name="",
contract_type="purchase",
)
assert name == "辉隆-山峡(SX/X-JT20260804001)"
def test_generate_user_name_keeps_body_and_syncs_no():
name = generate_contract_name(
"SX/X-JT20260804002",
party_a="安徽辉隆农资集团股份有限公司",
party_b="安庆市山峡化工有限公司",
supplier_name="安庆市山峡化工有限公司",
supplier_short_name="山峡",
customer_name="安徽辉隆农资集团股份有限公司",
customer_short_name="辉隆",
user_contract_name="自定义合同名(SX/X-JT20260804001)",
)
assert name == "自定义合同名(SX/X-JT20260804002)"
def test_generate_full_party_name_in_user_input_is_replaced_by_short():
"""前端误传全称时,后端按主数据简称重算(华尔泰生产案例)。"""
name = generate_contract_name(
"YD/X-JT20260731003",
party_a="安徽华尔泰股份有限公司",
party_b="安徽云栋化工有限公司",
supplier_name="安徽云栋化工有限公司",
supplier_short_name="云栋",
customer_name="安徽华尔泰股份有限公司",
customer_short_name="华尔泰",
user_contract_name="安徽华尔泰股份有限公司-云栋(YD/X-JT20260731003)",
)
assert name == "华尔泰-云栋(YD/X-JT20260731003)"
def test_generate_renewal_name_is_preserved():
name = generate_contract_name(
"YD/X-JT20260804001",
party_a="安徽华尔泰股份有限公司",
party_b="安徽云栋化工有限公司",
supplier_name="安徽云栋化工有限公司",
supplier_short_name="云栋",
customer_name="安徽华尔泰股份有限公司",
customer_short_name="华尔泰",
user_contract_name="华尔泰-云栋(YD/X-JT20260731003)-续签1",
)
assert name == "华尔泰-云栋(YD/X-JT20260731003)-续签1(YD/X-JT20260804001)"
def test_generate_fallback_when_parties_blank():
name = generate_contract_name(
"SX/X-JT20260804001",
party_a="",
party_b="",
supplier_short_name="山峡",
customer_short_name="辉隆",
user_contract_name="",
)
assert name == "合同(SX/X-JT20260804001)"