From ca2bba4f4aa711481bed57b2222636d76ae71e6c Mon Sep 17 00:00:00 2001 From: Sean Budd Date: Tue, 1 Jul 2025 16:39:27 +1000 Subject: [PATCH 1/2] Validate add-on ID format --- _tests/test_validate.py | 34 ++++++++++++++++++++++++++++++++++ _validate/validate.py | 7 +++++++ 2 files changed, 41 insertions(+) diff --git a/_tests/test_validate.py b/_tests/test_validate.py index 851597d..3bcb249 100644 --- a/_tests/test_validate.py +++ b/_tests/test_validate.py @@ -282,6 +282,40 @@ def test_invalidJSONDataAndPath(self): errors ) + def test_invalidAddonIdFormat_spaces(self): + """ Error when submission does not include correct addonId format + """ + self.submissionData['addonId'] = "invalid addon id" + errors = list( + validate.checkAddonId(self.manifest, VALID_SUBMISSION_JSON_FILE, self.submissionData) + ) + + self.assertEqual( + [ # expected errors + "Submission data 'addonId' field does not match the expected format:" + " must start and end with a letter, and contain only letters," + " numbers, and hyphens. invalid addon id" + ], + errors + ) + + def test_invalidAddonIdFormat_invalidStartChar(self): + """ Error when submission does not include correct addonId format + """ + self.submissionData['addonId'] = "1invalid-addon-id" + errors = list( + validate.checkAddonId(self.manifest, VALID_SUBMISSION_JSON_FILE, self.submissionData) + ) + + self.assertEqual( + [ # expected errors + "Submission data 'addonId' field does not match the expected format:" + " must start and end with a letter, and contain only letters," + " numbers, and hyphens. invalid addon id" + ], + errors + ) + @dataclass class VersionNumber: diff --git a/_validate/validate.py b/_validate/validate.py index f9916cc..510fc9a 100644 --- a/_validate/validate.py +++ b/_validate/validate.py @@ -180,6 +180,13 @@ def checkAddonId( "Submission data 'addonId' field does not match 'name' field in addon manifest:" f" {expectedName} vs {submission['addonId']}" ) + if not re.match(r"^[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9]$", expectedName): + yield ( + "Submission data 'addonId' field does not match the expected format:" + " must start and end with a letter, and contain only letters," + " numbers, and hyphens." + f" {submission['addonId']}" + ) VERSION_PARSE = re.compile(r"^(\d+)(?:$|(?:\.(\d+)$)|(?:\.(\d+)\.(\d+)$))") From 33b1a921d1cf3ce0ec72f2b336572d0e59c3a92f Mon Sep 17 00:00:00 2001 From: Sean Budd Date: Tue, 1 Jul 2025 16:55:59 +1000 Subject: [PATCH 2/2] fix tests --- _tests/test_validate.py | 14 ++++++++++---- _validate/validate.py | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/_tests/test_validate.py b/_tests/test_validate.py index 3bcb249..bc5d82b 100644 --- a/_tests/test_validate.py +++ b/_tests/test_validate.py @@ -282,10 +282,12 @@ def test_invalidJSONDataAndPath(self): errors ) - def test_invalidAddonIdFormat_spaces(self): + @patch('os.path.basename', return_value="invalid addon id") + def test_invalidAddonIdFormat_spaces(self, mock_basename): """ Error when submission does not include correct addonId format """ self.submissionData['addonId'] = "invalid addon id" + self.manifest['name'] = "invalid addon id" errors = list( validate.checkAddonId(self.manifest, VALID_SUBMISSION_JSON_FILE, self.submissionData) ) @@ -294,15 +296,18 @@ def test_invalidAddonIdFormat_spaces(self): [ # expected errors "Submission data 'addonId' field does not match the expected format:" " must start and end with a letter, and contain only letters," - " numbers, and hyphens. invalid addon id" + " numbers, and hyphens. " + "ID: invalid addon id" ], errors ) - def test_invalidAddonIdFormat_invalidStartChar(self): + @patch('os.path.basename', return_value="1invalid-addon-id") + def test_invalidAddonIdFormat_invalidStartChar(self, mock_basename): """ Error when submission does not include correct addonId format """ self.submissionData['addonId'] = "1invalid-addon-id" + self.manifest['name'] = "1invalid-addon-id" errors = list( validate.checkAddonId(self.manifest, VALID_SUBMISSION_JSON_FILE, self.submissionData) ) @@ -311,7 +316,8 @@ def test_invalidAddonIdFormat_invalidStartChar(self): [ # expected errors "Submission data 'addonId' field does not match the expected format:" " must start and end with a letter, and contain only letters," - " numbers, and hyphens. invalid addon id" + " numbers, and hyphens. " + "ID: 1invalid-addon-id" ], errors ) diff --git a/_validate/validate.py b/_validate/validate.py index 510fc9a..2011bc8 100644 --- a/_validate/validate.py +++ b/_validate/validate.py @@ -184,8 +184,8 @@ def checkAddonId( yield ( "Submission data 'addonId' field does not match the expected format:" " must start and end with a letter, and contain only letters," - " numbers, and hyphens." - f" {submission['addonId']}" + " numbers, and hyphens. " + f"ID: {submission['addonId']}" )