From 4516dbca492c1ba436c0033f3ecb5ed68b1fb7b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 5 May 2016 13:27:40 +0200 Subject: [PATCH] Fix issue #4151: @mentions with dashes doesn't work --- taiga/mdrender/extensions/mentions.py | 4 +-- tests/unit/test_mdrender.py | 41 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/taiga/mdrender/extensions/mentions.py b/taiga/mdrender/extensions/mentions.py index 683250d2..d4620449 100644 --- a/taiga/mdrender/extensions/mentions.py +++ b/taiga/mdrender/extensions/mentions.py @@ -31,10 +31,10 @@ from markdown.util import etree, AtomicString class MentionsExtension(Extension): def extendMarkdown(self, md, md_globals): - MENTION_RE = r'(@)([a-zA-Z0-9.-\._]+)' + MENTION_RE = r"(@)([\w.-]+)" mentionsPattern = MentionsPattern(MENTION_RE) mentionsPattern.md = md - md.inlinePatterns.add('mentions', mentionsPattern, '_end') + md.inlinePatterns.add("mentions", mentionsPattern, "_end") class MentionsPattern(Pattern): diff --git a/tests/unit/test_mdrender.py b/tests/unit/test_mdrender.py index 0c3fb202..73ce4233 100644 --- a/tests/unit/test_mdrender.py +++ b/tests/unit/test_mdrender.py @@ -27,6 +27,8 @@ dummy_project = MagicMock() dummy_project.id = 1 dummy_project.slug = "test" +dummy_uuser = MagicMock() +dummy_uuser.get_full_name.return_value = "Dummy User" def test_proccessor_valid_emoji(): result = emojify.EmojifyPreprocessor().run(["**:smile:**"]) @@ -38,6 +40,45 @@ def test_proccessor_invalid_emoji(): assert result == ["**:notvalidemoji:**"] +def test_mentions_valid_username(): + with patch("taiga.mdrender.extensions.mentions.get_user_model") as get_user_model_mock: + dummy_uuser = MagicMock() + dummy_uuser.get_full_name.return_value = "Hermione Granger" + get_user_model_mock.return_value.objects.get = MagicMock(return_value=dummy_uuser) + + result = render(dummy_project, "text @hermione text") + + get_user_model_mock.return_value.objects.get.assert_called_with(username="hermione") + assert result == ('

text @hermione text

') + + +def test_mentions_valid_username_with_points(): + with patch("taiga.mdrender.extensions.mentions.get_user_model") as get_user_model_mock: + dummy_uuser = MagicMock() + dummy_uuser.get_full_name.return_value = "Luna Lovegood" + get_user_model_mock.return_value.objects.get = MagicMock(return_value=dummy_uuser) + + result = render(dummy_project, "text @luna.lovegood text") + + get_user_model_mock.return_value.objects.get.assert_called_with(username="luna.lovegood") + assert result == ('

text @luna.lovegood text

') + + +def test_mentions_valid_username_with_dash(): + with patch("taiga.mdrender.extensions.mentions.get_user_model") as get_user_model_mock: + dummy_uuser = MagicMock() + dummy_uuser.get_full_name.return_value = "Ginny Weasley" + get_user_model_mock.return_value.objects.get = MagicMock(return_value=dummy_uuser) + + result = render(dummy_project, "text @super-ginny text") + + get_user_model_mock.return_value.objects.get.assert_called_with(username="super-ginny") + assert result == ('

text @super-ginny text

') + + def test_proccessor_valid_us_reference(): with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock: instance = mock.return_value