170 lines
6.1 KiB
Python
170 lines
6.1 KiB
Python
"""合同名称按供需方面板(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)"
|