Skip to content

Commit 79731a7

Browse files
authored
Validate add-on ID format (#44)
add-ons have been submitted to the store with invalid formats for add-on IDs such as containing spaces
1 parent a29f649 commit 79731a7

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

_tests/test_validate.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,46 @@ def test_invalidJSONDataAndPath(self):
282282
errors
283283
)
284284

285+
@patch('os.path.basename', return_value="invalid addon id")
286+
def test_invalidAddonIdFormat_spaces(self, mock_basename):
287+
""" Error when submission does not include correct addonId format
288+
"""
289+
self.submissionData['addonId'] = "invalid addon id"
290+
self.manifest['name'] = "invalid addon id"
291+
errors = list(
292+
validate.checkAddonId(self.manifest, VALID_SUBMISSION_JSON_FILE, self.submissionData)
293+
)
294+
295+
self.assertEqual(
296+
[ # expected errors
297+
"Submission data 'addonId' field does not match the expected format:"
298+
" must start and end with a letter, and contain only letters,"
299+
" numbers, and hyphens. "
300+
"ID: invalid addon id"
301+
],
302+
errors
303+
)
304+
305+
@patch('os.path.basename', return_value="1invalid-addon-id")
306+
def test_invalidAddonIdFormat_invalidStartChar(self, mock_basename):
307+
""" Error when submission does not include correct addonId format
308+
"""
309+
self.submissionData['addonId'] = "1invalid-addon-id"
310+
self.manifest['name'] = "1invalid-addon-id"
311+
errors = list(
312+
validate.checkAddonId(self.manifest, VALID_SUBMISSION_JSON_FILE, self.submissionData)
313+
)
314+
315+
self.assertEqual(
316+
[ # expected errors
317+
"Submission data 'addonId' field does not match the expected format:"
318+
" must start and end with a letter, and contain only letters,"
319+
" numbers, and hyphens. "
320+
"ID: 1invalid-addon-id"
321+
],
322+
errors
323+
)
324+
285325

286326
@dataclass
287327
class VersionNumber:

_validate/validate.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,13 @@ def checkAddonId(
180180
"Submission data 'addonId' field does not match 'name' field in addon manifest:"
181181
f" {expectedName} vs {submission['addonId']}"
182182
)
183+
if not re.match(r"^[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9]$", expectedName):
184+
yield (
185+
"Submission data 'addonId' field does not match the expected format:"
186+
" must start and end with a letter, and contain only letters,"
187+
" numbers, and hyphens. "
188+
f"ID: {submission['addonId']}"
189+
)
183190

184191

185192
VERSION_PARSE = re.compile(r"^(\d+)(?:$|(?:\.(\d+)$)|(?:\.(\d+)\.(\d+)$))")

0 commit comments

Comments
 (0)