fix(product-suite): prevent duplicate drag sorting
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user