feat(ai-studio): add main workspace tab

This commit is contained in:
chengma
2026-07-11 14:16:11 +08:00
parent ab99737e03
commit 5451579073
14 changed files with 1369 additions and 27 deletions
+58 -3
View File
@@ -12,7 +12,7 @@ sys.path.insert(0, os.path.dirname(__file__))
from _helpers import TempDirMixin
from app import gui
from app import accounts, ai, appconfig, db, image_paths, prompts, update_check
from app import accounts, ai, appconfig, db, image_paths, image_studio, prompts, update_check
if gui.QT_IMPORT_ERROR is not None:
raise unittest.SkipTest("PySide6 未安装")
@@ -33,6 +33,7 @@ from app.gui import (
CollectTab,
GenerateWorker,
GenerateTab,
ImageStudioTab,
MainWindow,
SettingsTab,
TAB_STYLE,
@@ -436,13 +437,13 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assert_foreground(model, 0, 4, gui.COLOR_SUCCESS)
self.assert_foreground(model, 0, 5, gui.COLOR_SUCCESS)
def test_main_window_has_five_tabs_in_workflow_order(self):
def test_main_window_has_workflow_tabs_in_order(self):
with self.make_temp_dir() as temp_dir:
window = MainWindow(config=self.make_config(temp_dir))
self.addCleanup(window.close)
self.assertEqual(gui.display_name(), window.windowTitle())
self.assertEqual(5, window.tabs.count())
self.assertEqual(6, window.tabs.count())
self.assertEqual(
TAB_TITLES,
[window.tabs.tabText(index) for index in range(window.tabs.count())],
@@ -460,6 +461,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertIsInstance(window.tabs.widget(1), GenerateTab)
self.assertIsInstance(window.tabs.widget(2), ApplyTab)
self.assertIsInstance(window.tabs.widget(4), SettingsTab)
self.assertIsInstance(window.tabs.widget(5), ImageStudioTab)
self.assertEqual(
"回写旧数据到 Excel",
window.tabs.widget(0).write_back_button.text(),
@@ -487,6 +489,59 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_image_studio_tab_builds_project_pool_and_template_controls(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
prompts_dir = os.path.join(temp_dir, "prompts", "image_studio")
accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
prompts.save_image_studio_template("工场模板", "完整提示词", prompts_dir)
tab = ImageStudioTab(
config=cfg,
db_path=cfg["db_path"],
prompts_dir=prompts_dir,
)
self.addCleanup(tab.close)
self.assertEqual("imageStudioTab", tab.objectName())
self.assertEqual("⑥ AI工场", TAB_TITLES[5])
self.assertGreaterEqual(tab.account_combo.count(), 1)
self.assertEqual("alias-a", tab.account_combo.itemData(0))
self.assertNotIn(
"导入本地图片",
" ".join(button.text() for button in tab.findChildren(gui.QPushButton)),
)
self.assertEqual("完整提示词", prompts.load_image_studio_template("工场模板", prompts_dir))
template_index = tab.template_combo.findData("工场模板")
self.assertGreaterEqual(template_index, 0)
tab.template_combo.setCurrentIndex(template_index)
tab.load_selected_template()
self.assertEqual("完整提示词", tab.prompt_edit.toPlainText())
tab.item_id_edit.setText("51100639510")
tab.open_project()
self.assertIsNotNone(tab.current_project)
self.assertEqual("alias-a", tab.current_project.account_alias)
self.assertEqual("51100639510", tab.current_project.item_id)
self.assertEqual(1, tab.project_table.rowCount())
original = image_studio.sync_original_asset_urls(
tab.current_project.id,
[{"index": 1, "src": "https://susercontent.com/main-1.jpg"}],
path=cfg["db_path"],
)[0]
tab.refresh_project_assets()
self.assertEqual(1, tab.original_table.rowCount())
self.assertEqual("1", tab.original_table.item(0, 0).text())
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("远程待下载", tab.pool_table.item(0, 2).text())
self.assertEqual(original.id, tab.pool_table.item(0, 0).data(gui.Qt.UserRole)["asset_id"])
self.assert_removed(temp_dir)
def test_startup_update_gate_forced_blocks_and_opens_download(self):
boxes = []