diff --git a/src/WireMock.Net.Abstractions/Admin/Mappings/CookieModel.cs b/src/WireMock.Net.Abstractions/Admin/Mappings/CookieModel.cs index 9b219b6c..2c35ee0b 100644 --- a/src/WireMock.Net.Abstractions/Admin/Mappings/CookieModel.cs +++ b/src/WireMock.Net.Abstractions/Admin/Mappings/CookieModel.cs @@ -16,5 +16,15 @@ namespace WireMock.Admin.Mappings /// Gets or sets the matchers. /// public IList Matchers { get; set; } + + /// + /// Gets or sets the ignore case. + /// + public bool? IgnoreCase { get; set; } + + /// + /// Reject on match. + /// + public bool? RejectOnMatch { get; set; } } } \ No newline at end of file diff --git a/src/WireMock.Net.Abstractions/Admin/Mappings/HeaderModel.cs b/src/WireMock.Net.Abstractions/Admin/Mappings/HeaderModel.cs index 7c2585b0..3c44d4b0 100644 --- a/src/WireMock.Net.Abstractions/Admin/Mappings/HeaderModel.cs +++ b/src/WireMock.Net.Abstractions/Admin/Mappings/HeaderModel.cs @@ -16,5 +16,15 @@ namespace WireMock.Admin.Mappings /// Gets or sets the matchers. /// public IList Matchers { get; set; } + + /// + /// Gets or sets the ignore case. + /// + public bool? IgnoreCase { get; set; } + + /// + /// Reject on match. + /// + public bool? RejectOnMatch { get; set; } } } \ No newline at end of file diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs index 1ae4ff6c..50e4c93c 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs @@ -9,14 +9,15 @@ namespace WireMock.Matchers.Request /// /// The request cookie matcher. /// + /// public class RequestMessageCookieMatcher : IRequestMatcher { private readonly MatchBehaviour _matchBehaviour; private readonly bool _ignoreCase; - /// - /// The funcs. - /// + /// + /// The functions + /// public Func, bool>[] Funcs { get; } /// @@ -32,11 +33,11 @@ namespace WireMock.Matchers.Request /// /// Initializes a new instance of the class. /// - /// The match behaviour. /// The name. /// The pattern. - /// The ignoreCase. - public RequestMessageCookieMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, [NotNull] string pattern, bool ignoreCase = true) + /// Ignore the case from the pattern. + /// The match behaviour. + public RequestMessageCookieMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, [NotNull] string pattern, bool ignoreCase) { Check.NotNull(name, nameof(name)); Check.NotNull(pattern, nameof(pattern)); @@ -50,15 +51,32 @@ namespace WireMock.Matchers.Request /// /// Initializes a new instance of the class. /// + /// The match behaviour. + /// The name. + /// The patterns. + /// Ignore the case from the pattern. + public RequestMessageCookieMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, bool ignoreCase, [NotNull] params string[] patterns) : + this(matchBehaviour, name, ignoreCase, patterns.Select(pattern => new WildcardMatcher(matchBehaviour, pattern, ignoreCase)).Cast().ToArray()) + { + Check.NotNull(patterns, nameof(patterns)); + } + + /// + /// Initializes a new instance of the class. + /// + /// The match behaviour. /// The name. /// The matchers. - public RequestMessageCookieMatcher([NotNull] string name, [NotNull] params IStringMatcher[] matchers) + /// Ignore the case from the pattern. + public RequestMessageCookieMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, bool ignoreCase, [NotNull] params IStringMatcher[] matchers) { Check.NotNull(name, nameof(name)); Check.NotNull(matchers, nameof(matchers)); + _matchBehaviour = matchBehaviour; Name = name; Matchers = matchers; + _ignoreCase = ignoreCase; } /// diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs index c0b6ceba..5cdeeacf 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs @@ -52,33 +52,32 @@ namespace WireMock.Matchers.Request /// /// Initializes a new instance of the class. /// + /// The match behaviour. /// The name. /// The patterns. /// Ignore the case from the pattern. - /// The match behaviour. - public RequestMessageHeaderMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, [NotNull] string[] patterns, bool ignoreCase) + public RequestMessageHeaderMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, bool ignoreCase, [NotNull] params string[] patterns) : + this(matchBehaviour, name, ignoreCase, patterns.Select(pattern => new WildcardMatcher(matchBehaviour, pattern, ignoreCase)).Cast().ToArray()) { - Check.NotNull(name, nameof(name)); Check.NotNull(patterns, nameof(patterns)); - - _matchBehaviour = matchBehaviour; - _ignoreCase = ignoreCase; - Name = name; - Matchers = patterns.Select(pattern => new WildcardMatcher(matchBehaviour, pattern, ignoreCase)).Cast().ToArray(); } /// /// Initializes a new instance of the class. /// + /// The match behaviour. /// The name. /// The matchers. - public RequestMessageHeaderMatcher([NotNull] string name, [NotNull] params IStringMatcher[] matchers) + /// Ignore the case from the pattern. + public RequestMessageHeaderMatcher(MatchBehaviour matchBehaviour, [NotNull] string name, bool ignoreCase, [NotNull] params IStringMatcher[] matchers) { Check.NotNull(name, nameof(name)); Check.NotNull(matchers, nameof(matchers)); + _matchBehaviour = matchBehaviour; Name = name; Matchers = matchers; + _ignoreCase = ignoreCase; } /// @@ -125,7 +124,7 @@ namespace WireMock.Matchers.Request } WireMockList list = headers[Name]; - return Matchers.Max(m => list.Max(value => m.IsMatch(value))); // TODO : is this correct ? + return Matchers.Max(m => list.Max(m.IsMatch)); // TODO : is this correct ? } } } \ No newline at end of file diff --git a/src/WireMock.Net/RequestBuilders/ICookiesRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/ICookiesRequestBuilder.cs new file mode 100644 index 00000000..fd5b9aeb --- /dev/null +++ b/src/WireMock.Net/RequestBuilders/ICookiesRequestBuilder.cs @@ -0,0 +1,85 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using WireMock.Matchers; + +namespace WireMock.RequestBuilders +{ + /// + /// The CookieRequestBuilder interface. + /// + public interface ICookiesRequestBuilder : IParamsRequestBuilder + { + /// + /// WithCookie: matching based on name, pattern and matchBehaviour. + /// + /// The name. + /// The pattern. + /// The match behaviour. + /// The . + IRequestBuilder WithCookie([NotNull] string name, string pattern, MatchBehaviour matchBehaviour); + + /// + /// WithCookie: matching based on name, pattern, ignoreCase and matchBehaviour. + /// + /// The name. + /// The pattern. + /// Ignore the case from the pattern. + /// The match behaviour. + /// The . + IRequestBuilder WithCookie([NotNull] string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); + + /// + /// WithCookie: matching based on name, patterns and matchBehaviour. + /// + /// The name. + /// The patterns. + /// The match behaviour. + /// The . + IRequestBuilder WithCookie([NotNull] string name, string[] patterns, MatchBehaviour matchBehaviour); + + /// + /// WithCookie: matching based on name, patterns, ignoreCase and matchBehaviour. + /// + /// The name. + /// The patterns. + /// Ignore the case from the pattern. + /// The match behaviour. + /// The . + IRequestBuilder WithCookie([NotNull] string name, string[] patterns, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); + + /// + /// WithCookie: matching based on name and IStringMatcher[]. + /// + /// The name. + /// The matchers. + /// The . + IRequestBuilder WithCookie([NotNull] string name, [NotNull] params IStringMatcher[] matchers); + + /// + /// WithCookie: matching based on name, ignoreCase and IStringMatcher[]. + /// + /// The name. + /// Ignore the case from the cookie-keys. + /// The matchers. + /// The . + IRequestBuilder WithCookie([NotNull] string name, bool ignoreCase, [NotNull] params IStringMatcher[] matchers); + + /// + /// WithCookie: matching based on name, ignoreCase, matchBehaviour and IStringMatcher[]. + /// + /// The name. + /// Ignore the case from the cookie-keys. + /// The match behaviour. + /// The matchers. + /// The . + IRequestBuilder WithCookie([NotNull] string name, bool ignoreCase, MatchBehaviour matchBehaviour, [NotNull] params IStringMatcher[] matchers); + + /// + /// WithCookie: matching based on functions. + /// + /// The cookies funcs. + /// The . + IRequestBuilder WithCookie([NotNull] params Func, bool>[] funcs); + } +} \ No newline at end of file diff --git a/src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IHeadersRequestBuilder.cs similarity index 77% rename from src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs rename to src/WireMock.Net/RequestBuilders/IHeadersRequestBuilder.cs index d1e77ea0..8ec6c15a 100644 --- a/src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs +++ b/src/WireMock.Net/RequestBuilders/IHeadersRequestBuilder.cs @@ -6,9 +6,9 @@ using WireMock.Matchers; namespace WireMock.RequestBuilders { /// - /// The HeadersAndCookieRequestBuilder interface. + /// The HeadersRequestBuilder interface. /// - public interface IHeadersAndCookiesRequestBuilder : IParamsRequestBuilder + public interface IHeadersRequestBuilder : ICookiesRequestBuilder { /// /// WithHeader: matching based on name, pattern and matchBehaviour. @@ -56,36 +56,30 @@ namespace WireMock.RequestBuilders /// The . IRequestBuilder WithHeader([NotNull] string name, [NotNull] params IStringMatcher[] matchers); + /// + /// WithHeader: matching based on name, ignoreCase and IStringMatcher[]. + /// + /// The name. + /// Ignore the case from the header-keys. + /// The matchers. + /// The . + IRequestBuilder WithHeader([NotNull] string name, bool ignoreCase, [NotNull] params IStringMatcher[] matchers); + + /// + /// WithHeader: matching based on name, ignoreCase, matchBehaviour and IStringMatcher[]. + /// + /// The name. + /// Ignore the case from the header-keys. + /// The match behaviour. + /// The matchers. + /// The . + IRequestBuilder WithHeader([NotNull] string name, bool ignoreCase, MatchBehaviour matchBehaviour, [NotNull] params IStringMatcher[] matchers); + /// /// WithHeader: matching based on functions. /// /// The headers funcs. /// The . IRequestBuilder WithHeader([NotNull] params Func, bool>[] funcs); - - /// - /// WithCookie: cookie matching based on name, pattern, ignoreCase and matchBehaviour. - /// - /// The name. - /// The pattern. - /// Ignore the case from the pattern. - /// The match behaviour. - /// The . - IRequestBuilder WithCookie([NotNull] string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); - - /// - /// WithCookie: matching based on name and IStringMatcher[]. - /// - /// The name. - /// The matchers. - /// The . - IRequestBuilder WithCookie([NotNull] string name, [NotNull] params IStringMatcher[] matchers); - - /// - /// WithCookie: matching based on functions. - /// - /// The funcs. - /// The . - IRequestBuilder WithCookie([NotNull] params Func, bool>[] funcs); } } \ No newline at end of file diff --git a/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs index 88ffa710..2e27bdc1 100644 --- a/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs +++ b/src/WireMock.Net/RequestBuilders/IMethodRequestBuilder.cs @@ -7,7 +7,7 @@ namespace WireMock.RequestBuilders /// /// The MethodRequestBuilder interface. /// - public interface IMethodRequestBuilder : IHeadersAndCookiesRequestBuilder + public interface IMethodRequestBuilder : IHeadersRequestBuilder { /// /// UsingDelete: add HTTP Method matching on `DELETE` and matchBehaviour (optional). diff --git a/src/WireMock.Net/RequestBuilders/Request.WithCookies.cs b/src/WireMock.Net/RequestBuilders/Request.WithCookies.cs new file mode 100644 index 00000000..870b6e59 --- /dev/null +++ b/src/WireMock.Net/RequestBuilders/Request.WithCookies.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using WireMock.Matchers; +using WireMock.Matchers.Request; +using WireMock.Validation; + +namespace WireMock.RequestBuilders +{ + public partial class Request + { + /// + public IRequestBuilder WithCookie(string name, string pattern, MatchBehaviour matchBehaviour) + { + return WithCookie(name, pattern, true, matchBehaviour); + } + + /// + public IRequestBuilder WithCookie(string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) + { + Check.NotNull(name, nameof(name)); + Check.NotNull(pattern, nameof(pattern)); + + _requestMatchers.Add(new RequestMessageCookieMatcher(matchBehaviour, name, pattern, ignoreCase)); + return this; + } + + /// + public IRequestBuilder WithCookie(string name, string[] patterns, MatchBehaviour matchBehaviour) + { + return WithCookie(name, patterns, true, matchBehaviour); + } + + /// + public IRequestBuilder WithCookie(string name, string[] patterns, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) + { + Check.NotNull(name, nameof(name)); + Check.NotNull(patterns, nameof(patterns)); + + _requestMatchers.Add(new RequestMessageCookieMatcher(matchBehaviour, name, ignoreCase, patterns)); + return this; + } + + /// + public IRequestBuilder WithCookie(string name, params IStringMatcher[] matchers) + { + Check.NotNull(name, nameof(name)); + Check.NotNullOrEmpty(matchers, nameof(matchers)); + + _requestMatchers.Add(new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, name, false, matchers)); + return this; + } + + /// + public IRequestBuilder WithCookie(string name, bool ignoreCase, params IStringMatcher[] matchers) + { + Check.NotNull(name, nameof(name)); + Check.NotNullOrEmpty(matchers, nameof(matchers)); + + _requestMatchers.Add(new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, name, ignoreCase, matchers)); + return this; + } + + /// + public IRequestBuilder WithCookie(string name, bool ignoreCase, MatchBehaviour matchBehaviour, params IStringMatcher[] matchers) + { + Check.NotNull(name, nameof(name)); + Check.NotNullOrEmpty(matchers, nameof(matchers)); + + _requestMatchers.Add(new RequestMessageCookieMatcher(matchBehaviour, name, ignoreCase, matchers)); + return this; + } + + /// + public IRequestBuilder WithCookie(params Func, bool>[] funcs) + { + Check.NotNullOrEmpty(funcs, nameof(funcs)); + + _requestMatchers.Add(new RequestMessageCookieMatcher(funcs)); + return this; + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net/RequestBuilders/Request.WithHeaders.cs b/src/WireMock.Net/RequestBuilders/Request.WithHeaders.cs new file mode 100644 index 00000000..0f06616e --- /dev/null +++ b/src/WireMock.Net/RequestBuilders/Request.WithHeaders.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using WireMock.Matchers; +using WireMock.Matchers.Request; +using WireMock.Validation; + +namespace WireMock.RequestBuilders +{ + public partial class Request + { + /// + public IRequestBuilder WithHeader(string name, string pattern, MatchBehaviour matchBehaviour) + { + return WithHeader(name, pattern, true, matchBehaviour); + } + + /// + public IRequestBuilder WithHeader(string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) + { + Check.NotNull(name, nameof(name)); + Check.NotNull(pattern, nameof(pattern)); + + _requestMatchers.Add(new RequestMessageHeaderMatcher(matchBehaviour, name, pattern, ignoreCase)); + return this; + } + + /// + public IRequestBuilder WithHeader(string name, string[] patterns, MatchBehaviour matchBehaviour) + { + return WithHeader(name, patterns, true, matchBehaviour); + } + + /// + public IRequestBuilder WithHeader(string name, string[] patterns, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) + { + Check.NotNull(name, nameof(name)); + Check.NotNull(patterns, nameof(patterns)); + + _requestMatchers.Add(new RequestMessageHeaderMatcher(matchBehaviour, name, ignoreCase, patterns)); + return this; + } + + /// + public IRequestBuilder WithHeader(string name, params IStringMatcher[] matchers) + { + Check.NotNull(name, nameof(name)); + Check.NotNullOrEmpty(matchers, nameof(matchers)); + + _requestMatchers.Add(new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, name, false, matchers)); + return this; + } + + /// + public IRequestBuilder WithHeader(string name, bool ignoreCase, params IStringMatcher[] matchers) + { + Check.NotNull(name, nameof(name)); + Check.NotNullOrEmpty(matchers, nameof(matchers)); + + _requestMatchers.Add(new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, name, ignoreCase, matchers)); + return this; + } + + /// + public IRequestBuilder WithHeader(string name, bool ignoreCase, MatchBehaviour matchBehaviour, params IStringMatcher[] matchers) + { + Check.NotNull(name, nameof(name)); + Check.NotNullOrEmpty(matchers, nameof(matchers)); + + _requestMatchers.Add(new RequestMessageHeaderMatcher(matchBehaviour, name, ignoreCase, matchers)); + return this; + } + + /// + public IRequestBuilder WithHeader(params Func, bool>[] funcs) + { + Check.NotNullOrEmpty(funcs, nameof(funcs)); + + _requestMatchers.Add(new RequestMessageHeaderMatcher(funcs)); + return this; + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net/RequestBuilders/Request.cs b/src/WireMock.Net/RequestBuilders/Request.cs index e8f5986e..50d92498 100644 --- a/src/WireMock.Net/RequestBuilders/Request.cs +++ b/src/WireMock.Net/RequestBuilders/Request.cs @@ -232,81 +232,5 @@ namespace WireMock.RequestBuilders _requestMatchers.Add(new RequestMessageMethodMatcher(matchBehaviour, methods)); return this; } - - /// - public IRequestBuilder WithHeader(string name, string pattern, MatchBehaviour matchBehaviour) - { - return WithHeader(name, pattern, true, matchBehaviour); - } - - /// - public IRequestBuilder WithHeader(string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) - { - Check.NotNull(name, nameof(name)); - Check.NotNull(pattern, nameof(pattern)); - - _requestMatchers.Add(new RequestMessageHeaderMatcher(matchBehaviour, name, pattern, ignoreCase)); - return this; - } - - /// - public IRequestBuilder WithHeader(string name, string[] patterns, MatchBehaviour matchBehaviour) - { - return WithHeader(name, patterns, true, matchBehaviour); - } - - /// - public IRequestBuilder WithHeader(string name, string[] patterns, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) - { - Check.NotNull(name, nameof(name)); - Check.NotNull(patterns, nameof(patterns)); - - _requestMatchers.Add(new RequestMessageHeaderMatcher(matchBehaviour, name, patterns, ignoreCase)); - return this; - } - - /// - public IRequestBuilder WithHeader(string name, params IStringMatcher[] matchers) - { - Check.NotNull(name, nameof(name)); - Check.NotNullOrEmpty(matchers, nameof(matchers)); - - _requestMatchers.Add(new RequestMessageHeaderMatcher(name, matchers)); - return this; - } - - /// - public IRequestBuilder WithHeader(params Func, bool>[] funcs) - { - Check.NotNullOrEmpty(funcs, nameof(funcs)); - - _requestMatchers.Add(new RequestMessageHeaderMatcher(funcs)); - return this; - } - - /// - public IRequestBuilder WithCookie(string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) - { - _requestMatchers.Add(new RequestMessageCookieMatcher(matchBehaviour, name, pattern, ignoreCase)); - return this; - } - - /// - public IRequestBuilder WithCookie(string name, params IStringMatcher[] matchers) - { - Check.NotNullOrEmpty(matchers, nameof(matchers)); - - _requestMatchers.Add(new RequestMessageCookieMatcher(name, matchers)); - return this; - } - - /// - public IRequestBuilder WithCookie(params Func, bool>[] funcs) - { - Check.NotNullOrEmpty(funcs, nameof(funcs)); - - _requestMatchers.Add(new RequestMessageCookieMatcher(funcs)); - return this; - } } } \ No newline at end of file diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs index 9755e023..da36e2fa 100644 --- a/src/WireMock.Net/Server/WireMockServer.Admin.cs +++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs @@ -797,7 +797,12 @@ namespace WireMock.Server { foreach (var headerModel in requestModel.Headers.Where(h => h.Matchers != null)) { - requestBuilder = requestBuilder.WithHeader(headerModel.Name, headerModel.Matchers.Select(_matcherMapper.Map).OfType().ToArray()); + requestBuilder = requestBuilder.WithHeader( + headerModel.Name, + headerModel.IgnoreCase == true, + headerModel.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch, + headerModel.Matchers.Select(_matcherMapper.Map).OfType().ToArray() + ); } } @@ -805,7 +810,11 @@ namespace WireMock.Server { foreach (var cookieModel in requestModel.Cookies.Where(c => c.Matchers != null)) { - requestBuilder = requestBuilder.WithCookie(cookieModel.Name, cookieModel.Matchers.Select(_matcherMapper.Map).OfType().ToArray()); + requestBuilder = requestBuilder.WithCookie( + cookieModel.Name, + cookieModel.IgnoreCase == true, + cookieModel.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch, + cookieModel.Matchers.Select(_matcherMapper.Map).OfType().ToArray()); } } diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs index 64a4029c..2b1767a0 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageCookieMatcherTests.cs @@ -14,7 +14,7 @@ namespace WireMock.Net.Tests.RequestMatchers { // Assign var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1"); - var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "c", "x"); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "c", false, "x"); // Act var result = new RequestMatchResult(); @@ -29,38 +29,7 @@ namespace WireMock.Net.Tests.RequestMatchers { // Assign var requestMessage = new RequestMessage(new UrlDetails("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 UrlDetails("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 UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies); - var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "no-match", "123"); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "c", false, "x"); // Act var result = new RequestMatchResult(); @@ -76,7 +45,7 @@ namespace WireMock.Net.Tests.RequestMatchers // Assign var cookies = new Dictionary { { "h", "x" } }; var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies); - var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "h", "x"); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "h", false, "x"); // Act var result = new RequestMatchResult(); @@ -92,7 +61,7 @@ namespace WireMock.Net.Tests.RequestMatchers // Assign var cookies = new Dictionary { { "h", "x" } }; var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies); - var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "h", "x"); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "h", false, "x"); // Act var result = new RequestMatchResult(); @@ -108,7 +77,23 @@ namespace WireMock.Net.Tests.RequestMatchers // Assign var cookies = new Dictionary { { "cook", "x" } }; var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies); - var matcher = new RequestMessageCookieMatcher("cook", new ExactMatcher("x")); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "cook", false, new ExactMatcher("x")); + + // Act + var result = new RequestMatchResult(); + double score = matcher.GetMatchingScore(requestMessage, result); + + // Assert + Check.That(score).IsEqualTo(1.0d); + } + + [Fact] + public void RequestMessageCookieMatcher_WithMissingCookie_When_RejectOnMatch_Is_True_Should_Match() + { + // Assign + var cookies = new Dictionary { { "cook", "x" } }; + var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies); + var matcher = new RequestMessageCookieMatcher(MatchBehaviour.RejectOnMatch, "uhuh", false, new ExactMatcher("x")); // Act var result = new RequestMatchResult(); diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs index 51ee09fa..80d468e4 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs @@ -108,7 +108,7 @@ namespace WireMock.Net.Tests.RequestMatchers // Assign var headers = new Dictionary { { "h", new[] { "x" } } }; var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, headers); - var matcher = new RequestMessageHeaderMatcher("h", new ExactMatcher("x")); + var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, "h", false, new ExactMatcher("x")); // Act var result = new RequestMatchResult();