Adds test for links with # symbols

This commit is contained in:
Mouse Reeve 2023-03-29 08:39:41 -07:00
parent 42dd199084
commit 8a0e88db83
2 changed files with 30 additions and 12 deletions

View file

@ -456,14 +456,24 @@ http://www.fish.com/"""
views.status.format_links(url), f'<a href="{url}">{url[8:]}</a>'
)
def test_format_links_with_at_symbol(self, *_):
def test_format_mentions_with_at_symbol_links(self, *_):
"""A link with an @username shouldn't treat the username as a mention"""
content = "a link to https://www.example.com/user/@mouse"
content = "a link to https://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>'
'a link to <a href="https://example.com/user/@mouse">www.example.com/user/@mouse</a>',
)
def test_format_hashtag_with_pound_symbol_links(self, *_):
"""A link with an @username shouldn't treat the username as a mention"""
content = "a link to https://example.com/page#anchor"
hashtags = views.status.find_or_create_hashtags(content)
# pylint: disable=line-too-long
self.assertEqual(
views.status.format_hashtags(content, hashtags),
'a link to <a href="https://example.com/page#anchor">example.com/page#anchor</a>',
)
def test_to_markdown(self, *_):

View file

@ -107,17 +107,11 @@ class CreateStatus(View):
status.mention_users.add(status.reply_parent.user)
# inspect the text for hashtags
for (mention_text, mention_hashtag) in find_or_create_hashtags(content).items():
hashtags = find_or_create_hashtags(content)
for (_, mention_hashtag) in hashtags.items():
# add them to status mentions fk
status.mention_hashtags.add(mention_hashtag)
# turn the mention into a link
content = re.sub(
rf"{mention_text}\b(?!@)",
rf'<a href="{mention_hashtag.remote_id}" data-mention="hashtag">'
+ rf"{mention_text}</a>",
content,
)
content = format_hashtags(content, hashtags)
# deduplicate mentions
status.mention_users.set(set(status.mention_users.all()))
@ -143,6 +137,7 @@ 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():
@ -155,6 +150,19 @@ def format_mentions(content, mentions):
return content
def format_hashtags(content, hashtags):
"""Detect #hashtags and make them links"""
for (mention_text, mention_hashtag) in hashtags.items():
# turn the mention into a link
content = re.sub(
rf"{mention_text}\b(?!@)",
rf'<a href="{mention_hashtag.remote_id}" data-mention="hashtag">'
+ rf"{mention_text}</a>",
content,
)
return content
@method_decorator(login_required, name="dispatch")
class DeleteStatus(View):
"""tombstone that bad boy"""