You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from iti.applications import create_app
|
|
from iti.applications.common.enums import MenuTypeEnum
|
|
from iti.modules import ModuleMenuSeed, ModulePermission, get_module_registry
|
|
from iti.modules.registry import ModuleRegistry
|
|
|
|
|
|
class RecordingModule:
|
|
name = "recording"
|
|
|
|
def __init__(self) -> None:
|
|
self.calls: list[str] = []
|
|
|
|
def init_app(self, app) -> None:
|
|
self.calls.append("init_app")
|
|
|
|
def register_commands(self, app) -> None:
|
|
self.calls.append("register_commands")
|
|
|
|
def register_routes(self, app) -> None:
|
|
self.calls.append("register_routes")
|
|
|
|
def register_permissions(self, app) -> None:
|
|
self.calls.append("register_permissions")
|
|
get_module_registry(app).register_permission(
|
|
ModulePermission(code="recording:list", name="录制列表")
|
|
)
|
|
|
|
def register_menu_seed(self, app) -> None:
|
|
self.calls.append("register_menu_seed")
|
|
get_module_registry(app).register_menu_seed(
|
|
ModuleMenuSeed(
|
|
id="recording-menu",
|
|
name="Recording",
|
|
type=MenuTypeEnum.MENU.value,
|
|
path="/recording",
|
|
component="/recording/list",
|
|
auth_code="recording:list",
|
|
meta={"title": "录制模块"},
|
|
sort=200,
|
|
)
|
|
)
|
|
|
|
|
|
def test_module_registry_rejects_duplicate_names():
|
|
registry = ModuleRegistry()
|
|
registry.register(RecordingModule())
|
|
|
|
with pytest.raises(ValueError, match="module already registered"):
|
|
registry.register(RecordingModule())
|
|
|
|
|
|
def test_create_app_runs_module_phases_and_collects_metadata():
|
|
module = RecordingModule()
|
|
imported: list[str] = []
|
|
|
|
app = create_app(
|
|
"test",
|
|
modules=[module],
|
|
config_mapping={"test": "iti.config.TestConfig"},
|
|
model_imports=[lambda: imported.append("models")],
|
|
)
|
|
|
|
registry = get_module_registry(app)
|
|
|
|
assert module.calls == [
|
|
"init_app",
|
|
"register_commands",
|
|
"register_routes",
|
|
"register_permissions",
|
|
"register_menu_seed",
|
|
]
|
|
assert imported == ["models"]
|
|
assert registry.list_permissions()[0].code == "recording:list"
|
|
assert registry.list_menu_seeds()[0].id == "recording-menu"
|
|
|
|
|