test_pl_plan_contract_gap.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from sqlalchemy.dialects import mysql
  2. from app.services.pl_internal_customer import INTERNAL_CUSTOMER_NAMES
  3. from app.services.pl_plan_contract_gap import compute_contract_gap_sides, plan_has_contract_gap_exists
  4. INTERNAL = next(iter(INTERNAL_CUSTOMER_NAMES))
  5. def test_both_external_no_contracts_gaps_both():
  6. sides = compute_contract_gap_sides(
  7. supplier_name="外部供方A",
  8. customer_name="外部需方B",
  9. supplier_contract_count=0,
  10. demander_contract_count=0,
  11. )
  12. assert sides == ["supplier", "demander"]
  13. def test_internal_supplier_external_demander_missing_only_demander():
  14. sides = compute_contract_gap_sides(
  15. supplier_name=INTERNAL,
  16. customer_name="外部需方B",
  17. supplier_contract_count=0,
  18. demander_contract_count=0,
  19. )
  20. assert sides == ["demander"]
  21. def test_both_internal_no_gap():
  22. sides = compute_contract_gap_sides(
  23. supplier_name=INTERNAL,
  24. customer_name=INTERNAL,
  25. supplier_contract_count=0,
  26. demander_contract_count=0,
  27. )
  28. assert sides == []
  29. def test_external_with_contracts_no_gap():
  30. sides = compute_contract_gap_sides(
  31. supplier_name="外部供方A",
  32. customer_name="外部需方B",
  33. supplier_contract_count=1,
  34. demander_contract_count=2,
  35. )
  36. assert sides == []
  37. def test_empty_names_treated_as_non_internal_gap_both():
  38. sides = compute_contract_gap_sides(
  39. supplier_name=None,
  40. customer_name="",
  41. supplier_contract_count=0,
  42. demander_contract_count=0,
  43. )
  44. assert sides == ["supplier", "demander"]
  45. def _compile(clause) -> str:
  46. return str(
  47. clause.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True})
  48. ).lower()
  49. def test_plan_has_contract_gap_exists_mentions_contract_and_internal_names():
  50. clause = plan_has_contract_gap_exists("shanxia2.0")
  51. sql = _compile(clause)
  52. assert "pl_plan_contract" in sql
  53. assert "supplier" in sql
  54. assert "demander" in sql