feat: [workflow] 统一飞书款式身份配置

This commit is contained in:
2026-09-07 15:01:04 +08:00
parent 92289b17ed
commit 485e77ee74
13 changed files with 1153 additions and 135 deletions
+102
View File
@@ -11,6 +11,7 @@ import pytest
from gyxx_flow.adapters.workflow_config import (
PostgresWorkflowConfigStore,
WorkflowConfigConflictError,
merge_lifecycle_style_records,
normalize_config,
normalize_style_config,
)
@@ -160,6 +161,107 @@ def test_normalize_style_config_owns_erp_once_and_platform_ids_per_child() -> No
]
def test_runtime_records_use_lifecycle_identity_and_keep_dynamic_targets() -> None:
dynamic_records = [
{
"style_name": "款式甲",
"brand": "旧品牌",
"erp_codes": ["OLD-ERP"],
"platform": "天猫",
"item_ids": ["OLD-TM"],
"sales_bitable_url": "https://example.feishu.cn/base/sales?table=tblSales",
"tm_persona_bitable_url": "tm-persona",
}
]
lifecycle_rows = [
{
"id": 8,
"name": "款式甲",
"brand": "光影行星",
"erp_style_codes": ["NEW-ERP"],
"platform_product_ids": {
"tm": ["NEW-TM"],
"jd": ["NEW-JD"],
"jd_self": [],
"dy": [],
},
}
]
records = merge_lifecycle_style_records(dynamic_records, lifecycle_rows)
by_platform = {row["platform"]: row for row in records}
assert by_platform["天猫"]["item_ids"] == ["NEW-TM"]
assert by_platform["京东旗舰店"]["item_ids"] == ["NEW-JD"]
assert by_platform["京东自营"]["item_ids"] == []
assert by_platform["抖音"]["item_ids"] == []
assert all(row["erp_codes"] == ["NEW-ERP"] for row in records)
assert by_platform["天猫"]["sales_bitable_url"].endswith("table=tblSales")
assert by_platform["天猫"]["tm_persona_bitable_url"] == "tm-persona"
def test_runtime_records_empty_lifecycle_ids_clear_legacy_platform_ids() -> None:
records = merge_lifecycle_style_records(
[
{
"style_name": "研发款",
"erp_codes": ["ERP-1"],
"platform": "天猫",
"item_ids": ["LEGACY-TM"],
}
],
[
{
"id": 9,
"name": "研发款",
"erp_style_codes": ["ERP-1"],
"platform_product_ids": {
"tm": [],
"jd": [],
"jd_self": [],
"dy": [],
},
}
],
)
assert all(not row["item_ids"] for row in records)
def test_lifecycle_merge_respects_disabled_dynamic_platform() -> None:
records = merge_lifecycle_style_records(
[
{
"style_name": "款式甲",
"platform": "天猫",
"item_ids": ["TM-1"],
"enabled": False,
},
{
"style_name": "款式甲",
"platform": "京东旗舰店",
"item_ids": ["JD-1"],
"enabled": True,
},
],
[
{
"id": 10,
"name": "款式甲",
"erp_style_codes": ["ERP-1"],
"platform_product_ids": {
"tm": ["TM-1"],
"jd": ["JD-1"],
"jd_self": [],
"dy": [],
},
}
],
)
assert {row["platform"] for row in records} == {"京东旗舰店", "京东自营", "抖音"}
def test_normalize_style_config_supports_extensible_business_targets() -> None:
payload = _payload()
payload["destinations"] = [