import pytest from iti.config import BaseConfig from iti.modules import ModuleMenuSeed, ModulePermission, ModuleRegistry from iti import create_app class DemoModule: name = "demo" def register_permissions(self, app): app.state.iti_modules.register_permission(ModulePermission("demo.read", "Demo Read")) def register_menu_seed(self, app): app.state.iti_modules.register_menu_seed( ModuleMenuSeed(id="demo", name="Demo", type="menu", sort=10) ) def test_module_registry_rejects_duplicate_names(): registry = ModuleRegistry() registry.register(DemoModule()) with pytest.raises(ValueError, match="already registered"): registry.register(DemoModule()) def test_create_app_runs_module_registration(): app = create_app( modules=[DemoModule()], config_mapping=BaseConfig(database_url="sqlite+pysqlite:///:memory:"), ) registry = app.state.iti_modules assert registry.permissions["demo.read"].name == "Demo Read" assert registry.list_menu_seeds()[0].id == "demo"