From 5b82c76defd8016df137087e5ce55b44cf017399 Mon Sep 17 00:00:00 2001
From: Andrew Godwin
Date: Mon, 5 Dec 2022 20:26:21 -0700
Subject: Shorten mention names when linkified

Fixes #121
---
 activities/models/post.py            | 6 +++++-
 tests/activities/models/test_post.py | 9 +++------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/activities/models/post.py b/activities/models/post.py
index 5ca5a1b..daf61e8 100644
--- a/activities/models/post.py
+++ b/activities/models/post.py
@@ -279,8 +279,12 @@ class Post(StatorModel):
         def replacer(match):
             precursor = match.group(1)
             handle = match.group(2).lower()
+            if "@" in handle:
+                short_handle = handle.split("@", 1)[0]
+            else:
+                short_handle = handle
             if handle in possible_matches:
-                return f'{precursor}<a href="{possible_matches[handle]}">@{handle}</a>'
+                return f'{precursor}<a href="{possible_matches[handle]}">@{short_handle}</a>'
             else:
                 return match.group()
 
diff --git a/tests/activities/models/test_post.py b/tests/activities/models/test_post.py
index 00db61b..06d26ed 100644
--- a/tests/activities/models/test_post.py
+++ b/tests/activities/models/test_post.py
@@ -56,7 +56,7 @@ def test_linkify_mentions_remote(identity, remote_identity):
     post.mentions.add(identity)
     assert (
         post.safe_content_remote()
-        == '<p><a href="https://example.com/@test/">@test@example.com</a>, welcome!</p>'
+        == '<p><a href="https://example.com/@test/">@test</a>, welcome!</p>'
     )
     # Test that they don't get touched without a mention
     post = Post.objects.create(
@@ -103,7 +103,7 @@ def test_linkify_mentions_local(identity, remote_identity):
     post.mentions.add(identity)
     assert (
         post.safe_content_local()
-        == '<p><a href="/@test@example.com/">@test@example.com</a>, welcome!</p>'
+        == '<p><a href="/@test@example.com/">@test</a>, welcome!</p>'
     )
     # Test a full username (remote) with no <p>
     post = Post.objects.create(
@@ -112,10 +112,7 @@ def test_linkify_mentions_local(identity, remote_identity):
         local=True,
     )
     post.mentions.add(remote_identity)
-    assert (
-        post.safe_content_local()
-        == '<a href="/@test@remote.test/">@test@remote.test</a> hello!'
-    )
+    assert post.safe_content_local() == '<a href="/@test@remote.test/">@test</a> hello!'
     # Test that they don't get touched without a mention
     post = Post.objects.create(
         content="<p>@test@example.com, welcome!</p>",
-- 
cgit v1.2.3