39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""Builtin (non-removable core) plugin handling (SPEC §11 / §12)."""
|
|||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from app.plugins import loader
|
||
|
|
from app.plugins.sdk import Plugin
|
||
|
|
|
||
|
|
|
||
|
|
def test_builtin_defaults_false() -> None:
|
||
|
|
assert Plugin(name="filters", version="1").builtin is False
|
||
|
|
assert Plugin(name="calendar", version="1", builtin=True).builtin is True
|
||
|
|
|
||
|
|
|
||
|
|
def test_assert_removable_blocks_builtin() -> None:
|
||
|
|
loader.set_plugins_for_test(
|
||
|
|
[
|
||
|
|
Plugin(name="filters", version="1"), # removable
|
||
|
|
Plugin(name="calendar", version="1", builtin=True), # core, non-removable
|
||
|
|
]
|
||
|
|
)
|
||
|
|
assert loader.assert_removable("filters").name == "filters"
|
||
|
|
|
||
|
|
with pytest.raises(loader.PluginRemovalError, match="builtin"):
|
||
|
|
loader.assert_removable("calendar")
|
||
|
|
with pytest.raises(loader.PluginRemovalError, match="unknown"):
|
||
|
|
loader.assert_removable("nope")
|
||
|
|
|
||
|
|
|
||
|
|
def test_builtin_surfaces_in_ui_manifest() -> None:
|
||
|
|
from app.plugins.sdk import UiManifest
|
||
|
|
|
||
|
|
loader.set_plugins_for_test(
|
||
|
|
[Plugin(name="calendar", version="1", builtin=True, ui_manifest=UiManifest())]
|
||
|
|
)
|
||
|
|
entry = loader.build_ui_manifest()["plugins"][0]
|
||
|
|
assert entry["name"] == "calendar" and entry["builtin"] is True
|