queue: Round-trip events through orjson in tests.

This ensures that tests don't rely on non-JSON'able datatypes being
able to be put in an event.
This commit is contained in:
Alex Vandiver
2025-03-06 16:46:42 +00:00
committed by Tim Abbott
parent b3862c5008
commit 1eb4b65b5a
2 changed files with 20 additions and 2 deletions

View File

@@ -446,13 +446,20 @@ def queue_json_publish_rollback_unsafe(
if settings.USING_RABBITMQ:
get_queue_client().json_publish(queue_name, event)
elif processor:
processor(event)
# Round-trip through orjson to simulate what RabbitMQ does.
processor(orjson.loads(orjson.dumps(event)))
else:
# The else branch is only hit during tests, where rabbitmq is not enabled.
# Must be imported here: A top section import leads to circular imports
from zerver.worker.queue_processors import get_worker
get_worker(queue_name, disable_timeout=True).consume_single_event(event)
# As above, we round-trip the event through orjson to emulate
# what happens with RabbitMQ enqueueing and dequeueing the
# event. This ensures that we don't rely on non-JSON'able
# datatypes in the events.
get_worker(queue_name, disable_timeout=True).consume_single_event(
orjson.loads(orjson.dumps(event))
)
def queue_event_on_commit(queue_name: str, event: dict[str, Any]) -> None: