Files
shanxia2.0/backend/tests/test_pl_purchase_cert_remain.py
T
wuzilongandCursor d22b06dbe7 feat(pl): 易制毒先安排待确认与购买证管理
含易制毒计划安排后进入已安排待确认,确认通过后再占合同并生成链接/地磅;新增购买证/运输证主数据、产品行关联、余量校验与 OCR 配置,并停止跟踪 api_key/app.pid。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-09 18:41:10 +08:00

77 lines
2.3 KiB
Python

from datetime import date
from app.services.pl_purchase_cert_service import (
PURCHASE_CERT_WARN_TONS,
calc_cert_remain,
permit_nos_cover_purchase,
plate_allowed_on_transport,
product_name_matches,
validate_link_rules,
)
def test_calc_cert_remain():
assert calc_cert_remain(total=1700, occupied=152) == 1548.0
assert calc_cert_remain(total=100, occupied=100) == 0.0
def test_plate_allowed():
plates = "皖H57837、皖HA3690,皖LB1283"
assert plate_allowed_on_transport("皖H57837", plates) is True
assert plate_allowed_on_transport("皖A00000", plates) is False
def test_product_name_contains_match():
assert product_name_matches(plan_name="98% 工业硫酸", cert_name="硫酸") is True
assert product_name_matches(plan_name="液碱", cert_name="硫酸") is False
def test_permit_nos_cover():
assert permit_nos_cover_purchase("G1,G2", "G2") is True
assert permit_nos_cover_purchase("G1", "G9") is False
def test_validate_link_rules_ok():
err = validate_link_rules(
plan_qty=34,
purchase_remain=100,
transport_remain=50,
plan_plate="皖H57837",
transport_plates="皖H57837",
plan_product_name="硫酸",
purchase_product_name="硫酸",
purchase_cert_no="G34260485131004",
permit_cert_nos="G34260485131004",
purchase_valid_from=date(2026, 8, 13),
purchase_valid_to=date(2026, 9, 12),
transport_valid_from=date(2026, 8, 20),
transport_valid_to=date(2026, 11, 19),
today=date(2026, 8, 25),
)
assert err is None
def test_validate_link_rules_qty_fail():
err = validate_link_rules(
plan_qty=200,
purchase_remain=100,
transport_remain=50,
plan_plate="皖H57837",
transport_plates="皖H57837",
plan_product_name="硫酸",
purchase_product_name="硫酸",
purchase_cert_no="G1",
permit_cert_nos="G1",
purchase_valid_from=date(2026, 1, 1),
purchase_valid_to=date(2026, 12, 31),
transport_valid_from=date(2026, 1, 1),
transport_valid_to=date(2026, 12, 31),
today=date(2026, 6, 1),
)
assert err is not None
assert "购买证余量" in err or "运输证余量" in err
def test_warn_threshold_constant():
assert PURCHASE_CERT_WARN_TONS == 64