feat(apply): open product page on left double click
This commit is contained in:
@@ -124,6 +124,19 @@ class FakeGenerateWorker:
|
||||
FakeGenerateWorker.instances.append(self)
|
||||
|
||||
|
||||
class FakeProductTabOpenWorker:
|
||||
instances = []
|
||||
|
||||
def __init__(self, alias, item_id, db_path=None, config=None):
|
||||
self.alias = alias
|
||||
self.item_id = item_id
|
||||
self.db_path = db_path
|
||||
self.config = config
|
||||
self.failed = DummySignal()
|
||||
self.finished = DummySignal()
|
||||
FakeProductTabOpenWorker.instances.append(self)
|
||||
|
||||
|
||||
class FakeThumbnailLoader:
|
||||
def __init__(self):
|
||||
self.submissions = []
|
||||
@@ -9212,6 +9225,76 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_apply_tab_left_double_click_opens_product_without_right_double_click(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg = self.make_config(temp_dir)
|
||||
accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
|
||||
batch_id = db.create_batch(["input.xlsx"], path=cfg["db_path"])
|
||||
db.insert_tasks(
|
||||
batch_id,
|
||||
[
|
||||
{
|
||||
"source_file_abs": os.path.join(temp_dir, "input.xlsx"),
|
||||
"source_sheet": "商品",
|
||||
"source_row": 2,
|
||||
"account_name": "主店",
|
||||
"alias": "alias-a",
|
||||
"item_id": "51100639510",
|
||||
}
|
||||
],
|
||||
path=cfg["db_path"],
|
||||
)
|
||||
task = db.list_tasks(batch_id=batch_id, path=cfg["db_path"])[0]
|
||||
db.set_collected(task.id, "旧标题", "old.jpg", path=cfg["db_path"])
|
||||
db.set_generated(task.id, "新标题", "new.jpg", path=cfg["db_path"])
|
||||
statuses = []
|
||||
tab = ApplyTab(config=cfg, status_callback=statuses.append)
|
||||
self.addCleanup(tab.close)
|
||||
tab.resize(1000, 600)
|
||||
tab.show()
|
||||
QApplication.processEvents()
|
||||
index = tab.model.index(0, 0)
|
||||
rect = tab.task_table.visualRect(index)
|
||||
self.assertTrue(rect.isValid())
|
||||
FakeProductTabOpenWorker.instances.clear()
|
||||
|
||||
with mock.patch(
|
||||
"app.gui.ProductTabOpenWorker", FakeProductTabOpenWorker
|
||||
), mock.patch("app.gui.run_worker", return_value=FakeThread()) as run_worker:
|
||||
QTest.mouseDClick(
|
||||
tab.task_table.viewport(), Qt.RightButton, pos=rect.center()
|
||||
)
|
||||
QApplication.processEvents()
|
||||
self.assertEqual([], FakeProductTabOpenWorker.instances)
|
||||
|
||||
tab.task_table.leftDoubleClicked.emit(index)
|
||||
self.assertEqual(1, len(FakeProductTabOpenWorker.instances))
|
||||
worker = FakeProductTabOpenWorker.instances[0]
|
||||
self.assertEqual("alias-a", worker.alias)
|
||||
self.assertEqual("51100639510", worker.item_id)
|
||||
self.assertEqual(cfg["db_path"], worker.db_path)
|
||||
self.assertEqual("ProductTabOpenWorker", run_worker.call_args.kwargs["thread_name"])
|
||||
self.assertTrue(tab.product_tab_open_thread.started)
|
||||
self.assertIn("正在打开商品 51100639510", statuses[-1])
|
||||
|
||||
worker.finished.emit(
|
||||
{
|
||||
"ok": True,
|
||||
"item_id": "51100639510",
|
||||
"account_name": "主店",
|
||||
"created": False,
|
||||
}
|
||||
)
|
||||
self.assertIn("主店已聚焦现有页面", statuses[-1])
|
||||
self.assertIsNotNone(db.get_task(task.id, path=cfg["db_path"]))
|
||||
|
||||
tab.apply_thread = object()
|
||||
tab.task_table.leftDoubleClicked.emit(index)
|
||||
self.assertIn("更新或回写正在进行", statuses[-1])
|
||||
self.assertEqual(1, len(FakeProductTabOpenWorker.instances))
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_collect_tab_can_filter_unmatched_tasks_from_summary_bar(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg = self.make_config(temp_dir)
|
||||
|
||||
Reference in New Issue
Block a user