fix(product-suite): validate item id before generation
This commit is contained in:
@@ -23,6 +23,17 @@ class ImageStudioTests(TempDirMixin, unittest.TestCase):
|
||||
"cdp_ready_timeout": 1,
|
||||
}
|
||||
|
||||
def test_formal_item_id_normalization_removes_format_characters_only(self):
|
||||
zero_width_item_id = "51100639510" + chr(0x200B)
|
||||
self.assertEqual(
|
||||
"51100639510",
|
||||
image_studio.normalize_item_id_input(" " + zero_width_item_id + " "),
|
||||
)
|
||||
self.assertTrue(image_studio.is_formal_item_id(zero_width_item_id))
|
||||
self.assertFalse(image_studio.is_formal_item_id("51100639510-1"))
|
||||
self.assertFalse(image_studio.is_formal_item_id("商品51100639510"))
|
||||
self.assertFalse(image_studio.is_formal_item_id("123"))
|
||||
|
||||
def test_init_db_adds_image_studio_tables_without_breaking_existing_tables(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
db_path = os.path.join(temp_dir, "cmshopee.db")
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user