feat: version search source contracts
This commit is contained in:
@@ -5,11 +5,18 @@ import unittest
|
||||
from govoplan_core.core.modules import ModuleContext, ModuleManifest
|
||||
from govoplan_core.core.registry import PlatformRegistry
|
||||
from govoplan_core.core.search import (
|
||||
SearchAuthorizationRequest,
|
||||
SearchBackfillPage,
|
||||
SearchBackfillRequest,
|
||||
SearchDocument,
|
||||
SearchProvider,
|
||||
SearchProviderRegistration,
|
||||
SearchQuery,
|
||||
SearchResourceReference,
|
||||
SearchResourceType,
|
||||
SearchResult,
|
||||
SearchSourceProvider,
|
||||
SearchSourceProviderRegistration,
|
||||
)
|
||||
|
||||
|
||||
@@ -28,6 +35,34 @@ class _Provider:
|
||||
)
|
||||
|
||||
|
||||
class _Source:
|
||||
def resource_types(self):
|
||||
return (
|
||||
SearchResourceType(
|
||||
provider_id="test.records",
|
||||
module_id="test",
|
||||
resource_type="record",
|
||||
label="Records",
|
||||
),
|
||||
)
|
||||
|
||||
def backfill(self, session, *, request):
|
||||
del session
|
||||
return SearchBackfillPage(
|
||||
documents=(),
|
||||
next_cursor=None,
|
||||
complete=True,
|
||||
high_watermark=request.cursor,
|
||||
)
|
||||
|
||||
def authorize(self, session, principal, *, requests):
|
||||
del session, principal
|
||||
return {
|
||||
request.reference.key: True
|
||||
for request in requests
|
||||
}
|
||||
|
||||
|
||||
class SearchContractTests(unittest.TestCase):
|
||||
def test_query_and_restricted_document_are_bounded(self) -> None:
|
||||
query = SearchQuery(text=" permit ", tenant_id="tenant-1", limit=20)
|
||||
@@ -52,6 +87,17 @@ class SearchContractTests(unittest.TestCase):
|
||||
title="Permit",
|
||||
url="/cases/case-1",
|
||||
)
|
||||
with self.assertRaisesRegex(ValueError, "body"):
|
||||
SearchDocument(
|
||||
tenant_id="tenant-1",
|
||||
module_id="cases",
|
||||
resource_type="case",
|
||||
resource_id="case-1",
|
||||
title="Permit",
|
||||
url="/cases/case-1",
|
||||
body="x" * 200_001,
|
||||
acl_tokens=("account:account-1",),
|
||||
)
|
||||
|
||||
def test_manifest_provider_registration_resolves_lazily(self) -> None:
|
||||
registry = PlatformRegistry()
|
||||
@@ -67,6 +113,12 @@ class SearchContractTests(unittest.TestCase):
|
||||
resource_types=("record",),
|
||||
),
|
||||
),
|
||||
search_sources=(
|
||||
SearchSourceProviderRegistration(
|
||||
id="test.records",
|
||||
factory=lambda context: _Source(),
|
||||
),
|
||||
),
|
||||
)
|
||||
)
|
||||
registry.configure_capability_context(
|
||||
@@ -76,6 +128,35 @@ class SearchContractTests(unittest.TestCase):
|
||||
providers = registry.search_providers()
|
||||
self.assertEqual(1, len(providers))
|
||||
self.assertIsInstance(providers[0][1], SearchProvider)
|
||||
sources = registry.search_sources()
|
||||
self.assertEqual(1, len(sources))
|
||||
self.assertIsInstance(sources[0][1], SearchSourceProvider)
|
||||
request = SearchAuthorizationRequest(
|
||||
reference=SearchResourceReference(
|
||||
tenant_id="tenant-1",
|
||||
module_id="test",
|
||||
resource_type="record",
|
||||
resource_id="1",
|
||||
),
|
||||
source_revision="1",
|
||||
)
|
||||
self.assertTrue(
|
||||
sources[0][1].authorize(
|
||||
object(),
|
||||
object(),
|
||||
requests=(request,),
|
||||
)[request.reference.key]
|
||||
)
|
||||
page = sources[0][1].backfill(
|
||||
object(),
|
||||
request=SearchBackfillRequest(
|
||||
tenant_id="tenant-1",
|
||||
provider_id="test.records",
|
||||
resource_type="record",
|
||||
rebuild_id="rebuild-1",
|
||||
),
|
||||
)
|
||||
self.assertTrue(page.complete)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user