feat: strengthen module contracts and shared WebUI runtime
This commit is contained in:
119
tests/test_postbox_contract.py
Normal file
119
tests/test_postbox_contract.py
Normal file
@@ -0,0 +1,119 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from govoplan_core.core.modules import ModuleContext, ModuleManifest
|
||||
from govoplan_core.core.postbox import (
|
||||
CAPABILITY_POSTBOX_ACCESS,
|
||||
CAPABILITY_POSTBOX_DELIVERY,
|
||||
CAPABILITY_POSTBOX_DIRECTORY,
|
||||
CAPABILITY_POSTBOX_EVIDENCE,
|
||||
CAPABILITY_POSTBOX_MESSAGES,
|
||||
PostboxAccessProvider,
|
||||
PostboxDeliveryProvider,
|
||||
PostboxDirectoryProvider,
|
||||
PostboxEvidenceProvider,
|
||||
PostboxMessagesProvider,
|
||||
postbox_access_provider,
|
||||
postbox_delivery_provider,
|
||||
postbox_directory_provider,
|
||||
postbox_evidence_provider,
|
||||
postbox_messages_provider,
|
||||
)
|
||||
from govoplan_core.core.registry import PlatformRegistry
|
||||
|
||||
|
||||
class _PostboxProvider:
|
||||
def list_visible_postboxes(self, session, *, tenant_id, actor):
|
||||
del session, tenant_id, actor
|
||||
return ()
|
||||
|
||||
def resolve_postbox(self, session, *, tenant_id, target, materialize=False):
|
||||
del session, tenant_id, target, materialize
|
||||
return None
|
||||
|
||||
def delivery_catalog(self, session, *, tenant_id):
|
||||
del session, tenant_id
|
||||
return None
|
||||
|
||||
def explain_access(self, session, *, tenant_id, postbox_id, actor, action):
|
||||
del session, tenant_id, postbox_id, actor, action
|
||||
return None
|
||||
|
||||
def list_messages(
|
||||
self,
|
||||
session,
|
||||
*,
|
||||
tenant_id,
|
||||
postbox_ids,
|
||||
actor,
|
||||
limit=100,
|
||||
offset=0,
|
||||
):
|
||||
del session, tenant_id, postbox_ids, actor, limit, offset
|
||||
return ()
|
||||
|
||||
def get_message(self, session, *, tenant_id, message_id, actor):
|
||||
del session, tenant_id, message_id, actor
|
||||
return None
|
||||
|
||||
def mark_message(self, session, *, tenant_id, message_id, actor, state):
|
||||
del session, tenant_id, message_id, actor, state
|
||||
return None
|
||||
|
||||
def deliver(self, session, request):
|
||||
del session, request
|
||||
return None
|
||||
|
||||
def link_evidence(self, session, *, tenant_id, message_id, attachment):
|
||||
del session, tenant_id, message_id, attachment
|
||||
return None
|
||||
|
||||
|
||||
class PostboxContractTests(unittest.TestCase):
|
||||
def test_protocols_and_registry_helpers_resolve_without_module_imports(self) -> None:
|
||||
provider = _PostboxProvider()
|
||||
self.assertIsInstance(provider, PostboxDirectoryProvider)
|
||||
self.assertIsInstance(provider, PostboxAccessProvider)
|
||||
self.assertIsInstance(provider, PostboxMessagesProvider)
|
||||
self.assertIsInstance(provider, PostboxDeliveryProvider)
|
||||
self.assertIsInstance(provider, PostboxEvidenceProvider)
|
||||
|
||||
registry = PlatformRegistry()
|
||||
registry.register(
|
||||
ModuleManifest(
|
||||
id="postbox_contract_test",
|
||||
name="Postbox contract test",
|
||||
version="test",
|
||||
capability_factories={
|
||||
name: lambda context: provider
|
||||
for name in (
|
||||
CAPABILITY_POSTBOX_DIRECTORY,
|
||||
CAPABILITY_POSTBOX_ACCESS,
|
||||
CAPABILITY_POSTBOX_MESSAGES,
|
||||
CAPABILITY_POSTBOX_DELIVERY,
|
||||
CAPABILITY_POSTBOX_EVIDENCE,
|
||||
)
|
||||
},
|
||||
)
|
||||
)
|
||||
registry.configure_capability_context(
|
||||
ModuleContext(registry=registry, settings=object())
|
||||
)
|
||||
|
||||
self.assertIs(provider, postbox_directory_provider(registry))
|
||||
self.assertIs(provider, postbox_access_provider(registry))
|
||||
self.assertIs(provider, postbox_messages_provider(registry))
|
||||
self.assertIs(provider, postbox_delivery_provider(registry))
|
||||
self.assertIs(provider, postbox_evidence_provider(registry))
|
||||
|
||||
empty = PlatformRegistry()
|
||||
self.assertIsNone(postbox_directory_provider(empty))
|
||||
self.assertIsNone(postbox_access_provider(empty))
|
||||
self.assertIsNone(postbox_messages_provider(empty))
|
||||
self.assertIsNone(postbox_delivery_provider(empty))
|
||||
self.assertIsNone(postbox_evidence_provider(empty))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user