Files
shanxia2.0/backend/tests/test_pl_brand_archive.py
zlwuandCursor 10c3c5470c chore: sync local PL/CRM/BX and migration work to new Gogs host
Bundle pending backend/web-admin feature updates, data-migration scripts,
and related docs so the V1.5 branch on the Tencent Cloud Gogs matches the
current workspace (excluding local secrets).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-01 09:19:21 +08:00

82 lines
2.4 KiB
Python

from decimal import Decimal
import pytest
from app.services.pl_brand_archive import validate_brand_qty_rows
def test_required_allows_other_brand_when_sum_matches():
validate_brand_qty_rows(
brand_mode="required",
required_brand_id="b1",
actual_qty=Decimal("10"),
rows=[{"brandId": "b2", "brandName": "红四方", "qty": Decimal("10")}],
)
def test_required_allows_multi_brand_when_sum_matches():
validate_brand_qty_rows(
brand_mode="required",
required_brand_id="b1",
actual_qty=Decimal("10"),
rows=[
{"brandId": "b1", "brandName": "君正", "qty": Decimal("6")},
{"brandId": "b2", "brandName": "红四方", "qty": Decimal("4")},
],
)
def test_required_sum_must_match():
with pytest.raises(ValueError, match="合计"):
validate_brand_qty_rows(
brand_mode="required",
required_brand_id="b1",
actual_qty=Decimal("10"),
rows=[
{"brandId": "b1", "brandName": "君正", "qty": Decimal("6")},
{"brandId": "b2", "brandName": "红四方", "qty": Decimal("3")},
],
)
def test_any_sum_must_match():
with pytest.raises(ValueError, match="合计"):
validate_brand_qty_rows(
brand_mode="any",
required_brand_id=None,
actual_qty=Decimal("10"),
rows=[
{"brandId": "b1", "brandName": "君正", "qty": Decimal("6")},
{"brandId": "b2", "brandName": "红四方", "qty": Decimal("3")},
],
)
def test_any_ok():
validate_brand_qty_rows(
brand_mode="any",
required_brand_id=None,
actual_qty=Decimal("10"),
rows=[
{"brandId": "b1", "brandName": "君正", "qty": Decimal("6")},
{"brandId": "b2", "brandName": "红四方", "qty": Decimal("4")},
],
)
def test_no_brand_ignores_rows():
validate_brand_qty_rows(
brand_mode=None,
required_brand_id=None,
actual_qty=Decimal("5"),
rows=[],
)
def test_delta_for_plan_type():
from app.services.pl_inventory_service import qty_delta_for_plan
assert qty_delta_for_plan("inbound", Decimal("3")) == Decimal("3")
assert qty_delta_for_plan("outbound", Decimal("3")) == Decimal("-3")
assert qty_delta_for_plan("direct", Decimal("3")) == Decimal("0")