diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs index ce9f9f5c..ad25e470 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs @@ -32,17 +32,17 @@ namespace WireMock.Matchers.Request /// /// Initializes a new instance of the class. /// - /// The body. /// The match behaviour. - public RequestMessageBodyMatcher(MatchBehaviour matchBehaviour, [NotNull] string body) : this(new SimMetricsMatcher(matchBehaviour, body)) + /// The body. + public RequestMessageBodyMatcher(MatchBehaviour matchBehaviour, [NotNull] string body) : this(new WildcardMatcher(matchBehaviour, body)) { } /// /// Initializes a new instance of the class. /// - /// The body. /// The match behaviour. + /// The body. public RequestMessageBodyMatcher(MatchBehaviour matchBehaviour, [NotNull] byte[] body) : this(new ExactObjectMatcher(matchBehaviour, body)) { } @@ -50,8 +50,8 @@ namespace WireMock.Matchers.Request /// /// Initializes a new instance of the class. /// - /// The body. /// The match behaviour. + /// The body. public RequestMessageBodyMatcher(MatchBehaviour matchBehaviour, [NotNull] object body) : this(new ExactObjectMatcher(matchBehaviour, body)) { } diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs index af775739..8e5d9b4a 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs @@ -11,6 +11,8 @@ namespace WireMock.Matchers.Request /// public class RequestMessageCookieMatcher : IRequestMatcher { + private readonly MatchBehaviour _matchBehaviour; + /// /// The funcs. /// @@ -38,6 +40,7 @@ namespace WireMock.Matchers.Request Check.NotNull(name, nameof(name)); Check.NotNull(pattern, nameof(pattern)); + _matchBehaviour = matchBehaviour; Name = name; Matchers = new IStringMatcher[] { new WildcardMatcher(matchBehaviour, pattern, ignoreCase) }; } @@ -78,7 +81,7 @@ namespace WireMock.Matchers.Request { if (requestMessage.Cookies == null) { - return MatchScores.Mismatch; + return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch); } if (Funcs != null) @@ -93,7 +96,7 @@ namespace WireMock.Matchers.Request if (!requestMessage.Cookies.ContainsKey(Name)) { - return MatchScores.Mismatch; + return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch); } string value = requestMessage.Cookies[Name]; diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs index b496a682..21c21bd3 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs @@ -13,6 +13,8 @@ namespace WireMock.Matchers.Request /// public class RequestMessageHeaderMatcher : IRequestMatcher { + private readonly MatchBehaviour _matchBehaviour; + /// /// The functions /// @@ -37,10 +39,10 @@ namespace WireMock.Matchers.Request /// The match behaviour. public RequestMessageHeaderMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, [NotNull] string pattern, bool ignoreCase) { - Check.NotNull(name, nameof(name)); Check.NotNull(pattern, nameof(pattern)); + _matchBehaviour = matchBehaviour; Name = name; Matchers = new IStringMatcher[] { new WildcardMatcher(matchBehaviour, pattern, ignoreCase) }; } @@ -97,7 +99,7 @@ namespace WireMock.Matchers.Request { if (requestMessage.Headers == null) { - return MatchScores.Mismatch; + return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch); } if (Funcs != null) @@ -112,7 +114,7 @@ namespace WireMock.Matchers.Request if (!requestMessage.Headers.ContainsKey(Name)) { - return MatchScores.Mismatch; + return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch); } WireMockList list = requestMessage.Headers[Name]; diff --git a/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs index 8138fe72..0504e5f2 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs @@ -12,7 +12,7 @@ namespace WireMock.Matchers.Request public class RequestMessagePathMatcher : IRequestMatcher { /// - /// The matcher. + /// The matchers /// public IReadOnlyList Matchers { get; } @@ -37,6 +37,7 @@ namespace WireMock.Matchers.Request public RequestMessagePathMatcher([NotNull] params IStringMatcher[] matchers) { Check.NotNull(matchers, nameof(matchers)); + Matchers = matchers; } @@ -47,6 +48,7 @@ namespace WireMock.Matchers.Request public RequestMessagePathMatcher([NotNull] params Func[] funcs) { Check.NotNull(funcs, nameof(funcs)); + Funcs = funcs; } diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs index 97335b50..c955c29b 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs @@ -9,6 +9,99 @@ namespace WireMock.Net.Tests.RequestMatchers { public class RequestMessageCookieMatcherTests { + [Fact] + public void RequestMessageCookieMatcher_GetMatchingScore_AcceptOnMatch_CookieDoesNotExists() + { + // Assign + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1"); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "c", "x"); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.0d); + } + + [Fact] + public void RequestMessageCookieMatcher_GetMatchingScore_RejectOnMatch_CookieDoesNotExists() + { + // Assign + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1"); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "c", "x"); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageCookieMatcher_GetMatchingScore_AcceptOnMatch_CookieDoesNotMatchPattern() + { + // Assign + var cookies = new Dictionary { { "c", "x" } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, null, cookies); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "no-match", "123"); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.0d); + } + [Fact] + public void RequestMessageCookieMatcher_GetMatchingScore_RejectOnMatch_CookieDoesNotMatchPattern() + { + // Assign + var cookies = new Dictionary { { "h", "x" } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, null, cookies); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "no-match", "123"); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageCookieMatcher_GetMatchingScore_AcceptOnMatch() + { + // Assign + var cookies = new Dictionary { { "h", "x" } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, null, cookies); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "h", "x"); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageCookieMatcher_GetMatchingScore_RejectOnMatch() + { + // Assign + var cookies = new Dictionary { { "h", "x" } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, null, cookies); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "h", "x"); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.0d); + } + [Fact] public void RequestMessageCookieMatcher_GetMatchingScore_IStringMatcher_Match() { diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs index c273a882..d0804830 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs @@ -9,11 +9,104 @@ namespace WireMock.Net.Tests.RequestMatchers { public class RequestMessageHeaderMatcherTests { + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_AcceptOnMatch_HeaderDoesNotExists() + { + // Assign + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1"); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, "h", "x", true); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.0d); + } + + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_RejectOnMatch_HeaderDoesNotExists() + { + // Assign + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1"); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.RejectOnMatch, "h", "x", true); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_AcceptOnMatch_HeaderDoesNotMatchPattern() + { + // Assign + var headers = new Dictionary { { "h", new[] { "x" } } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, headers); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, "no-match", "123", true); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.0d); + } + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_RejectOnMatch_HeaderDoesNotMatchPattern() + { + // Assign + var headers = new Dictionary { { "h", new[] { "x" } } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, headers); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.RejectOnMatch, "no-match", "123", true); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_AcceptOnMatch() + { + // Assign + var headers = new Dictionary { { "h", new[] { "x" } } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, headers); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, "h", "x", true); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_RejectOnMatch() + { + // Assign + var headers = new Dictionary { { "h", new[] { "x" } } }; + var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, headers); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.RejectOnMatch, "h", "x", true); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(0.0d); + } + [Fact] public void RequestMessageHeaderMatcher_GetMatchingScore_IStringMatcher_Match() { // Assign - var headers = new Dictionary { { "h", new [] { "x" } } }; + var headers = new Dictionary { { "h", new[] { "x" } } }; var requestMessage = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.1", null, headers); var matcher = new RequestMessageHeaderMatcher("h", new ExactMatcher("x"));