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.
iTi-Flask/tests/test_modules.py

79 lines
2.0 KiB
Python

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"
def test_create_app_runs_register_mq_between_tasks_and_routes():
phases = []
class MQModule:
name = "mq-demo"
def init_app(self, app):
phases.append("init_app")
def register_tasks(self, app):
phases.append("register_tasks")
def register_mq(self, app):
phases.append("register_mq")
def register_routes(self, app):
phases.append("register_routes")
def register_permissions(self, app):
phases.append("register_permissions")
def register_menu_seed(self, app):
phases.append("register_menu_seed")
create_app(
modules=[MQModule()],
config_mapping=BaseConfig(
database_url="sqlite+pysqlite:///:memory:",
exchange_enabled=False,
),
)
assert phases == [
"init_app",
"register_tasks",
"register_mq",
"register_routes",
"register_permissions",
"register_menu_seed",
]