83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from govoplan_core.core.modules import ModuleContext, ModuleManifest
|
|
from govoplan_core.core.registry import PlatformRegistry
|
|
from govoplan_core.core.search import (
|
|
SearchDocument,
|
|
SearchProvider,
|
|
SearchProviderRegistration,
|
|
SearchQuery,
|
|
SearchResult,
|
|
)
|
|
|
|
|
|
class _Provider:
|
|
def search(self, session, principal, *, query):
|
|
del session, principal
|
|
return (
|
|
SearchResult(
|
|
provider_id="test",
|
|
module_id="test",
|
|
resource_type="record",
|
|
resource_id="1",
|
|
title=query.text,
|
|
url="/test/1",
|
|
),
|
|
)
|
|
|
|
|
|
class SearchContractTests(unittest.TestCase):
|
|
def test_query_and_restricted_document_are_bounded(self) -> None:
|
|
query = SearchQuery(text=" permit ", tenant_id="tenant-1", limit=20)
|
|
document = SearchDocument(
|
|
tenant_id="tenant-1",
|
|
module_id="cases",
|
|
resource_type="case",
|
|
resource_id="case-1",
|
|
title="Permit",
|
|
url="/cases/case-1",
|
|
acl_tokens=("account:account-1",),
|
|
)
|
|
|
|
self.assertEqual("permit", query.text)
|
|
self.assertEqual("restricted", document.visibility)
|
|
with self.assertRaises(ValueError):
|
|
SearchDocument(
|
|
tenant_id="tenant-1",
|
|
module_id="cases",
|
|
resource_type="case",
|
|
resource_id="case-1",
|
|
title="Permit",
|
|
url="/cases/case-1",
|
|
)
|
|
|
|
def test_manifest_provider_registration_resolves_lazily(self) -> None:
|
|
registry = PlatformRegistry()
|
|
registry.register(
|
|
ModuleManifest(
|
|
id="test",
|
|
name="Test",
|
|
version="1",
|
|
search_providers=(
|
|
SearchProviderRegistration(
|
|
id="test.records",
|
|
factory=lambda context: _Provider(),
|
|
resource_types=("record",),
|
|
),
|
|
),
|
|
)
|
|
)
|
|
registry.configure_capability_context(
|
|
ModuleContext(registry=registry, settings=object())
|
|
)
|
|
|
|
providers = registry.search_providers()
|
|
self.assertEqual(1, len(providers))
|
|
self.assertIsInstance(providers[0][1], SearchProvider)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|