fix(product-suite): validate item id before generation

This commit is contained in:
chengma
2026-07-22 18:14:50 +08:00
parent 189b5855e9
commit 01b4a05c26
8 changed files with 129 additions and 45 deletions
+38
View File
@@ -3074,6 +3074,44 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_item_id_commit_normalizes_and_blocks_generation_before_state_changes(self):
with self.make_temp_dir() as temp_dir:
config = self._config(temp_dir)
project, _assets = 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 = project.account_alias
state.item_id = project.item_id
state.project_id = project.id
state.project_binding_state = project.binding_state
tab._load_state(state)
tab.item_id_edit.setText(project.item_id + chr(0x200B))
with mock.patch.object(tab, "_ensure_generation_gateway", return_value=False) as gateway:
self.assertFalse(tab.start_generation(state))
gateway.assert_called_once()
self.assertEqual(project.item_id, tab.item_id_edit.text())
self.assertEqual(project.item_id, state.item_id)
self.assertEqual(project.id, state.project_id)
tab.item_id_edit.setText(project.item_id + "-1")
with mock.patch.object(tab, "_ensure_generation_gateway", return_value=False) as gateway:
self.assertFalse(tab.start_generation(state))
gateway.assert_not_called()
self.assertEqual(project.item_id, state.item_id)
self.assertEqual(project.id, state.project_id)
self.assertEqual(project.item_id + "-1", tab.item_id_edit.text())
tab.item_id_edit.setText("51100639511")
with mock.patch.object(tab, "_confirm", return_value=False):
self.assertFalse(tab._commit_item_id(state))
self.assertEqual(project.item_id, state.item_id)
self.assertEqual(project.id, state.project_id)
self.assertEqual(project.item_id, tab.item_id_edit.text())
self.assert_removed(temp_dir)
def test_pull_confirmation_always_shows_account_item_and_existing_count(self):
with self.make_temp_dir() as temp_dir:
config = self._config(temp_dir)