"""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