Unit test that identifies clashes between links and mentions

This commit is contained in:
Mouse Reeve 2023-03-29 08:28:45 -07:00
parent ab1f08b39d
commit 42dd199084
2 changed files with 24 additions and 9 deletions

View file

@ -456,6 +456,16 @@ http://www.fish.com/"""
views.status.format_links(url), f'<a href="{url}">{url[8:]}</a>'
)
def test_format_links_with_at_symbol(self, *_):
"""A link with an @username shouldn't treat the username as a mention"""
content = "a link to https://www.example.com/user/@mouse"
mentions = views.status.find_mentions(self.local_user, content)
# pylint: disable=line-too-long
self.assertEqual(
views.status.format_mentions(content, mentions),
'a link to <a href="https://www.example.com/user/@mouse">www.example.com/user/@mouse</a>'
)
def test_to_markdown(self, *_):
"""this is mostly handled in other places, but nonetheless"""
text = "_hi_ and http://fish.com is <marquee>rad</marquee>"

View file

@ -96,18 +96,12 @@ class CreateStatus(View):
# inspect the text for user tags
content = status.content
for (mention_text, mention_user) in find_mentions(
request.user, content
).items():
mentions = find_mentions(request.user, content)
for (_, mention_user) in mentions:
# add them to status mentions fk
status.mention_users.add(mention_user)
content = format_mentions(content, mentions)
# turn the mention into a link
content = re.sub(
rf"{mention_text}\b(?!@)",
rf'<a href="{mention_user.remote_id}">{mention_text}</a>',
content,
)
# add reply parent to mentions
if status.reply_parent:
status.mention_users.add(status.reply_parent.user)
@ -149,6 +143,17 @@ class CreateStatus(View):
return HttpResponse()
return redirect_to_referer(request)
def format_mentions(content, mentions):
"""Detect @mentions and make them links"""
for (mention_text, mention_user) in mentions.items():
# turn the mention into a link
content = re.sub(
rf"{mention_text}\b(?!@)",
rf'<a href="{mention_user.remote_id}">{mention_text}</a>',
content,
)
return content
@method_decorator(login_required, name="dispatch")
class DeleteStatus(View):