Enforce tenant module availability in Views
This commit is contained in:
@@ -1,12 +1,17 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from fastapi import HTTPException
|
||||
|
||||
from govoplan_core.auth import ApiPrincipal
|
||||
from govoplan_core.core.access import PrincipalRef
|
||||
from govoplan_core.core.modules import ModuleManifest
|
||||
from govoplan_core.core.views import ViewSurface
|
||||
from govoplan_views.backend.router import (
|
||||
_catalogue,
|
||||
_require_definition_read,
|
||||
_require_definition_write,
|
||||
)
|
||||
@@ -59,6 +64,54 @@ class ViewDefinitionAuthorizationTests(unittest.TestCase):
|
||||
_require_definition_write(actor, "group", "group-2")
|
||||
_require_definition_write(actor, "user", "account-2")
|
||||
|
||||
def test_catalogue_excludes_surfaces_of_tenant_unavailable_modules(self) -> None:
|
||||
actor = principal(scopes=("views:definition:read",))
|
||||
registry = SimpleNamespace(
|
||||
manifests=lambda: (
|
||||
ModuleManifest(id="access", name="Access", version="1"),
|
||||
ModuleManifest(id="views", name="Views", version="1"),
|
||||
ModuleManifest(id="files", name="Files", version="1"),
|
||||
),
|
||||
view_surfaces=lambda: (
|
||||
ViewSurface(
|
||||
id="views.module",
|
||||
module_id="views",
|
||||
kind="module",
|
||||
label="Views",
|
||||
),
|
||||
ViewSurface(
|
||||
id="files.module",
|
||||
module_id="files",
|
||||
kind="module",
|
||||
label="Files",
|
||||
),
|
||||
),
|
||||
)
|
||||
tenant = SimpleNamespace(
|
||||
settings={
|
||||
"module_entitlements": {
|
||||
"schema_version": 1,
|
||||
"revision": 1,
|
||||
"system_policy": {
|
||||
"available_modules": ["access", "views"],
|
||||
"forced_modules": ["access"],
|
||||
},
|
||||
"tenant_selection": {
|
||||
"enabled_modules": ["views"],
|
||||
},
|
||||
}
|
||||
}
|
||||
)
|
||||
session = SimpleNamespace(get=lambda model, tenant_id: tenant)
|
||||
|
||||
with patch(
|
||||
"govoplan_views.backend.router.get_registry",
|
||||
return_value=registry,
|
||||
):
|
||||
catalogue = _catalogue(session, actor)
|
||||
|
||||
self.assertEqual(["views.module"], [surface.id for surface in catalogue])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user