test_pl_purchase_cert_remain.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from datetime import date
  2. from app.services.pl_purchase_cert_service import (
  3. PURCHASE_CERT_WARN_TONS,
  4. calc_cert_remain,
  5. permit_nos_cover_purchase,
  6. plate_allowed_on_transport,
  7. product_name_matches,
  8. validate_link_rules,
  9. )
  10. def test_calc_cert_remain():
  11. assert calc_cert_remain(total=1700, occupied=152) == 1548.0
  12. assert calc_cert_remain(total=100, occupied=100) == 0.0
  13. def test_plate_allowed():
  14. plates = "皖H57837、皖HA3690,皖LB1283"
  15. assert plate_allowed_on_transport("皖H57837", plates) is True
  16. assert plate_allowed_on_transport("皖A00000", plates) is False
  17. def test_product_name_contains_match():
  18. assert product_name_matches(plan_name="98% 工业硫酸", cert_name="硫酸") is True
  19. assert product_name_matches(plan_name="液碱", cert_name="硫酸") is False
  20. def test_permit_nos_cover():
  21. assert permit_nos_cover_purchase("G1,G2", "G2") is True
  22. assert permit_nos_cover_purchase("G1", "G9") is False
  23. def test_validate_link_rules_ok():
  24. err = validate_link_rules(
  25. plan_qty=34,
  26. purchase_remain=100,
  27. transport_remain=50,
  28. plan_plate="皖H57837",
  29. transport_plates="皖H57837",
  30. plan_product_name="硫酸",
  31. purchase_product_name="硫酸",
  32. purchase_cert_no="G34260485131004",
  33. permit_cert_nos="G34260485131004",
  34. purchase_valid_from=date(2026, 8, 13),
  35. purchase_valid_to=date(2026, 9, 12),
  36. transport_valid_from=date(2026, 8, 20),
  37. transport_valid_to=date(2026, 11, 19),
  38. today=date(2026, 8, 25),
  39. )
  40. assert err is None
  41. def test_validate_link_rules_qty_fail():
  42. err = validate_link_rules(
  43. plan_qty=200,
  44. purchase_remain=100,
  45. transport_remain=50,
  46. plan_plate="皖H57837",
  47. transport_plates="皖H57837",
  48. plan_product_name="硫酸",
  49. purchase_product_name="硫酸",
  50. purchase_cert_no="G1",
  51. permit_cert_nos="G1",
  52. purchase_valid_from=date(2026, 1, 1),
  53. purchase_valid_to=date(2026, 12, 31),
  54. transport_valid_from=date(2026, 1, 1),
  55. transport_valid_to=date(2026, 12, 31),
  56. today=date(2026, 6, 1),
  57. )
  58. assert err is not None
  59. assert "购买证余量" in err or "运输证余量" in err
  60. def test_warn_threshold_constant():
  61. assert PURCHASE_CERT_WARN_TONS == 64