From d2917b03d833601223886b7a078499acaab34591 Mon Sep 17 00:00:00 2001 From: Nicholas Mayne Date: Thu, 6 Jun 2013 21:59:13 +0100 Subject: [PATCH] #19426: Updating slugify method to take in to account contiguous dashes Work Item: 19426 --HG-- branch : 1.x --- .../Autoroute/DefaultSlugServiceTests.cs | 33 +++++++++++++++++++ .../Orchard.Tests.Modules.csproj | 5 +++ .../Services/DefaultSlugService.cs | 4 ++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/Orchard.Tests.Modules/Autoroute/DefaultSlugServiceTests.cs diff --git a/src/Orchard.Tests.Modules/Autoroute/DefaultSlugServiceTests.cs b/src/Orchard.Tests.Modules/Autoroute/DefaultSlugServiceTests.cs new file mode 100644 index 000000000..3cb7bea3d --- /dev/null +++ b/src/Orchard.Tests.Modules/Autoroute/DefaultSlugServiceTests.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Moq; +using NUnit.Framework; +using Orchard.Autoroute.Services; + +namespace Orchard.Tests.Modules.Autoroute { + [TestFixture] + public class DefaultSlugServiceTests { + [Test] + public void ShouldStripContiguousDashes() { + DefaultSlugService slugService = new DefaultSlugService(new Mock().Object); + + Assert.That(slugService.Slugify("a - b"), Is.EqualTo("a-b")); + } + + [Test] + public void ShouldStripContiguousDashes2() { + DefaultSlugService slugService = new DefaultSlugService(new Mock().Object); + + Assert.That(slugService.Slugify("a - - - - - -b"), Is.EqualTo("a-b")); + } + + [Test] + public void ShouldStripContiguousDashesEverywhere() { + DefaultSlugService slugService = new DefaultSlugService(new Mock().Object); + + Assert.That(slugService.Slugify("a - b - c -- d"), Is.EqualTo("a-b-c-d")); + } + } +} diff --git a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj index eb1f4fa23..568e040f4 100644 --- a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj +++ b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj @@ -137,6 +137,7 @@ + @@ -197,6 +198,10 @@ {D5D447D7-EF8E-43A6-B9A4-3B025DD9F45D} Lucene + + {66fccd76-2761-47e3-8d11-b45d0001ddaa} + Orchard.Autoroute + {C0C45321-B51D-4D8D-9B7B-AA4C2E0B2962} Orchard.CodeGeneration diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/DefaultSlugService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/DefaultSlugService.cs index ef0ecb5cf..f5c5c93a7 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/DefaultSlugService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/DefaultSlugService.cs @@ -28,7 +28,9 @@ namespace Orchard.Autoroute.Services { var disallowed = new Regex(@"[/:?#\[\]@!$&'()*+,;=\s\""\<\>\\\|%]+"); - slugContext.Slug = disallowed.Replace(slugContext.Title, "-").Trim('-','.'); + var cleanedSlug = disallowed.Replace(slugContext.Title, "-").Trim('-','.').Replace("--", "-"); + + slugContext.Slug = Regex.Replace(cleanedSlug, @"\-{2,}", "-"); if (slugContext.Slug.Length > 1000) slugContext.Slug = slugContext.Slug.Substring(0, 1000).Trim('-', '.');