[Backport] Fix issue #4151: @mentions with dashes doesn't work
parent
d126e195d0
commit
cebad9f335
|
@ -31,10 +31,10 @@ from markdown.util import etree, AtomicString
|
||||||
|
|
||||||
class MentionsExtension(Extension):
|
class MentionsExtension(Extension):
|
||||||
def extendMarkdown(self, md, md_globals):
|
def extendMarkdown(self, md, md_globals):
|
||||||
MENTION_RE = r'(@)([a-zA-Z0-9.-\._]+)'
|
MENTION_RE = r"(@)([\w.-]+)"
|
||||||
mentionsPattern = MentionsPattern(MENTION_RE)
|
mentionsPattern = MentionsPattern(MENTION_RE)
|
||||||
mentionsPattern.md = md
|
mentionsPattern.md = md
|
||||||
md.inlinePatterns.add('mentions', mentionsPattern, '_end')
|
md.inlinePatterns.add("mentions", mentionsPattern, "_end")
|
||||||
|
|
||||||
|
|
||||||
class MentionsPattern(Pattern):
|
class MentionsPattern(Pattern):
|
||||||
|
|
|
@ -27,6 +27,8 @@ dummy_project = MagicMock()
|
||||||
dummy_project.id = 1
|
dummy_project.id = 1
|
||||||
dummy_project.slug = "test"
|
dummy_project.slug = "test"
|
||||||
|
|
||||||
|
dummy_uuser = MagicMock()
|
||||||
|
dummy_uuser.get_full_name.return_value = "Dummy User"
|
||||||
|
|
||||||
def test_proccessor_valid_emoji():
|
def test_proccessor_valid_emoji():
|
||||||
result = emojify.EmojifyPreprocessor().run(["**:smile:**"])
|
result = emojify.EmojifyPreprocessor().run(["**:smile:**"])
|
||||||
|
@ -38,6 +40,45 @@ def test_proccessor_invalid_emoji():
|
||||||
assert result == ["**:notvalidemoji:**"]
|
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 == ('<p>text <a class="mention" href="http://localhost:9001/profile/hermione" '
|
||||||
|
'title="Hermione Granger">@hermione</a> text</p>')
|
||||||
|
|
||||||
|
|
||||||
|
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 == ('<p>text <a class="mention" href="http://localhost:9001/profile/luna.lovegood" '
|
||||||
|
'title="Luna Lovegood">@luna.lovegood</a> text</p>')
|
||||||
|
|
||||||
|
|
||||||
|
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 == ('<p>text <a class="mention" href="http://localhost:9001/profile/super-ginny" '
|
||||||
|
'title="Ginny Weasley">@super-ginny</a> text</p>')
|
||||||
|
|
||||||
|
|
||||||
def test_proccessor_valid_us_reference():
|
def test_proccessor_valid_us_reference():
|
||||||
with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock:
|
with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock:
|
||||||
instance = mock.return_value
|
instance = mock.return_value
|
||||||
|
|
Loading…
Reference in New Issue