From 3c6d0e953242c2845b4f37b44c768c8abcca2e28 Mon Sep 17 00:00:00 2001 From: Vincent Cloutier Date: Sat, 14 Jan 2023 12:08:30 -0500 Subject: [PATCH] mention fix --- .../Regexes/UserRegexes.cs | 2 +- .../Tools/StatusExtractor.cs | 2 +- .../Tools/StatusExtractorTests.cs | 36 ++++++++++++++++--- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/BirdsiteLive.Common/Regexes/UserRegexes.cs b/src/BirdsiteLive.Common/Regexes/UserRegexes.cs index c20a544..ab48a1f 100644 --- a/src/BirdsiteLive.Common/Regexes/UserRegexes.cs +++ b/src/BirdsiteLive.Common/Regexes/UserRegexes.cs @@ -5,6 +5,6 @@ namespace BirdsiteLive.Common.Regexes public class UserRegexes { public static readonly Regex TwitterAccount = new Regex(@"^[a-zA-Z0-9_]+$"); - public static readonly Regex Mention = new Regex(@"(.?)@([a-zA-Z0-9_]+)(\s|$|[\[\]<>,;:!?/|-]|(. ))"); + public static readonly Regex Mention = new Regex(@"(.?)@([a-zA-Z0-9_]+)(\s|$|[\[\]<>,;:'!?/|-]|(. ))"); } } \ No newline at end of file diff --git a/src/BirdsiteLive.Domain/Tools/StatusExtractor.cs b/src/BirdsiteLive.Domain/Tools/StatusExtractor.cs index 4e98baf..3fcb2e0 100644 --- a/src/BirdsiteLive.Domain/Tools/StatusExtractor.cs +++ b/src/BirdsiteLive.Domain/Tools/StatusExtractor.cs @@ -111,7 +111,7 @@ namespace BirdsiteLive.Domain.Tools } var url = $"https://{_instanceSettings.Domain}/users/{mention}"; - var name = $"@{mention}@{_instanceSettings.Domain}"; + var name = $"@{mention}"; if (tags.All(x => x.href != url)) { diff --git a/src/Tests/BirdsiteLive.Domain.Tests/Tools/StatusExtractorTests.cs b/src/Tests/BirdsiteLive.Domain.Tests/Tools/StatusExtractorTests.cs index a86b56e..9717aab 100644 --- a/src/Tests/BirdsiteLive.Domain.Tests/Tools/StatusExtractorTests.cs +++ b/src/Tests/BirdsiteLive.Domain.Tests/Tools/StatusExtractorTests.cs @@ -356,7 +356,7 @@ namespace BirdsiteLive.Domain.Tests.Tools #region Validations logger.VerifyAll(); Assert.AreEqual(1, result.tags.Length); - Assert.AreEqual("@mynickname@domain.name", result.tags.First().name); + Assert.AreEqual("@mynickname", result.tags.First().name); Assert.AreEqual("Mention", result.tags.First().type); Assert.AreEqual("https://domain.name/users/mynickname", result.tags.First().href); @@ -407,7 +407,7 @@ namespace BirdsiteLive.Domain.Tests.Tools #region Validations logger.VerifyAll(); Assert.AreEqual(1, result.tags.Length); - Assert.AreEqual("@mynickname@domain.name", result.tags.First().name); + Assert.AreEqual("@mynickname", result.tags.First().name); Assert.AreEqual("Mention", result.tags.First().type); Assert.AreEqual("https://domain.name/users/mynickname", result.tags.First().href); @@ -433,7 +433,7 @@ namespace BirdsiteLive.Domain.Tests.Tools #region Validations logger.VerifyAll(); Assert.AreEqual(1, result.tags.Length); - Assert.AreEqual("@mynickname@domain.name", result.tags.First().name); + Assert.AreEqual("@mynickname", result.tags.First().name); Assert.AreEqual("Mention", result.tags.First().type); Assert.AreEqual("https://domain.name/users/mynickname", result.tags.First().href); @@ -460,7 +460,33 @@ namespace BirdsiteLive.Domain.Tests.Tools #region Validations logger.VerifyAll(); Assert.AreEqual(1, result.tags.Length); - Assert.AreEqual("@my___nickname@domain.name", result.tags.First().name); + Assert.AreEqual("@my___nickname", result.tags.First().name); + Assert.AreEqual("Mention", result.tags.First().type); + Assert.AreEqual("https://domain.name/users/my___nickname", result.tags.First().href); + + Assert.IsTrue(result.content.Contains("Bla!")); + Assert.IsTrue(result.content.Contains(@"@my___nickname")); + #endregion + } + + [TestMethod] + public void Extract_SingleMentionTag_SpecialChar_Test2() + { + #region Stubs + var message = $"Bla! @my___nickname's thing"; + #endregion + + #region Mocks + var logger = new Mock>(); + #endregion + + var service = new StatusExtractor(_settings, logger.Object); + var result = service.Extract(message); + + #region Validations + logger.VerifyAll(); + Assert.AreEqual(1, result.tags.Length); + Assert.AreEqual("@my___nickname", result.tags.First().name); Assert.AreEqual("Mention", result.tags.First().type); Assert.AreEqual("https://domain.name/users/my___nickname", result.tags.First().href); @@ -486,7 +512,7 @@ namespace BirdsiteLive.Domain.Tests.Tools #region Validations logger.VerifyAll(); Assert.AreEqual(1, result.tags.Length); - Assert.AreEqual("@mynickname@domain.name", result.tags.First().name); + Assert.AreEqual("@mynickname", result.tags.First().name); Assert.AreEqual("Mention", result.tags.First().type); Assert.AreEqual("https://domain.name/users/mynickname", result.tags.First().href);