nanobot/tests/extensions/test_manifest.py

54 lines
1.5 KiB
Python

import pytest
from nanobot.extensions import (
ExtensionDependency,
ExtensionManifest,
ExtensionPermission,
)
from nanobot.extensions.manifest import DependencyKind
def test_manifest_defaults_to_native_python_entry() -> None:
manifest = ExtensionManifest(
id="acme.research",
name="Acme Research",
version="1.2.0",
permissions=(
ExtensionPermission(
name="network",
reason="Fetch user-selected sources.",
),
),
)
assert manifest.entry == "extension:register"
@pytest.mark.parametrize("extension_id", ["Uppercase", "../escape", "two words", ""])
def test_manifest_rejects_invalid_ids(extension_id: str) -> None:
with pytest.raises(ValueError):
ExtensionManifest(id=extension_id, name="Invalid", version="1.0.0")
def test_manifest_rejects_duplicate_contract_rows() -> None:
dependency = ExtensionDependency(
kind=DependencyKind.PYTHON,
name="httpx",
)
permission = ExtensionPermission(name="network")
with pytest.raises(ValueError, match="duplicate dependencies"):
ExtensionManifest(
id="duplicate",
name="Duplicate",
version="1.0.0",
dependencies=(dependency, dependency),
)
with pytest.raises(ValueError, match="duplicate permissions"):
ExtensionManifest(
id="duplicate",
name="Duplicate",
version="1.0.0",
permissions=(permission, permission),
)