From e0351948bac43b74ed9117bce5ec0db6ebf4dffe Mon Sep 17 00:00:00 2001 From: Mohsen Ibrahim Date: Mon, 7 Nov 2016 21:40:40 +0200 Subject: [PATCH] render_message_backend: Pass realm data into bugdown. Previously, the way that render_messages was calling bugdown meant that the preview feature didn't have access to realm data like the list of users or streams, resulting in previews for those elements being wrong. Now render_message_backend uses zerver.lib.render_markdown to render messages correctly. [Commit message tweaked and test added by tabbott] --- zerver/tests/test_bugdown.py | 13 +++++++++++++ zerver/views/messages.py | 8 +++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/zerver/tests/test_bugdown.py b/zerver/tests/test_bugdown.py index be9685fdb7..cb3d63be9f 100644 --- a/zerver/tests/test_bugdown.py +++ b/zerver/tests/test_bugdown.py @@ -843,6 +843,19 @@ class BugdownApiTests(ZulipTestCase): self.assertEqual(data['rendered'], u'

That is a bold statement

') + def test_render_message_api(self): + # type: () -> None + content = 'This mentions #**Denmark** and @**King Hamlet**.' + result = self.client_get( + '/api/v1/messages/render', + dict(content=content), + **self.api_auth('othello@zulip.com') + ) + self.assert_json_success(result) + data = ujson.loads(result.content) + self.assertEqual(data['rendered'], + u'

This mentions #Denmark and @King Hamlet.

') + class BugdownErrorTests(ZulipTestCase): def test_bugdown_error_handling(self): # type: () -> None diff --git a/zerver/views/messages.py b/zerver/views/messages.py index 2f5cb5d50b..4192e6726c 100644 --- a/zerver/views/messages.py +++ b/zerver/views/messages.py @@ -29,6 +29,7 @@ from zerver.lib.message import ( access_message, MessageDict, extract_message_dict, + render_markdown, stringify_message_dict, ) from zerver.lib.response import json_success, json_error @@ -940,7 +941,12 @@ def json_fetch_raw_message(request, user_profile, @has_request_variables def render_message_backend(request, user_profile, content=REQ()): # type: (HttpRequest, UserProfile, text_type) -> HttpResponse - rendered_content = bugdown.convert(content, user_profile.realm.domain) + message = Message() + message.sender = user_profile + message.content = content + message.sending_client = request.client + + rendered_content = render_markdown(message, content, domain=user_profile.realm.domain) return json_success({"rendered": rendered_content}) @authenticated_json_post_view