From f997d3e0bbd6dd9bbd90c75a1df8903323609512 Mon Sep 17 00:00:00 2001
From: Bajszi <bajuszdn@gmail.com>
Date: Mon, 11 Sep 2023 21:27:15 +0200
Subject: [PATCH 1/4] Trimmed name last resort

---
 app/Users/Models/User.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/Users/Models/User.php b/app/Users/Models/User.php
index 92701ac13..cbfdbef2d 100644
--- a/app/Users/Models/User.php
+++ b/app/Users/Models/User.php
@@ -345,7 +345,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
             return $splitName[0];
         }
 
-        return '';
+        return mb_substr($this->name, 0, $chars) . '..';
     }
 
     /**

From f4deb13301feb6087cb56f22ef52230905821952 Mon Sep 17 00:00:00 2001
From: Bajszi <bajuszdn@gmail.com>
Date: Tue, 12 Sep 2023 17:03:57 +0200
Subject: [PATCH 2/4] Truncate with three dots

---
 app/Users/Models/User.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/Users/Models/User.php b/app/Users/Models/User.php
index cbfdbef2d..3efbeec70 100644
--- a/app/Users/Models/User.php
+++ b/app/Users/Models/User.php
@@ -345,7 +345,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
             return $splitName[0];
         }
 
-        return mb_substr($this->name, 0, $chars) . '..';
+        return mb_substr($this->name, 0, $chars-3) . '…';
     }
 
     /**

From 83028f3fbea8ead701b604d161100923545fcb53 Mon Sep 17 00:00:00 2001
From: Bajszi <bajuszdn@gmail.com>
Date: Tue, 12 Sep 2023 21:00:00 +0200
Subject: [PATCH 3/4] Test comment creator name truncation

---
 tests/Entity/CommentTest.php | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/tests/Entity/CommentTest.php b/tests/Entity/CommentTest.php
index 0a71bb6ef..d2ed35136 100644
--- a/tests/Entity/CommentTest.php
+++ b/tests/Entity/CommentTest.php
@@ -152,4 +152,20 @@ class CommentTest extends TestCase
         $respHtml = $this->withHtml($this->get($page->getUrl('/edit')));
         $respHtml->assertElementContains('.comment-box .content', 'My great comment to see in the editor');
     }
+
+    public function test_comment_creator_name_truncated()
+    {   
+        $longNamedUser = $this->users->admin();
+        $longNamedUser->name = 'Wolfeschlegelsteinhausenbergerdorff';
+        $longNamedUser->save();
+        $this->actingAs($longNamedUser);
+
+        $page = $this->entities->page();
+
+        $comment = Comment::factory()->make();
+        $this->postJson("/comment/$page->id", $comment->getAttributes());
+
+        $pageResp = $this->get($page->getUrl());
+        $pageResp->assertSee('Wolfeschlegel…');
+    }
 }

From a452092e40110c5251c9b621593f3fa174680059 Mon Sep 17 00:00:00 2001
From: Dan Brown <ssddanbrown@googlemail.com>
Date: Wed, 13 Sep 2023 10:09:33 +0100
Subject: [PATCH 4/4] Reviewed #4533, formatting and tweaks

- Updating formatting.
- Tweaked truncation to roughly match elipsis char to width used.
- Updated testing to use existing helpers, and ran check as admin user
  to avoid name conflicts.
---
 app/Users/Models/User.php    |  2 +-
 tests/Entity/CommentTest.php | 14 +++++---------
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/app/Users/Models/User.php b/app/Users/Models/User.php
index 3efbeec70..2479521a2 100644
--- a/app/Users/Models/User.php
+++ b/app/Users/Models/User.php
@@ -345,7 +345,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
             return $splitName[0];
         }
 
-        return mb_substr($this->name, 0, $chars-3) . '…';
+        return mb_substr($this->name, 0, max($chars - 2, 0)) . '…';
     }
 
     /**
diff --git a/tests/Entity/CommentTest.php b/tests/Entity/CommentTest.php
index d2ed35136..23fc68197 100644
--- a/tests/Entity/CommentTest.php
+++ b/tests/Entity/CommentTest.php
@@ -154,18 +154,14 @@ class CommentTest extends TestCase
     }
 
     public function test_comment_creator_name_truncated()
-    {   
-        $longNamedUser = $this->users->admin();
-        $longNamedUser->name = 'Wolfeschlegelsteinhausenbergerdorff';
-        $longNamedUser->save();
-        $this->actingAs($longNamedUser);
-
+    {
+        [$longNamedUser] = $this->users->newUserWithRole(['name' => 'Wolfeschlegelsteinhausenbergerdorff'], ['comment-create-all', 'page-view-all']);
         $page = $this->entities->page();
 
         $comment = Comment::factory()->make();
-        $this->postJson("/comment/$page->id", $comment->getAttributes());
+        $this->actingAs($longNamedUser)->postJson("/comment/$page->id", $comment->getAttributes());
 
-        $pageResp = $this->get($page->getUrl());
-        $pageResp->assertSee('Wolfeschlegel…');
+        $pageResp = $this->asAdmin()->get($page->getUrl());
+        $pageResp->assertSee('Wolfeschlegels…');
     }
 }