Add durable search event indexing contract
This commit is contained in:
@@ -250,6 +250,7 @@ class ModuleSystemTests(unittest.TestCase):
|
||||
"postbox",
|
||||
"approvals",
|
||||
"reporting",
|
||||
"search",
|
||||
),
|
||||
)
|
||||
self.assertEqual(manifests["dashboard"].dependencies, ())
|
||||
@@ -3517,7 +3518,7 @@ finally:
|
||||
"version_max_exclusive": "0.2.0",
|
||||
}, modules["files"]["requires_interfaces"])
|
||||
self.assertEqual(
|
||||
["campaigns", "encryption"],
|
||||
["campaigns", "encryption", "search"],
|
||||
modules["files"]["optional_dependencies"],
|
||||
)
|
||||
self.assertIn({"name": "mail.campaign_delivery", "version": "0.2.0"}, modules["mail"]["provides_interfaces"])
|
||||
@@ -3581,6 +3582,7 @@ finally:
|
||||
"postbox",
|
||||
"approvals",
|
||||
"reporting",
|
||||
"search",
|
||||
],
|
||||
modules["campaigns"]["optional_dependencies"],
|
||||
)
|
||||
|
||||
@@ -46,6 +46,10 @@ class PlatformEventWorkerTests(unittest.TestCase):
|
||||
"govoplan_core.celery_app._workflow_trigger_dispatcher",
|
||||
return_value=None,
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.celery_app._search_index_coordinator",
|
||||
return_value=None,
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.db.session.get_database",
|
||||
return_value=database,
|
||||
@@ -77,6 +81,70 @@ class PlatformEventWorkerTests(unittest.TestCase):
|
||||
session.commit.assert_called_once_with()
|
||||
self.assertEqual(1, result["delivered"])
|
||||
|
||||
def test_dispatch_uses_a_durable_search_consumer_and_processes_changes(self) -> None:
|
||||
session = MagicMock()
|
||||
database = MagicMock()
|
||||
database.SessionLocal.return_value.__enter__.return_value = session
|
||||
outbox = MagicMock()
|
||||
outbox.dispatch_pending.return_value = {
|
||||
"selected": 1,
|
||||
"delivered": 1,
|
||||
"retrying": 0,
|
||||
"quarantined": 0,
|
||||
"dispatched": 1,
|
||||
"observer_failed": 0,
|
||||
}
|
||||
search = MagicMock()
|
||||
search.process_changes.return_value = {
|
||||
"selected": 1,
|
||||
"applied": 1,
|
||||
"retrying": 0,
|
||||
"quarantined": 0,
|
||||
}
|
||||
|
||||
with (
|
||||
patch(
|
||||
"govoplan_core.celery_app._platform_registry",
|
||||
return_value=MagicMock(),
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.celery_app._platform_event_outbox",
|
||||
return_value=outbox,
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.celery_app._dataflow_trigger_dispatcher",
|
||||
return_value=None,
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.celery_app._workflow_trigger_dispatcher",
|
||||
return_value=None,
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.celery_app._search_index_coordinator",
|
||||
return_value=search,
|
||||
),
|
||||
patch(
|
||||
"govoplan_core.db.session.get_database",
|
||||
return_value=database,
|
||||
),
|
||||
):
|
||||
result = dispatch_platform_events.run(25)
|
||||
|
||||
consumer = outbox.dispatch_pending.call_args.kwargs["consumers"][0]
|
||||
self.assertEqual("search.indexing.v1", consumer.consumer_id)
|
||||
self.assertEqual(frozenset({"*"}), consumer.event_types)
|
||||
event = PlatformEvent(type="files.file.updated", module_id="files")
|
||||
delivery_key = consumer.delivery_key(event)
|
||||
consumer.handler(event, delivery_key)
|
||||
search.ingest_event.assert_called_once_with(
|
||||
session,
|
||||
event=event,
|
||||
delivery_key=delivery_key,
|
||||
)
|
||||
search.process_changes.assert_called_once_with(session, limit=25)
|
||||
self.assertEqual(1, result["search_changes"]["applied"])
|
||||
session.commit.assert_called_once_with()
|
||||
|
||||
def test_retention_task_uses_the_configured_terminal_window(self) -> None:
|
||||
session = MagicMock()
|
||||
database = MagicMock()
|
||||
|
||||
Reference in New Issue
Block a user