| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- """运输计划列表导出:产品名称 / 品牌 / 别名。"""
- from types import SimpleNamespace
- from unittest.mock import MagicMock, patch
- from app.api.pl.plan import (
- PLAN_EXPORT_COLUMNS,
- _build_plan_list_export_rows,
- _format_plan_list_export_brand,
- _normalize_plan_export_columns,
- )
- from app.utils.excel_export import filter_export_columns
- def test_normalize_plan_export_columns_maps_list_props():
- assert _normalize_plan_export_columns(
- ["productBrand", "productAlias", "productName", "planNo"]
- ) == ["brandName", "aliasName", "productName", "planNo"]
- assert _normalize_plan_export_columns(None) is None
- def test_format_plan_list_export_brand_only_required():
- required = SimpleNamespace(brand_mode="required", brand_name="君正")
- any_mode = SimpleNamespace(brand_mode="any", brand_name="君正")
- assert _format_plan_list_export_brand(required) == "君正"
- assert _format_plan_list_export_brand(any_mode) == ""
- def test_filter_export_columns_keeps_brand_alias_after_normalize():
- requested = _normalize_plan_export_columns(
- ["planNo", "productName", "productBrand", "productAlias"]
- )
- cols = filter_export_columns(PLAN_EXPORT_COLUMNS, requested)
- assert [c.field for c in cols] == ["planNo", "productName", "brandName", "aliasName"]
- def test_build_plan_list_export_rows_expands_products_with_crm_names():
- plan = SimpleNamespace(
- id="p1",
- plan_no="PL001",
- follow_status="arranged",
- plan_date="2026-10-11",
- plan_type="direct",
- supplier_name="供方",
- customer_name="需方",
- license_plate="皖A12345",
- driver_name="司机",
- transport_status="arranged",
- archive_status="pending",
- erp_entered=0,
- remark="",
- products=[],
- )
- # PlanWithProducts.model_validate needs a real-ish object; patch dump path instead.
- product = SimpleNamespace(
- id="pp1",
- plan_id="p1",
- product_id="prod1",
- product_name="甲醇别名",
- brand_mode="required",
- brand_name="君正",
- order_num=1,
- )
- db = MagicMock()
- query = MagicMock()
- db.query.return_value = query
- query.filter.return_value = query
- query.order_by.return_value = query
- query.all.return_value = [product]
- fake_dump = {
- "planNo": "PL001",
- "followStatus": "arranged",
- "planDate": "2026-10-11",
- "planType": "direct",
- "supplierName": "供方",
- "customerName": "需方",
- "licensePlate": "皖A12345",
- "driverName": "司机",
- "transportStatus": "arranged",
- "archiveStatus": "pending",
- "erpEntered": 0,
- "remark": "",
- "products": [{"id": "pp1"}],
- }
- with patch(
- "app.api.pl.plan.PlanWithProducts.model_validate",
- return_value=MagicMock(model_dump=MagicMock(return_value=dict(fake_dump))),
- ), patch(
- "app.api.pl.plan.collect_unique_delivery_date_strings",
- return_value=["2026-10-12"],
- ), patch(
- "app.api.pl.plan.load_crm_product_alias_maps",
- return_value=({"prod1": "甲醇"}, {"prod1": ["甲醇别名"]}),
- ):
- rows = _build_plan_list_export_rows(
- db,
- tenant_no="t1",
- plans=[plan],
- stops_by_plan={"p1": (None, [])},
- )
- assert len(rows) == 1
- assert rows[0]["planNo"] == "PL001"
- assert rows[0]["deliveryTimes"] == "2026-10-12"
- assert rows[0]["productName"] == "甲醇"
- assert rows[0]["brandName"] == "君正"
- assert rows[0]["aliasName"] == "甲醇别名"
- assert "products" not in rows[0]
|