diff --git a/IdentityShroud.Core.Tests/Helpers/SlugHelperTests.cs b/IdentityShroud.Core.Tests/Helpers/SlugHelperTests.cs new file mode 100644 index 0000000..de94511 --- /dev/null +++ b/IdentityShroud.Core.Tests/Helpers/SlugHelperTests.cs @@ -0,0 +1,26 @@ +using IdentityShroud.Core.Helpers; + +namespace IdentityShroud.Core.Tests.Helpers; + +public class SlugHelperTests +{ + [Theory] + [InlineData("", 40, "")] + [InlineData("test", 40, "test")] + [InlineData("Test", 40, "test")] + [InlineData("tést", 40, "test")] + [InlineData("foo_bar", 40, "foo-bar")] + [InlineData("foo bar", 40, "foo-bar")] + [InlineData("-foo", 40, "foo")] + [InlineData("foo-", 40, "foo")] + [InlineData("_foo", 40, "foo")] + [InlineData("foo_", 40, "foo")] + [InlineData("slug_would_be_too_long", 16, "slug-woul-frYeRw")] // not at word boundary + [InlineData("slug_would_be_too_long", 18, "slug-would-frYeRw")] // at word boundary + public void Test(string input, int max_length, string expected) + { + string result = SlugHelper.GenerateSlug(input, max_length); + + Assert.Equal(expected, result); + } +} \ No newline at end of file diff --git a/IdentityShroud.Core.Tests/UnitTest1.cs b/IdentityShroud.Core.Tests/UnitTest1.cs index a998f4a..45a70a2 100644 --- a/IdentityShroud.Core.Tests/UnitTest1.cs +++ b/IdentityShroud.Core.Tests/UnitTest1.cs @@ -1,6 +1,7 @@ using System.Security.Cryptography; using System.Text; using System.Text.Json; +using IdentityShroud.Core.DTO; using IdentityShroud.Core.Messages; using Microsoft.AspNetCore.WebUtilities; diff --git a/IdentityShroud.Core/Helpers/SlugHelper.cs b/IdentityShroud.Core/Helpers/SlugHelper.cs index 0c74455..beef894 100644 --- a/IdentityShroud.Core/Helpers/SlugHelper.cs +++ b/IdentityShroud.Core/Helpers/SlugHelper.cs @@ -73,9 +73,9 @@ public static class SlugHelper private static string GenerateHashSuffix(string text) { - using (var sha256 = SHA256.Create()) + using (var md5 = MD5.Create()) { - byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(text)); + byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(text)); // Take first 4 bytes (will become ~5-6 base64url chars) string base64Url = WebEncoders.Base64UrlEncode(hash, 0, 4);