fix(product-suite): finalize sorting after drag
This commit is contained in:
@@ -2934,37 +2934,103 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
|
||||
changes = []
|
||||
original_list.orderChanged.connect(changes.append)
|
||||
|
||||
original_list._dragged_item = original_list.item(1)
|
||||
self.assertTrue(original_list._begin_internal_drag(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([], changes)
|
||||
self.assertTrue(original_list._finish_internal_drag())
|
||||
self.assertEqual([[12, 11, 13]], changes)
|
||||
self.assertEqual(3, len(set(original_list.asset_ids())))
|
||||
|
||||
original_list._dragged_item = original_list.item(0)
|
||||
self.assertTrue(original_list._begin_internal_drag(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]], changes)
|
||||
self.assertTrue(original_list._finish_internal_drag())
|
||||
self.assertEqual([[12, 11, 13], [11, 13, 12]], changes)
|
||||
|
||||
original_list._dragged_item = original_list.item(1)
|
||||
self.assertTrue(original_list._begin_internal_drag(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.assertFalse(original_list._finish_internal_drag())
|
||||
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._begin_internal_drag(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)
|
||||
|
||||
original_list.takeItem(3)
|
||||
original_list.set_reordering_enabled(False)
|
||||
self.assertFalse(original_list._begin_internal_drag(original_list.item(0)))
|
||||
|
||||
def test_original_list_repeated_primary_moves_keep_every_asset_and_label(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
config = self._config(temp_dir)
|
||||
project, assets = self._create_project_with_assets(temp_dir, config, 5)
|
||||
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)
|
||||
tab.resize(1180, 760)
|
||||
tab.show()
|
||||
self.app.processEvents()
|
||||
|
||||
original_ids = {asset.id for asset in assets}
|
||||
expected_labels = ["主图", "参考1", "参考2", "参考3", "参考4"]
|
||||
for asset in assets[1:]:
|
||||
row = tab.original_list.asset_ids().index(asset.id)
|
||||
self.assertTrue(
|
||||
tab.original_list._begin_internal_drag(tab.original_list.item(row))
|
||||
)
|
||||
first_rect = tab.original_list.visualItemRect(tab.original_list.item(0))
|
||||
self.assertTrue(
|
||||
tab.original_list._move_dragged_item_to(first_rect.center())
|
||||
)
|
||||
database_ids_before_finish = [
|
||||
stored.id
|
||||
for stored in image_studio.list_assets(
|
||||
project.id,
|
||||
kind=image_studio.ASSET_KIND_ORIGINAL,
|
||||
path=config["db_path"],
|
||||
)
|
||||
]
|
||||
self.assertNotEqual(tab.original_list.asset_ids(), database_ids_before_finish)
|
||||
|
||||
self.assertTrue(tab.original_list._finish_internal_drag())
|
||||
visible_ids = tab.original_list.asset_ids()
|
||||
database_ids = [
|
||||
stored.id
|
||||
for stored in image_studio.list_assets(
|
||||
project.id,
|
||||
kind=image_studio.ASSET_KIND_ORIGINAL,
|
||||
path=config["db_path"],
|
||||
)
|
||||
]
|
||||
self.assertEqual(5, tab.original_list.count())
|
||||
self.assertEqual(original_ids, set(visible_ids))
|
||||
self.assertEqual(5, len(set(visible_ids)))
|
||||
self.assertEqual(asset.id, visible_ids[0])
|
||||
self.assertEqual(visible_ids, database_ids)
|
||||
self.assertEqual(
|
||||
expected_labels,
|
||||
[tab.original_list.item(row).text() for row in range(5)],
|
||||
)
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
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