feat(product-suite): remove fixed original image placeholders
This commit is contained in:
+103
-10
@@ -14,7 +14,7 @@ from app import gui
|
||||
if gui.QT_IMPORT_ERROR is not None:
|
||||
raise unittest.SkipTest("PySide6 未安装")
|
||||
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtCore import QMimeData, Qt, QUrl
|
||||
from PySide6.QtGui import QIcon, QImage, QPixmap
|
||||
from PySide6.QtTest import QTest
|
||||
from PySide6.QtWidgets import QApplication, QLabel, QListWidgetItem, QPushButton
|
||||
@@ -483,11 +483,16 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
|
||||
|
||||
self.assertEqual(Qt.ScrollBarAlwaysOff, tab.original_list.horizontalScrollBarPolicy())
|
||||
self.assertEqual(Qt.ScrollBarAlwaysOff, tab.original_list.verticalScrollBarPolicy())
|
||||
self.assertEqual(6, tab.original_list.count())
|
||||
self.assertEqual(2, tab.original_list.content_row_count())
|
||||
self.assertEqual(0, tab.original_list.count())
|
||||
self.assertEqual([], tab.original_list.asset_ids())
|
||||
self.assertEqual("0/16", tab.original_count_label.text())
|
||||
self.assertEqual("已选 0 张", tab.original_selected_label.text())
|
||||
self.assertFalse(tab.select_all_originals_button.isEnabled())
|
||||
self.assertFalse(tab.invert_originals_button.isEnabled())
|
||||
self.assertEqual(1, tab.original_list.content_row_count())
|
||||
empty_height = tab.original_list.height()
|
||||
|
||||
for target_count in (6, 7, 16):
|
||||
for target_count in (1, 2, 5, 6, 7, 16):
|
||||
for index in range(len(assets), target_count):
|
||||
source_path = os.path.join(temp_dir, "added-%02d.png" % (index + 1))
|
||||
self._write_image(source_path)
|
||||
@@ -502,11 +507,15 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
|
||||
)
|
||||
tab._refresh_originals(state)
|
||||
self.app.processEvents()
|
||||
self.assertEqual(target_count, tab.original_list.count())
|
||||
self.assertEqual(target_count, len(tab.original_list.asset_ids()))
|
||||
expected_rows = (max(6, target_count) + 2) // 3
|
||||
columns = tab.original_list.content_column_count()
|
||||
expected_rows = (target_count + columns - 1) // columns
|
||||
self.assertEqual(expected_rows, tab.original_list.content_row_count())
|
||||
if target_count == 6:
|
||||
self.assertEqual("%d/16" % target_count, tab.original_count_label.text())
|
||||
if target_count == 1:
|
||||
self.assertEqual(empty_height, tab.original_list.height())
|
||||
self.assertTrue(tab.add_images_button.isEnabled())
|
||||
|
||||
wide_height = tab.original_list.height()
|
||||
tab.original_list.setFixedWidth(250)
|
||||
@@ -514,9 +523,95 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
|
||||
self.assertEqual(2, tab.original_list.content_column_count())
|
||||
self.assertEqual(8, tab.original_list.content_row_count())
|
||||
self.assertGreater(tab.original_list.height(), wide_height)
|
||||
self.assertFalse(tab.add_images_button.isEnabled())
|
||||
self.assertEqual("已达到16张商品原图上限", tab.add_images_button.toolTip())
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_empty_original_list_accepts_file_drop_and_clipboard_image(self):
|
||||
original_list = ProductOriginalList()
|
||||
self.addCleanup(original_list.close)
|
||||
original_list.setFixedSize(360, 110)
|
||||
original_list.show()
|
||||
self.app.processEvents()
|
||||
|
||||
self.assertEqual(0, original_list.count())
|
||||
self.assertEqual("暂无商品原图", original_list.EMPTY_STATE_TEXT)
|
||||
self.assertEqual(1, original_list.content_row_count())
|
||||
|
||||
dropped = []
|
||||
pasted = []
|
||||
original_list.filesDropped.connect(dropped.append)
|
||||
original_list.clipboardImage.connect(pasted.append)
|
||||
|
||||
class DropEvent:
|
||||
def __init__(self, mime_data):
|
||||
self._mime_data = mime_data
|
||||
self.accepted = False
|
||||
|
||||
def mimeData(self):
|
||||
return self._mime_data
|
||||
|
||||
def acceptProposedAction(self):
|
||||
self.accepted = True
|
||||
|
||||
mime_data = QMimeData()
|
||||
expected_path = os.path.abspath("待导入图片.png")
|
||||
mime_data.setUrls([QUrl.fromLocalFile(expected_path)])
|
||||
drop_event = DropEvent(mime_data)
|
||||
original_list.dropEvent(drop_event)
|
||||
self.assertTrue(drop_event.accepted)
|
||||
self.assertEqual(
|
||||
os.path.normcase(os.path.normpath(expected_path)),
|
||||
os.path.normcase(os.path.normpath(dropped[0][0])),
|
||||
)
|
||||
|
||||
clipboard_image = QImage(24, 18, QImage.Format_RGB32)
|
||||
clipboard_image.fill(0xFF336699)
|
||||
QApplication.clipboard().setImage(clipboard_image)
|
||||
original_list.setFocus()
|
||||
QTest.keyClick(original_list, Qt.Key_V, Qt.ControlModifier)
|
||||
self.app.processEvents()
|
||||
QApplication.clipboard().clear()
|
||||
self.assertEqual(1, len(pasted))
|
||||
self.assertTrue(pasted[0].startswith(b"\x89PNG\r\n\x1a\n"))
|
||||
|
||||
def test_add_images_button_tracks_capacity_import_and_generation(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
config = self._config(temp_dir)
|
||||
project, _ = self._create_project_with_assets(temp_dir, config, 1)
|
||||
tab = ProductSuiteTab(config=config, db_path=config["db_path"])
|
||||
self.addCleanup(tab.close)
|
||||
state = tab._displayed_state
|
||||
state.account_alias = "alias-a"
|
||||
state.item_id = "51100639510"
|
||||
state.project_id = project.id
|
||||
tab._load_state(state)
|
||||
|
||||
style = tab.add_images_button.styleSheet()
|
||||
for color in ("#0969da", "#eef4ff", "#dbeafe", "#c7ddff", "#f6f8fa"):
|
||||
self.assertIn(color, style)
|
||||
self.assertTrue(tab.add_images_button.isEnabled())
|
||||
self.assertEqual("添加本地商品原图", tab.add_images_button.toolTip())
|
||||
|
||||
state.import_worker = object()
|
||||
tab._refresh_add_images_action(state)
|
||||
self.assertFalse(tab.add_images_button.isEnabled())
|
||||
self.assertEqual("正在添加商品原图", tab.add_images_button.toolTip())
|
||||
state.import_thread = object()
|
||||
tab._on_import_failed(state, "测试导入失败")
|
||||
self.assertIsNone(state.import_worker)
|
||||
self.assertIsNone(state.import_thread)
|
||||
self.assertTrue(tab.add_images_button.isEnabled())
|
||||
|
||||
state.worker = object()
|
||||
tab._refresh_add_images_action(state)
|
||||
self.assertFalse(tab.add_images_button.isEnabled())
|
||||
self.assertEqual("生成中不能添加商品原图", tab.add_images_button.toolTip())
|
||||
state.worker = None
|
||||
tab._refresh_add_images_action(state)
|
||||
self.assertTrue(tab.add_images_button.isEnabled())
|
||||
|
||||
def test_original_checks_preserve_on_refresh_and_clear_on_task_switch(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
config = self._config(temp_dir)
|
||||
@@ -529,13 +624,11 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
|
||||
state.project_id = project.id
|
||||
tab._load_state(state)
|
||||
|
||||
self.assertEqual(6, tab.original_list.count())
|
||||
self.assertEqual(2, tab.original_list.count())
|
||||
self.assertTrue(tab.select_all_originals_button.isEnabled())
|
||||
self.assertTrue(tab.invert_originals_button.isEnabled())
|
||||
for row in range(2):
|
||||
for row in range(tab.original_list.count()):
|
||||
self.assertIsNotNone(tab.original_list.item(row).data(ORIGINAL_CHECK_STATE_ROLE))
|
||||
for row in range(2, 6):
|
||||
self.assertIsNone(tab.original_list.item(row).data(ORIGINAL_CHECK_STATE_ROLE))
|
||||
|
||||
tab.select_all_originals_button.click()
|
||||
self.assertEqual([asset.id for asset in assets], tab.original_list.checked_asset_ids())
|
||||
|
||||
Reference in New Issue
Block a user