ci(validate): added launcher prefix validation + list of allowed tags
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
VALIDATOR_PATH = Path(__file__).with_name("validate-plugins.py")
|
||||
SPEC = importlib.util.spec_from_file_location("validate_plugins", VALIDATOR_PATH)
|
||||
assert SPEC is not None and SPEC.loader is not None
|
||||
validate_plugins = importlib.util.module_from_spec(SPEC)
|
||||
SPEC.loader.exec_module(validate_plugins)
|
||||
|
||||
|
||||
class LauncherPrefixTests(unittest.TestCase):
|
||||
def validate_prefix(self, prefix: str) -> list[str]:
|
||||
validator = validate_plugins.Validator(Path("/repo"))
|
||||
validator.validate_launcher_fields(
|
||||
Path("/repo/example/plugin.toml"),
|
||||
"launcher_provider[0]",
|
||||
{"prefix": prefix},
|
||||
)
|
||||
return validator.errors
|
||||
|
||||
def test_accepts_lowercase_ascii_letters(self) -> None:
|
||||
self.assertEqual(self.validate_prefix("bla"), [])
|
||||
|
||||
def test_rejects_leading_symbol(self) -> None:
|
||||
self.assertNotEqual(self.validate_prefix("/bla"), [])
|
||||
|
||||
def test_rejects_uppercase_letters(self) -> None:
|
||||
self.assertNotEqual(self.validate_prefix("Bla"), [])
|
||||
|
||||
def test_rejects_digits(self) -> None:
|
||||
self.assertNotEqual(self.validate_prefix("bla2"), [])
|
||||
|
||||
def test_rejects_other_symbols(self) -> None:
|
||||
self.assertNotEqual(self.validate_prefix("bla-bla"), [])
|
||||
|
||||
|
||||
class AllowedTagsTests(unittest.TestCase):
|
||||
def validate_tags(self, tags: object) -> list[str]:
|
||||
validator = validate_plugins.Validator(Path("/repo"))
|
||||
validator.validate_tags(Path("/repo/example/plugin.toml"), tags)
|
||||
return validator.errors
|
||||
|
||||
def test_accepts_every_allowed_tag(self) -> None:
|
||||
self.assertEqual(self.validate_tags(sorted(validate_plugins.ALLOWED_TAGS)), [])
|
||||
|
||||
def test_rejects_unknown_tag(self) -> None:
|
||||
self.assertEqual(
|
||||
self.validate_tags(["utility", "unknown"]),
|
||||
[
|
||||
"example/plugin.toml: root: "
|
||||
"tags[1] 'unknown' is not an allowed tag"
|
||||
],
|
||||
)
|
||||
|
||||
def test_rejects_wrong_case(self) -> None:
|
||||
self.assertNotEqual(self.validate_tags(["Utility"]), [])
|
||||
|
||||
def test_retains_string_list_validation(self) -> None:
|
||||
errors = self.validate_tags(["utility", "utility", ""])
|
||||
self.assertTrue(any("duplicate 'utility'" in error for error in errors))
|
||||
self.assertTrue(any("tags[2] must be a non-empty string" in error for error in errors))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user