diff --git a/dxa.net/ecommerce-framework-dotnet/SDL.ECommerce.Api/Model/FacetParameter.cs b/dxa.net/ecommerce-framework-dotnet/SDL.ECommerce.Api/Model/FacetParameter.cs index 52a1c55..45903dc 100644 --- a/dxa.net/ecommerce-framework-dotnet/SDL.ECommerce.Api/Model/FacetParameter.cs +++ b/dxa.net/ecommerce-framework-dotnet/SDL.ECommerce.Api/Model/FacetParameter.cs @@ -27,9 +27,9 @@ public enum ParameterType GREATER_THAN } - private static Regex RANGE_PATTERN = new Regex(@"([0-9]+[\\.0-9]*)\\-([0-9]+[\\.0-9]*)"); - private static Regex LESS_THAN_PATTERN = new Regex(@"<([0-9]+[\\.0-9]*)"); - private static Regex GREATER_THAN_PATTERN = new Regex(@">([0-9]+[\\.0-9]*)"); + private static Regex RANGE_PATTERN = new Regex(@"(?'min'[0-9]+[\.0-9]*)-(?'max'[0-9]+[\.0-9]*)", RegexOptions.Compiled); + private static Regex LESS_THAN_PATTERN = new Regex(@"<(?'lt'[0-9]+[\\.0-9]*)", RegexOptions.Compiled); + private static Regex GREATER_THAN_PATTERN = new Regex(@">(?'gt'[0-9]+[\\.0-9]*)", RegexOptions.Compiled); private string _name; private List _values = new List(); @@ -66,22 +66,21 @@ public FacetParameter(string name, string strValue) else if ( rangeMatcher.Success ) { this.type = ParameterType.RANGE; - String min = rangeMatcher.Value; - rangeMatcher = rangeMatcher.NextMatch(); - String max = rangeMatcher.Value; + String min = rangeMatcher.Groups["min"].Value; + String max = rangeMatcher.Groups["max"].Value; this._values.Add(min); this._values.Add(max); } else if ( lessThanMatcher.Success ) { this.type = ParameterType.LESS_THAN; - String value = lessThanMatcher.Value; + String value = lessThanMatcher.Groups["lt"].Value; this._values.Add(value); } else if (greaterThanMatcher.Success ) { this.type = ParameterType.GREATER_THAN; - String value = greaterThanMatcher.Value; + String value = greaterThanMatcher.Groups["gt"].Value; this._values.Add(value); } else diff --git a/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/Api/FacetParameter_Test.cs b/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/Api/FacetParameter_Test.cs new file mode 100644 index 0000000..a6fd0a9 --- /dev/null +++ b/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/Api/FacetParameter_Test.cs @@ -0,0 +1,48 @@ +using System; + +using Xunit; + +using SDL.ECommerce.Api; + +namespace SDL.ECommerce.UnitTests.Api +{ + using System.Linq; + + public class FacetParameter_Test + { + [InlineData("10", FacetParameter.ParameterType.MULTISELECT, "10")] + [InlineData("10|20|30", FacetParameter.ParameterType.MULTISELECT, "10", "20", "30")] + [InlineData(">10", FacetParameter.ParameterType.GREATER_THAN, "10")] + [InlineData("<10", FacetParameter.ParameterType.LESS_THAN, "10")] + [InlineData("10-20", FacetParameter.ParameterType.RANGE, "10","20")] + [InlineData("blue", FacetParameter.ParameterType.MULTISELECT, "blue")] + [InlineData("blue|red", FacetParameter.ParameterType.MULTISELECT, "blue", "red")] + [Theory] + public void FacetParameterShouldBeMapped(string facetValue, FacetParameter.ParameterType expectedType, params string[] expectedValue) + { + var facetParameter = new FacetParameter("testParam", facetValue); + + Assert.Equal(expectedValue.ToList(), facetParameter.Values); + Assert.Equal(expectedType, facetParameter.Type); + } + + [InlineData("color_val", "80", FacetParameter.ParameterType.SINGLEVALUE, "color", "80")] + [InlineData("color_val2", "80", FacetParameter.ParameterType.MULTISELECT, "color_val2", "80")] + [Theory] + public void WhenFacetNameEndsWith_val_ThenFacetTypeShouldBeSingleValue(string facetName, string facetValue, FacetParameter.ParameterType expectedType, string expectedName, params string[] expectedValue) + { + var facetParameter = new FacetParameter(facetName, facetValue); + + Assert.Equal(expectedValue, facetParameter.Values); + Assert.Equal(expectedType, facetParameter.Type); + } + + [Fact] + public void TestFacetParameter() + { + var facet = new FacetParameter("brand", "adidas|dkny"); + Console.WriteLine("Facet: " + facet.Name + ", type: " + facet.Type); + Console.WriteLine("Contains 'adidas': " + facet.ContainsValue("adidas")); + } + } +} \ No newline at end of file diff --git a/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/Api/UnitTests.cs b/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/Api/UnitTests.cs deleted file mode 100644 index 2adf0d7..0000000 --- a/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/Api/UnitTests.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -using Xunit; - -using SDL.ECommerce.Api; - -namespace SDL.ECommerce.UnitTests.Api -{ - public class UnitTests - { - [Fact] - public void TestFacetParameter() - { - var facet = new FacetParameter("brand", "adidas|dkny"); - Console.WriteLine("Facet: " + facet.Name + ", type: " + facet.Type); - Console.WriteLine("Contains 'adidas': " + facet.ContainsValue("adidas")); - } - } -} \ No newline at end of file diff --git a/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/SDL.ECommerce.UnitTests.csproj b/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/SDL.ECommerce.UnitTests.csproj index 72f0d3a..f6a89e4 100644 --- a/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/SDL.ECommerce.UnitTests.csproj +++ b/dxa.net/ecommerce-framework-dotnet/Tests/SDL.ECommerce.UnitTests/SDL.ECommerce.UnitTests.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -190,20 +191,16 @@ ..\..\packages\Sdl.Web.Delivery.10.1.0\lib\net452\Tridion.ContentDelivery.UGC.dll - ..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll - True + ..\..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll - - ..\..\packages\xunit.assert.2.1.0\lib\dotnet\xunit.assert.dll - True + + ..\..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll - - ..\..\packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll - True + + ..\..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll - - ..\..\packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll - True + + ..\..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll @@ -215,7 +212,7 @@ - + @@ -263,6 +260,9 @@ + + + @@ -289,7 +289,10 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + +