feat: 确定性转换蝦皮待补规格 (#152)
This commit is contained in:
@@ -115,6 +115,101 @@ class CatalogXLSXTest(unittest.TestCase):
|
||||
self.assertNotEqual(first.batches[0].batch_id, changed_policy.batches[0].batch_id)
|
||||
self.assertNotEqual(first.batches[0].batch_id, changed_size.batches[0].batch_id)
|
||||
|
||||
def test_正式化模式支持正向和反向两列(self):
|
||||
path = self.make_workbook(
|
||||
[
|
||||
sample_row("S-1", "P-1", "黑色", "M码"),
|
||||
sample_row("S-1", "P-1", "白色", "L码"),
|
||||
sample_row("S-2", "P-2", "小码", "红色"),
|
||||
sample_row("S-2", "P-2", "大码", "蓝色"),
|
||||
]
|
||||
)
|
||||
plan = catalog.prepare_batches(path, 200, "fill_missing", True)
|
||||
payload = json.loads(plan.batches[0].body)
|
||||
skus = payload["shopee_skus"]
|
||||
|
||||
self.assertEqual((plan.formalized_groups, plan.formalized_skus), (2, 4))
|
||||
self.assertEqual((plan.pending_groups, plan.pending_skus), (0, 0))
|
||||
self.assertEqual(payload["shopee_products"], [])
|
||||
self.assertEqual(payload["pdd_products"], [])
|
||||
self.assertEqual(payload["associations"], [])
|
||||
self.assertEqual((skus[0]["color"], skus[0]["size"]), ("黑色", "M码"))
|
||||
self.assertEqual((skus[2]["color"], skus[2]["size"]), ("红色", "小码"))
|
||||
self.assertTrue(all(sku["parse_ok"] for sku in skus))
|
||||
|
||||
def test_正式化模式支持确定的单维规格(self):
|
||||
path = self.make_workbook(
|
||||
[
|
||||
sample_row("S-1", "P-1", "均码【40-60公斤】", ""),
|
||||
sample_row("S-2", "P-2", "黑色", ""),
|
||||
]
|
||||
)
|
||||
plan = catalog.prepare_batches(path, 200, "fill_missing", True)
|
||||
payload = json.loads(plan.batches[0].body)
|
||||
by_goods = {sku["goods_id"]: sku for sku in payload["shopee_skus"]}
|
||||
|
||||
self.assertEqual(by_goods["S-1"]["size"], "均码【40-60公斤】")
|
||||
self.assertEqual(by_goods["S-1"]["color"], "")
|
||||
self.assertEqual(by_goods["S-2"]["color"], "黑色")
|
||||
self.assertEqual(by_goods["S-2"]["size"], "")
|
||||
|
||||
def test_正式化模式不提交歧义商品(self):
|
||||
path = self.make_workbook(
|
||||
[
|
||||
sample_row("S-1", "P-1", "款式甲", "套餐甲"),
|
||||
sample_row("S-1", "P-1", "款式乙", "套餐乙"),
|
||||
sample_row("S-2", "P-2", "黑色", "M码"),
|
||||
]
|
||||
)
|
||||
plan = catalog.prepare_batches(path, 200, "fill_missing", True)
|
||||
payload = json.loads(plan.batches[0].body)
|
||||
|
||||
self.assertEqual((plan.groups, plan.skus), (2, 3))
|
||||
self.assertEqual((plan.formalized_groups, plan.formalized_skus), (1, 1))
|
||||
self.assertEqual((plan.pending_groups, plan.pending_skus), (1, 2))
|
||||
self.assertEqual(
|
||||
{sku["goods_id"] for sku in payload["shopee_skus"]}, {"S-2"}
|
||||
)
|
||||
|
||||
def test_同一商品列数不一致时整体保持待补(self):
|
||||
path = self.make_workbook(
|
||||
[
|
||||
sample_row("S-1", "P-1", "黑色", "M码"),
|
||||
sample_row("S-1", "P-1", "白色", ""),
|
||||
]
|
||||
)
|
||||
plan = catalog.prepare_batches(path, 200, "fill_missing", True)
|
||||
|
||||
self.assertEqual((plan.formalized_groups, plan.pending_groups), (0, 1))
|
||||
self.assertEqual(plan.batches, ())
|
||||
self.assertIn(
|
||||
("歧义:同一商品规格列数不一致", 1), plan.decision_counts
|
||||
)
|
||||
|
||||
def test_另一列也出现尺码证据时不猜测(self):
|
||||
path = self.make_workbook(
|
||||
[
|
||||
sample_row("S-1", "P-1", "小码", "黑色"),
|
||||
sample_row("S-1", "P-1", "大码", "白色均码"),
|
||||
]
|
||||
)
|
||||
plan = catalog.prepare_batches(path, 200, "fill_missing", True)
|
||||
|
||||
self.assertEqual((plan.formalized_groups, plan.pending_groups), (0, 1))
|
||||
self.assertEqual(plan.batches, ())
|
||||
self.assertIn(("歧义:无法唯一确定尺码列", 1), plan.decision_counts)
|
||||
|
||||
def test_正式化模式固定fill_missing且使用独立批次版本(self):
|
||||
path = self.make_workbook([sample_row("S-1", "P-1", "黑色", "M码")])
|
||||
raw = catalog.prepare_batches(path, 200, "fill_missing")
|
||||
formal = catalog.prepare_batches(path, 200, "fill_missing", True)
|
||||
|
||||
self.assertTrue(raw.batches[0].batch_id.startswith("xlsx-v1-"))
|
||||
self.assertTrue(formal.batches[0].batch_id.startswith("xlsx-spec-v1-"))
|
||||
self.assertNotEqual(raw.batches[0].batch_id, formal.batches[0].batch_id)
|
||||
with self.assertRaisesRegex(catalog.CatalogImportError, "fill_missing"):
|
||||
catalog.prepare_batches(path, 200, "overwrite_same_source", True)
|
||||
|
||||
def test_商品不跨批且批次满足限制(self):
|
||||
rows = []
|
||||
for product in range(3):
|
||||
|
||||
Reference in New Issue
Block a user