feat(collect): show and filter product status
This commit is contained in:
@@ -424,6 +424,82 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
model.data(model.index(0, 3), gui.Qt.ToolTipRole),
|
||||
)
|
||||
|
||||
def test_collect_task_model_displays_product_statuses_and_snapshot_note(self):
|
||||
account = SimpleNamespace(alias="papa", account_name="papa 店铺")
|
||||
tasks = [
|
||||
SimpleNamespace(
|
||||
alias="papa",
|
||||
account_name="papa 店铺",
|
||||
item_id="1001",
|
||||
stage="imported",
|
||||
status="pending",
|
||||
last_error="",
|
||||
product_status="normal",
|
||||
product_status_note="历史批次默认按架上商品处理(未实时检测)",
|
||||
product_status_at=None,
|
||||
),
|
||||
SimpleNamespace(
|
||||
alias="papa",
|
||||
account_name="papa 店铺",
|
||||
item_id="1002",
|
||||
stage="imported",
|
||||
status="pending",
|
||||
last_error="",
|
||||
product_status="unlisted",
|
||||
product_status_note="商品未上架",
|
||||
product_status_at="2026-07-20T09:00:00",
|
||||
),
|
||||
SimpleNamespace(
|
||||
alias="papa",
|
||||
account_name="papa 店铺",
|
||||
item_id="1003",
|
||||
stage="imported",
|
||||
status="pending",
|
||||
last_error="",
|
||||
product_status="reviewing",
|
||||
product_status_note="商品审核中",
|
||||
product_status_at=None,
|
||||
),
|
||||
SimpleNamespace(
|
||||
alias="papa",
|
||||
account_name="papa 店铺",
|
||||
item_id="1004",
|
||||
stage="imported",
|
||||
status="pending",
|
||||
last_error="",
|
||||
product_status="unknown",
|
||||
product_status_note="",
|
||||
product_status_at=None,
|
||||
),
|
||||
SimpleNamespace(
|
||||
alias="papa",
|
||||
account_name="papa 店铺",
|
||||
item_id="1005",
|
||||
stage="imported",
|
||||
status="pending",
|
||||
last_error="",
|
||||
product_status=None,
|
||||
product_status_note=None,
|
||||
product_status_at=None,
|
||||
),
|
||||
]
|
||||
model = gui.TaskTableModel()
|
||||
model.set_tasks(tasks, [account])
|
||||
|
||||
self.assertEqual(["账号", "别名", "商品ID", "阶段", "商品状态"], model.HEADERS)
|
||||
self.assertEqual(
|
||||
["架上商品", "未上架", "审核中", "状态未知", "待检测"],
|
||||
[model.index(row, 4).data() for row in range(model.rowCount())],
|
||||
)
|
||||
self.assert_foreground(model, 0, 4, gui.COLOR_SUCCESS)
|
||||
self.assert_foreground(model, 1, 4, gui.COLOR_DANGER)
|
||||
self.assert_foreground(model, 2, 4, gui.COLOR_WARNING)
|
||||
self.assert_foreground(model, 3, 4, gui.COLOR_MUTED)
|
||||
self.assert_foreground(model, 4, 4, gui.COLOR_MUTED)
|
||||
self.assertIn("未实时检测", model.index(0, 4).data(Qt.ToolTipRole))
|
||||
self.assertIn("检测时间", model.index(1, 4).data(Qt.ToolTipRole))
|
||||
self.assertEqual("尚未检测商品状态", model.index(4, 4).data(Qt.ToolTipRole))
|
||||
|
||||
def test_workflow_failed_tooltips_show_failed_step_and_reason(self):
|
||||
account = SimpleNamespace(alias="papa", account_name="papa 店铺")
|
||||
collect_task = SimpleNamespace(
|
||||
@@ -8329,18 +8405,48 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
tasks = {task.item_id: task for task in db.list_tasks(batch_id=batch_id, path=cfg["db_path"])}
|
||||
db.set_collected(tasks["1002"].id, "旧标题", os.path.join(temp_dir, "old.jpg"), path=cfg["db_path"])
|
||||
db.mark_failed(tasks["2002"].id, "collect", "采集失败", path=cfg["db_path"])
|
||||
db.set_product_status(tasks["1002"].id, "normal", path=cfg["db_path"])
|
||||
db.set_product_status(tasks["2001"].id, "unlisted", path=cfg["db_path"])
|
||||
db.set_product_status(tasks["2002"].id, "reviewing", path=cfg["db_path"])
|
||||
db.set_product_status(tasks["3001"].id, "unknown", path=cfg["db_path"])
|
||||
|
||||
tab = CollectTab(config=cfg)
|
||||
self.addCleanup(tab.close)
|
||||
|
||||
self.assertEqual("collectShopFilter", tab.shop_filter.objectName())
|
||||
self.assertEqual("collectItemFilter", tab.item_filter.objectName())
|
||||
self.assertEqual("collectProductStatusFilter", tab.product_status_filter.objectName())
|
||||
self.assertEqual("collectStatusFilter", tab.status_filter.objectName())
|
||||
self.assertEqual(
|
||||
["全部商品状态", "架上商品", "未上架", "审核中", "状态未知", "待检测"],
|
||||
[
|
||||
tab.product_status_filter.itemText(index)
|
||||
for index in range(tab.product_status_filter.count())
|
||||
],
|
||||
)
|
||||
self.assertEqual(5, tab.model.rowCount())
|
||||
self.assertEqual("待检测", tab.model.index(0, 4).data())
|
||||
self.assertEqual("架上商品", tab.model.index(1, 4).data())
|
||||
self.assertIn("5 行", tab.summary_label.text())
|
||||
self.assertEqual("未匹配(1)", tab.show_unmatched_button.text())
|
||||
self.assertIn("总数5", tab.batch_progress_label.text())
|
||||
|
||||
tab.product_status_filter.setCurrentIndex(
|
||||
tab.product_status_filter.findData("normal")
|
||||
)
|
||||
self.assertEqual(1, tab.model.rowCount())
|
||||
self.assertEqual("1002", tab.model.index(0, 2).data())
|
||||
tab.status_filter.setCurrentIndex(tab.status_filter.findData("collected"))
|
||||
self.assertEqual(1, tab.model.rowCount())
|
||||
tab.product_status_filter.setCurrentIndex(
|
||||
tab.product_status_filter.findData("unlisted")
|
||||
)
|
||||
self.assertEqual(0, tab.model.rowCount())
|
||||
tab.status_filter.setCurrentIndex(tab.status_filter.findData("all"))
|
||||
self.assertEqual(1, tab.model.rowCount())
|
||||
self.assertEqual("2001", tab.model.index(0, 2).data())
|
||||
tab.product_status_filter.setCurrentIndex(tab.product_status_filter.findData("all"))
|
||||
|
||||
tab.shop_filter.setCurrentIndex(tab.shop_filter.findData("alias-a"))
|
||||
self.assertEqual(2, tab.model.rowCount())
|
||||
self.assertEqual(["1001", "1002"], [tab.model.index(row, 2).data() for row in range(tab.model.rowCount())])
|
||||
@@ -8418,6 +8524,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
self.assertEqual("normal_only", captured["kwargs"]["collect_scope"])
|
||||
self.assertFalse(tab.shop_filter.isEnabled())
|
||||
self.assertFalse(tab.item_filter.isEnabled())
|
||||
self.assertFalse(tab.product_status_filter.isEnabled())
|
||||
self.assertFalse(tab.status_filter.isEnabled())
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
Reference in New Issue
Block a user