fix(product-suite): prevent duplicate drag sorting

This commit is contained in:
chengma
2026-07-23 09:18:18 +08:00
parent de8dbc7754
commit 1d2bb4489a
5 changed files with 117 additions and 14 deletions
+45 -1
View File
@@ -2890,7 +2890,7 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
item = tab.original_list.item(row)
self.assertIsNotNone(item.data(ORIGINAL_CHECK_STATE_ROLE))
self.assertTrue(item.flags() & Qt.ItemIsDragEnabled)
self.assertTrue(item.flags() & Qt.ItemIsDropEnabled)
self.assertFalse(item.flags() & Qt.ItemIsDropEnabled)
self.assertEqual(Qt.MoveAction, tab.original_list.defaultDropAction())
tab.select_all_originals_button.click()
@@ -2921,6 +2921,50 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_original_list_moves_dragged_item_without_duplicate_asset_ids(self):
original_list = ProductOriginalList()
self.addCleanup(original_list.close)
original_list.setFixedSize(360, 120)
for asset_id in (11, 12, 13):
item = QListWidgetItem("原图%d" % asset_id)
item.setData(Qt.UserRole, asset_id)
original_list.addItem(item)
original_list.show()
self.app.processEvents()
changes = []
original_list.orderChanged.connect(changes.append)
original_list._dragged_item = original_list.item(1)
first_rect = original_list.visualItemRect(original_list.item(0))
self.assertTrue(original_list._move_dragged_item_to(first_rect.center()))
self.assertEqual([12, 11, 13], original_list.asset_ids())
self.assertEqual([[12, 11, 13]], changes)
self.assertEqual(3, len(set(original_list.asset_ids())))
original_list._dragged_item = original_list.item(0)
append_position = original_list.viewport().rect().bottomRight() - QPoint(2, 2)
self.assertTrue(original_list._move_dragged_item_to(append_position))
self.assertEqual([11, 13, 12], original_list.asset_ids())
self.assertEqual([[12, 11, 13], [11, 13, 12]], changes)
original_list._dragged_item = original_list.item(1)
same_rect = original_list.visualItemRect(original_list.item(1))
self.assertFalse(original_list._move_dragged_item_to(same_rect.center()))
self.assertEqual([11, 13, 12], original_list.asset_ids())
self.assertEqual([[12, 11, 13], [11, 13, 12]], changes)
original_list._dragged_item = None
self.assertFalse(original_list._move_dragged_item_to(first_rect.center()))
self.assertEqual([11, 13, 12], original_list.asset_ids())
duplicate = QListWidgetItem("重复原图")
duplicate.setData(Qt.UserRole, 12)
original_list.addItem(duplicate)
original_list._dragged_item = original_list.item(0)
self.assertFalse(original_list._move_dragged_item_to(first_rect.center()))
self.assertEqual(4, original_list.count())
self.assertEqual([[12, 11, 13], [11, 13, 12]], changes)
def test_temporary_draft_allows_local_work_but_blocks_shopee_pull_and_recovers(self):
with self.make_temp_dir() as temp_dir:
config = self._config(temp_dir)