72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
from sqlalchemy.dialects import mysql
|
|
|
|
from app.services.pl_internal_customer import INTERNAL_CUSTOMER_NAMES
|
|
from app.services.pl_plan_contract_gap import compute_contract_gap_sides, plan_has_contract_gap_exists
|
|
|
|
INTERNAL = next(iter(INTERNAL_CUSTOMER_NAMES))
|
|
|
|
|
|
def test_both_external_no_contracts_gaps_both():
|
|
sides = compute_contract_gap_sides(
|
|
supplier_name="外部供方A",
|
|
customer_name="外部需方B",
|
|
supplier_contract_count=0,
|
|
demander_contract_count=0,
|
|
)
|
|
assert sides == ["supplier", "demander"]
|
|
|
|
|
|
def test_internal_supplier_external_demander_missing_only_demander():
|
|
sides = compute_contract_gap_sides(
|
|
supplier_name=INTERNAL,
|
|
customer_name="外部需方B",
|
|
supplier_contract_count=0,
|
|
demander_contract_count=0,
|
|
)
|
|
assert sides == ["demander"]
|
|
|
|
|
|
def test_both_internal_no_gap():
|
|
sides = compute_contract_gap_sides(
|
|
supplier_name=INTERNAL,
|
|
customer_name=INTERNAL,
|
|
supplier_contract_count=0,
|
|
demander_contract_count=0,
|
|
)
|
|
assert sides == []
|
|
|
|
|
|
def test_external_with_contracts_no_gap():
|
|
sides = compute_contract_gap_sides(
|
|
supplier_name="外部供方A",
|
|
customer_name="外部需方B",
|
|
supplier_contract_count=1,
|
|
demander_contract_count=2,
|
|
)
|
|
assert sides == []
|
|
|
|
|
|
def test_empty_names_treated_as_non_internal_gap_both():
|
|
sides = compute_contract_gap_sides(
|
|
supplier_name=None,
|
|
customer_name="",
|
|
supplier_contract_count=0,
|
|
demander_contract_count=0,
|
|
)
|
|
assert sides == ["supplier", "demander"]
|
|
|
|
|
|
def _compile(clause) -> str:
|
|
return str(
|
|
clause.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True})
|
|
).lower()
|
|
|
|
|
|
def test_plan_has_contract_gap_exists_mentions_contract_and_internal_names():
|
|
clause = plan_has_contract_gap_exists("shanxia2.0")
|
|
sql = _compile(clause)
|
|
|
|
assert "pl_plan_contract" in sql
|
|
assert "supplier" in sql
|
|
assert "demander" in sql
|