intermittent commit
This commit is contained in:
@@ -4,10 +4,12 @@ import unittest
|
||||
from types import SimpleNamespace
|
||||
|
||||
from govoplan_access.backend.manifest import get_manifest as get_access_manifest
|
||||
from govoplan_core.core.modules import DocumentationCondition
|
||||
from govoplan_core.core.registry import PlatformRegistry
|
||||
from govoplan_tenancy.backend.manifest import get_manifest as get_tenancy_manifest
|
||||
from govoplan_docs.backend.api.v1.routes import (
|
||||
_classify_documentation,
|
||||
_condition_visibility,
|
||||
_documentation_topic_anchor,
|
||||
_documentation_topic_groups,
|
||||
)
|
||||
@@ -86,6 +88,49 @@ class DocsContextTests(unittest.TestCase):
|
||||
"docs-topic-access-access-workflow-grant-user-access",
|
||||
)
|
||||
|
||||
def test_condition_visibility_reports_module_capability_and_scope_blockers(self) -> None:
|
||||
registry = PlatformRegistry()
|
||||
condition = DocumentationCondition(
|
||||
required_modules=("mail",),
|
||||
any_modules=("files", "campaigns"),
|
||||
missing_modules=("legacy",),
|
||||
required_capabilities=("mail.delivery",),
|
||||
required_scopes=("docs:documentation:read",),
|
||||
any_scopes=("mail:profile:read", "admin:policies:read"),
|
||||
)
|
||||
principal = FakePrincipal({"docs:documentation:read"})
|
||||
|
||||
active, reason, blockers = _condition_visibility(condition, {"legacy"}, registry, principal)
|
||||
|
||||
self.assertFalse(active)
|
||||
self.assertEqual(
|
||||
reason,
|
||||
"missing modules: mail; "
|
||||
"requires one installed module from: files, campaigns; "
|
||||
"not active when installed: legacy; "
|
||||
"missing capabilities: mail.delivery; "
|
||||
"requires one scope from: mail:profile:read, admin:policies:read",
|
||||
)
|
||||
self.assertEqual(blockers["modules"], ["mail", "files", "campaigns", "legacy"])
|
||||
self.assertEqual(blockers["capabilities"], ["mail.delivery"])
|
||||
self.assertEqual(blockers["scopes"], ["mail:profile:read", "admin:policies:read"])
|
||||
|
||||
def test_condition_visibility_accepts_any_module_scope_and_capability(self) -> None:
|
||||
registry = PlatformRegistry()
|
||||
registry.register_capability_factory("mail", "mail.delivery", lambda context: object())
|
||||
condition = DocumentationCondition(
|
||||
any_modules=("files", "campaigns"),
|
||||
required_capabilities=("mail.delivery",),
|
||||
any_scopes=("mail:profile:read", "admin:policies:read"),
|
||||
)
|
||||
principal = FakePrincipal({"admin:policies:read"})
|
||||
|
||||
active, reason, blockers = _condition_visibility(condition, {"campaigns"}, registry, principal)
|
||||
|
||||
self.assertTrue(active)
|
||||
self.assertEqual(reason, "conditions satisfied")
|
||||
self.assertEqual(blockers, {"modules": [], "capabilities": [], "scopes": []})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user