From 9e123fbbeaabfd44580833840d4c1b9b3a7bf64d Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 25 Mar 2019 18:00:22 +0100 Subject: [PATCH] Fixed Multi Param Match logic (#256) * fix? * 1.0.9 * * fix tests ? * fix * RequestMessageParamMatcher --- Directory.Build.props | 2 +- .../WireMock.Net.StandAlone.Net461/App.config | 2 +- .../WireMock.Net.StandAlone.Net461.csproj | 4 +- .../packages.config | 2 +- src/WireMock.Net/Matchers/ExactMatcher.cs | 7 ++- src/WireMock.Net/Matchers/MatchScores.cs | 3 ++ .../Request/RequestMessageParamMatcher.cs | 45 ++++++++++++---- src/WireMock.Net/WireMock.Net.csproj | 2 +- .../Matchers/ExactMatcherTests.cs | 30 ++++++++++- .../RequestBuilderUsingMethodTests.cs | 6 +-- .../RequestBuilderWithBodyTests.cs | 2 +- .../RequestBuilderWithCookieTests.cs | 6 +-- .../RequestBuilderWithHeaderTests.cs | 12 ++--- .../RequestBuilderWithParamTests.cs | 8 +-- .../RequestBuilderWithUrlTests.cs | 8 +-- .../RequestMessageParamMatcherTests.cs | 51 +++++++++++++++++-- .../WireMock.Net.Tests/RequestMessageTests.cs | 12 +++++ .../WireMock.Net.Tests.csproj | 6 +-- 18 files changed, 161 insertions(+), 47 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 1efbb2df..2a8c17a0 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ - 1.0.8 + 1.0.9 diff --git a/examples/WireMock.Net.StandAlone.Net461/App.config b/examples/WireMock.Net.StandAlone.Net461/App.config index 582b5c21..4be9c6ef 100644 --- a/examples/WireMock.Net.StandAlone.Net461/App.config +++ b/examples/WireMock.Net.StandAlone.Net461/App.config @@ -44,7 +44,7 @@ - + diff --git a/examples/WireMock.Net.StandAlone.Net461/WireMock.Net.StandAlone.Net461.csproj b/examples/WireMock.Net.StandAlone.Net461/WireMock.Net.StandAlone.Net461.csproj index ee6de3ce..cc1988ce 100644 --- a/examples/WireMock.Net.StandAlone.Net461/WireMock.Net.StandAlone.Net461.csproj +++ b/examples/WireMock.Net.StandAlone.Net461/WireMock.Net.StandAlone.Net461.csproj @@ -225,8 +225,8 @@ ..\..\packages\System.IO.Pipelines.4.5.2\lib\netstandard2.0\System.IO.Pipelines.dll - - ..\..\packages\System.Linq.Dynamic.Core.1.0.9\lib\net46\System.Linq.Dynamic.Core.dll + + ..\..\packages\System.Linq.Dynamic.Core.1.0.11\lib\net46\System.Linq.Dynamic.Core.dll ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll diff --git a/examples/WireMock.Net.StandAlone.Net461/packages.config b/examples/WireMock.Net.StandAlone.Net461/packages.config index 1f47208a..9ff4575a 100644 --- a/examples/WireMock.Net.StandAlone.Net461/packages.config +++ b/examples/WireMock.Net.StandAlone.Net461/packages.config @@ -65,7 +65,7 @@ - + diff --git a/src/WireMock.Net/Matchers/ExactMatcher.cs b/src/WireMock.Net/Matchers/ExactMatcher.cs index e3dcb183..ab2d3795 100644 --- a/src/WireMock.Net/Matchers/ExactMatcher.cs +++ b/src/WireMock.Net/Matchers/ExactMatcher.cs @@ -39,7 +39,12 @@ namespace WireMock.Matchers /// public double IsMatch(string input) { - return MatchBehaviourHelper.Convert(MatchBehaviour, MatchScores.ToScore(_values.Select(value => value.Equals(input)))); + if (_values.Length == 1) + { + return MatchBehaviourHelper.Convert(MatchBehaviour, MatchScores.ToScore(_values[0] == input)); + } + + return MatchBehaviourHelper.Convert(MatchBehaviour, MatchScores.ToScore(_values.Contains(input))); } /// diff --git a/src/WireMock.Net/Matchers/MatchScores.cs b/src/WireMock.Net/Matchers/MatchScores.cs index fd03d2d3..5cefe4ce 100644 --- a/src/WireMock.Net/Matchers/MatchScores.cs +++ b/src/WireMock.Net/Matchers/MatchScores.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace WireMock.Matchers @@ -54,6 +55,7 @@ namespace WireMock.Matchers /// /// The values. /// average score + [SuppressMessage("ReSharper", "PossibleMultipleEnumeration")] public static double ToScore(IEnumerable values) { return values.Any() ? values.Select(ToScore).Average() : Mismatch; @@ -64,6 +66,7 @@ namespace WireMock.Matchers /// /// The values. /// average score + [SuppressMessage("ReSharper", "PossibleMultipleEnumeration")] public static double ToScore(IEnumerable values) { return values.Any() ? values.Average() : Mismatch; diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs index e74e9303..603bf980 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs @@ -1,7 +1,7 @@ -using System; +using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Linq; -using JetBrains.Annotations; using WireMock.Util; using WireMock.Validation; @@ -106,15 +106,8 @@ namespace WireMock.Matchers.Request if (Matchers != null && Matchers.Any()) { - // Matchers are defined, just use the matchers to calculate the match score. - var scores = new List(); - foreach (string valuePresentInRequestMessage in valuesPresentInRequestMessage) - { - double score = Matchers.Max(m => m.IsMatch(valuePresentInRequestMessage)); - scores.Add(score); - } - - return scores.Any() ? scores.Average() : MatchScores.Mismatch; + // Return the score based on Matchers and valuesPresentInRequestMessage + return CalculateScore(valuesPresentInRequestMessage); } if (Matchers == null || !Matchers.Any()) @@ -125,5 +118,35 @@ namespace WireMock.Matchers.Request return MatchScores.Mismatch; } + + private double CalculateScore(WireMockList valuesPresentInRequestMessage) + { + var total = new List(); + + // If the total patterns in all matchers > values in message, use the matcher as base + if (Matchers.Sum(m => m.GetPatterns().Length) > valuesPresentInRequestMessage.Count) + { + foreach (var matcher in Matchers) + { + double score = 0d; + foreach (string valuePresentInRequestMessage in valuesPresentInRequestMessage) + { + score += matcher.IsMatch(valuePresentInRequestMessage) / matcher.GetPatterns().Length; + } + + total.Add(score); + } + } + else + { + foreach (string valuePresentInRequestMessage in valuesPresentInRequestMessage) + { + double score = Matchers.Max(m => m.IsMatch(valuePresentInRequestMessage)); + total.Add(score); + } + } + + return total.Any() ? MatchScores.ToScore(total) : MatchScores.Mismatch; + } } } \ No newline at end of file diff --git a/src/WireMock.Net/WireMock.Net.csproj b/src/WireMock.Net/WireMock.Net.csproj index e5751469..6b405481 100644 --- a/src/WireMock.Net/WireMock.Net.csproj +++ b/src/WireMock.Net/WireMock.Net.csproj @@ -57,7 +57,7 @@ all runtime; build; native; contentfiles; analyzers - + diff --git a/test/WireMock.Net.Tests/Matchers/ExactMatcherTests.cs b/test/WireMock.Net.Tests/Matchers/ExactMatcherTests.cs index 1c903df0..bb91c329 100644 --- a/test/WireMock.Net.Tests/Matchers/ExactMatcherTests.cs +++ b/test/WireMock.Net.Tests/Matchers/ExactMatcherTests.cs @@ -33,7 +33,33 @@ namespace WireMock.Net.Tests.Matchers } [Fact] - public void ExactMatcher_IsMatch_MultiplePatterns() + public void ExactMatcher_IsMatch_WithSinglePattern_ReturnsMatch1_0() + { + // Assign + var matcher = new ExactMatcher("x"); + + // Act + double result = matcher.IsMatch("x"); + + // Assert + Check.That(result).IsEqualTo(1.0); + } + + [Fact] + public void ExactMatcher_IsMatch_WithSinglePattern_ReturnsMatch0_0() + { + // Assign + var matcher = new ExactMatcher("x"); + + // Act + double result = matcher.IsMatch("y"); + + // Assert + Check.That(result).IsEqualTo(0.0); + } + + [Fact] + public void ExactMatcher_IsMatch_WithMultiplePatterns_ReturnsMatch0_5() { // Assign var matcher = new ExactMatcher("x", "y"); @@ -42,7 +68,7 @@ namespace WireMock.Net.Tests.Matchers double result = matcher.IsMatch("x"); // Assert - Check.That(result).IsEqualTo(0.5d); + Check.That(result).IsEqualTo(1.0); } [Fact] diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderUsingMethodTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderUsingMethodTests.cs index fbb000ca..0872d659 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderUsingMethodTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderUsingMethodTests.cs @@ -16,7 +16,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert 1 var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That((matchers[0] as RequestMessageMethodMatcher).Methods).ContainsExactly("PATCH"); } @@ -28,7 +28,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert 1 var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageMethodMatcher)); // Act @@ -36,7 +36,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert 2 matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(0); + Check.That(matchers.Count).IsEqualTo(0); } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithBodyTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithBodyTests.cs index 0573f94d..34b47979 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithBodyTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithBodyTests.cs @@ -20,7 +20,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(((RequestMessageBodyMatcher) matchers[0]).Matcher).IsEqualTo(matcher); } } diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithCookieTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithCookieTests.cs index d6a07f7e..bab09dc2 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithCookieTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithCookieTests.cs @@ -17,7 +17,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageCookieMatcher)); } @@ -29,7 +29,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageCookieMatcher)); } @@ -41,7 +41,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageCookieMatcher)); } } diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithHeaderTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithHeaderTests.cs index 04d98364..6a3cb58e 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithHeaderTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithHeaderTests.cs @@ -17,7 +17,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageHeaderMatcher)); } @@ -29,7 +29,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageHeaderMatcher)); } @@ -41,7 +41,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageHeaderMatcher)); } @@ -53,7 +53,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageHeaderMatcher)); } @@ -65,7 +65,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageHeaderMatcher)); } @@ -77,7 +77,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageHeaderMatcher)); } } diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithParamTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithParamTests.cs index 82148239..90dc906c 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithParamTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithParamTests.cs @@ -17,7 +17,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageParamMatcher)); } @@ -29,7 +29,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageParamMatcher)); } @@ -41,7 +41,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageParamMatcher)); } @@ -53,7 +53,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageParamMatcher)); } } diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithUrlTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithUrlTests.cs index ad95157f..cd14e513 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithUrlTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithUrlTests.cs @@ -17,7 +17,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageUrlMatcher)); } @@ -29,7 +29,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageUrlMatcher)); } @@ -41,7 +41,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageUrlMatcher)); } @@ -53,7 +53,7 @@ namespace WireMock.Net.Tests.RequestBuilders // Assert var matchers = requestBuilder.GetPrivateFieldValue>("_requestMatchers"); - Check.That(matchers.Count()).IsEqualTo(1); + Check.That(matchers.Count).IsEqualTo(1); Check.That(matchers[0]).IsInstanceOfType(typeof(RequestMessageUrlMatcher)); } } diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageParamMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageParamMatcherTests.cs index 4e73db18..d61be615 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageParamMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageParamMatcherTests.cs @@ -9,7 +9,7 @@ namespace WireMock.Net.Tests.RequestMatchers public class RequestMessageParamMatcherTests { [Fact] - public void RequestMessageParamMatcher_GetMatchingScore_IgnoreCaseKeyWithValuesPresentInUrl_MatchExactOnStringValues() + public void RequestMessageParamMatcher_GetMatchingScore_IgnoreCaseKeyWithValuesPresentInUrl_And_With1StringValues_Returns1_0() { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost?key=test1"), "GET", "127.0.0.1"); @@ -24,7 +24,52 @@ namespace WireMock.Net.Tests.RequestMatchers } [Fact] - public void RequestMessageParamMatcher_GetMatchingScore_KeyWithValuesPresentInUrl_MatchExactOnStringValues() + public void RequestMessageParamMatcher_GetMatchingScore_KeyWith1ValuePresentInUrl_And_With2Strings_Returns0_5() + { + // Assign + var requestMessage = new RequestMessage(new UrlDetails("http://localhost?key=test1"), "GET", "127.0.0.1"); + var matcher = new RequestMessageParamMatcher(MatchBehaviour.AcceptOnMatch, "key", false, new[] { "test1", "test2" }); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.5d); + } + + [Fact] + public void RequestMessageParamMatcher_GetMatchingScore_KeyWith3ValuesPresentInUrl_And_With1ExactStringWith2Patterns_Returns0_66() + { + // Assign + var requestMessage = new RequestMessage(new UrlDetails("http://localhost?key=test1,test2,test3"), "GET", "127.0.0.1"); + var matcher = new RequestMessageParamMatcher(MatchBehaviour.AcceptOnMatch, "key", false, new IStringMatcher[] { new ExactMatcher("test1", "test2") }); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsCloseTo(0.66d, 0.1d); + } + + [Fact] + public void RequestMessageParamMatcher_GetMatchingScore_KeyWith2ValuesPresentInUrl_And_With1ExactStringWith3Patterns_Returns0_66() + { + // Assign + var requestMessage = new RequestMessage(new UrlDetails("http://localhost?key=test1,test2"), "GET", "127.0.0.1"); + var matcher = new RequestMessageParamMatcher(MatchBehaviour.AcceptOnMatch, "key", false, new IStringMatcher[] { new ExactMatcher("test1", "test2", "test3") }); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsCloseTo(0.66d, 0.1d); + } + + [Fact] + public void RequestMessageParamMatcher_GetMatchingScore_KeyWith2ValuesPresentInUrl_And_With2Strings_Returns1_0() { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost?key=test1,test2"), "GET", "127.0.0.1"); @@ -39,7 +84,7 @@ namespace WireMock.Net.Tests.RequestMatchers } [Fact] - public void RequestMessageParamMatcher_GetMatchingScore_KeyWithValuesPresentInUrl_MatchExactOnExactMatchers() + public void RequestMessageParamMatcher_GetMatchingScore_KeyWith2ValuesPresentInUrl_And_With2ExactStringMatchers_Returns1_0() { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost?key=test1,test2"), "GET", "127.0.0.1"); diff --git a/test/WireMock.Net.Tests/RequestMessageTests.cs b/test/WireMock.Net.Tests/RequestMessageTests.cs index f4828818..69aee696 100644 --- a/test/WireMock.Net.Tests/RequestMessageTests.cs +++ b/test/WireMock.Net.Tests/RequestMessageTests.cs @@ -60,6 +60,18 @@ namespace WireMock.Net.Tests Check.That(request.GetParameter("key")).Contains("2"); } + [Fact] + public void RequestMessage_ParseQuery_SingleKey_MultipleValuesCommaSeparated() + { + // Assign + var request = new RequestMessage(new UrlDetails("http://localhost?key=1,2,3"), "POST", ClientIp); + + // Assert + Check.That(request.GetParameter("key")).Contains("1"); + Check.That(request.GetParameter("key")).Contains("2"); + Check.That(request.GetParameter("key")).Contains("3"); + } + [Fact] public void RequestMessage_ParseQuery_SingleKey_MultipleValues() { diff --git a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj index 33c73504..d8e5e9ea 100644 --- a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj +++ b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj @@ -30,13 +30,13 @@ - + - + - + all