feat(ai-studio): refresh workspace layout

This commit is contained in:
chengma
2026-07-11 15:41:38 +08:00
parent 5b4b9af678
commit 656f86632d
3 changed files with 373 additions and 57 deletions
+31 -3
View File
@@ -512,8 +512,23 @@ class GuiTests(TempDirMixin, unittest.TestCase):
"导入本地图片",
" ".join(button.text() for button in tab.findChildren(gui.QPushButton)),
)
self.assertEqual("导出终选", tab.export_button.text())
self.assertEqual("打开商品项目", tab.open_project_button.text())
self.assertEqual("拉取蝦皮主图", tab.pull_images_button.text())
self.assertEqual("导出到文件夹", tab.export_button.text())
self.assertIn("可部分导出", tab.export_hint_label.text())
self.assertIn("文件名按终选顺序连续", tab.export_hint_label.text())
self.assertEqual("未打开商品项目", tab.current_project_label.text())
self.assertIn("打开商品项目", tab.workspace_empty_label.text())
self.assertEqual("生成 4 张主图", tab.start_button.text())
tab.count_spin.setValue(3)
tab.job_type_combo.setCurrentIndex(tab.job_type_combo.findData("detail"))
self.assertEqual("生成 3 张详情图", tab.start_button.text())
label_texts = "\n".join(label.text() for label in tab.findChildren(gui.QLabel))
self.assertIn("商品项目", label_texts)
self.assertIn("蝦皮原主图", label_texts)
self.assertIn("照片池", label_texts)
self.assertIn("生成设置", label_texts)
self.assertIn("终选与排序", label_texts)
self.assertEqual("完整提示词", prompts.load_image_studio_template("工场模板", prompts_dir))
template_index = tab.template_combo.findData("工场模板")
self.assertGreaterEqual(template_index, 0)
@@ -526,6 +541,9 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertIsNotNone(tab.current_project)
self.assertEqual("alias-a", tab.current_project.account_alias)
self.assertEqual("51100639510", tab.current_project.item_id)
self.assertIn("alias-a", tab.current_project_label.text())
self.assertIn("51100639510", tab.current_project_label.text())
self.assertEqual("项目已自动保存", tab.autosave_label.text())
self.assertEqual(1, tab.project_table.rowCount())
original = image_studio.sync_original_asset_urls(
@@ -536,10 +554,12 @@ class GuiTests(TempDirMixin, unittest.TestCase):
tab.refresh_project_assets()
self.assertEqual(1, tab.original_table.rowCount())
self.assertEqual("1", tab.original_table.item(0, 0).text())
self.assertEqual("主图 #1", tab.original_table.item(0, 0).text())
self.assertFalse(tab.original_table.item(0, 0).icon().isNull())
self.assertEqual("远程待下载", tab.original_table.item(0, 1).text())
self.assertEqual(1, tab.pool_table.rowCount())
self.assertEqual("原图", tab.pool_table.item(0, 0).text())
self.assertEqual(f"原图 #{original.id}", tab.pool_table.item(0, 0).text())
self.assertFalse(tab.pool_table.item(0, 0).icon().isNull())
self.assertEqual("远程待下载", tab.pool_table.item(0, 2).text())
self.assertEqual(original.id, tab.pool_table.item(0, 0).data(gui.Qt.UserRole)["asset_id"])
@@ -584,7 +604,10 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertEqual([second.id, first.id], [
tab.main_selection_list.item(row).data(gui.Qt.UserRole)
for row in range(tab.main_selection_list.count())
if tab.main_selection_list.item(row).data(gui.Qt.UserRole) is not None
])
self.assertEqual(9, tab.main_selection_list.count())
self.assertIn("空位", tab.main_selection_list.item(2).text())
self.assertEqual("#fff8c5", tab.main_selection_list.item(0).background().color().name())
self.assertFalse(tab.add_asset_to_selection("main", first.id))
@@ -592,6 +615,8 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertTrue(tab.add_asset_to_selection("detail", first.id))
detail = image_studio.list_selections(project.id, "detail", path=cfg["db_path"])
self.assertEqual([first.id], [selection.asset_id for selection in detail])
self.assertEqual(12, tab.detail_selection_list.count())
self.assertIn("空位", tab.detail_selection_list.item(1).text())
self.assertTrue(tab.move_selection_asset("main", 1, 0))
main = image_studio.list_selections(project.id, "main", path=cfg["db_path"])
@@ -674,6 +699,9 @@ class GuiTests(TempDirMixin, unittest.TestCase):
tab._select_project(project.id)
tab._select_source_asset(source)
tab.prompt_edit.setPlainText("生成商品主图")
self.assertIn(f"原图 #{source.id}", tab.source_label.text())
self.assertEqual("", tab.source_preview_label.text())
self.assertFalse(tab.source_preview_label.pixmap().isNull())
class FakeStudioWorker:
def __init__(self):