From 8959e55ca33e55ca0ab718ed0387b92e522cb935 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 4 May 2018 08:16:42 +0200 Subject: [PATCH] RejectOnMatch (wip) --- .../WireMock.Net.ConsoleApplication/MainApp.cs | 8 ++++++++ .../IHeadersAndCookiesRequestBuilder.cs | 18 ++++++++++++++++++ src/WireMock.Net/RequestBuilders/Request.cs | 12 ++++++++++++ .../Serialization/MatcherMapper.cs | 2 ++ .../Serialization/MatcherModelMapper.cs | 2 +- 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/examples/WireMock.Net.ConsoleApplication/MainApp.cs b/examples/WireMock.Net.ConsoleApplication/MainApp.cs index 0bf8fccd..2d2b97aa 100644 --- a/examples/WireMock.Net.ConsoleApplication/MainApp.cs +++ b/examples/WireMock.Net.ConsoleApplication/MainApp.cs @@ -150,6 +150,14 @@ namespace WireMock.Net.ConsoleApplication .WithHeader("Content-Type", "application/json") .WithBody(@"{ ""result"": ""data deleted with 200""}")); + server + .Given(Request.Create() + .WithPath("/reject") + .WithHeader("x", "1", MatchBehaviour.RejectOnMatch) + .UsingAnyMethod()) + .RespondWith(Response.Create() + .WithBody(@"{ ""result"": ""reject""}")); + server .Given(Request.Create().WithPath("/nobody").UsingGet()) .RespondWith(Response.Create().WithDelay(TimeSpan.FromSeconds(1)) diff --git a/src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs b/src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs index a735e564..a8b1b853 100644 --- a/src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs +++ b/src/WireMock.Net/RequestBuilders/IHeadersAndCookiesRequestBuilder.cs @@ -11,6 +11,15 @@ namespace WireMock.RequestBuilders /// public interface IHeadersAndCookiesRequestBuilder : IBodyRequestBuilder, IRequestMatcher, IParamsRequestBuilder { + /// + /// WithHeader: matching based on name, pattern and matchBehaviour. + /// + /// The name. + /// The pattern. + /// The match behaviour. + /// The . + IRequestBuilder WithHeader([NotNull] string name, string pattern, MatchBehaviour matchBehaviour); + /// /// WithHeader: matching based on name, pattern, ignoreCase and matchBehaviour. /// @@ -21,6 +30,15 @@ namespace WireMock.RequestBuilders /// The . IRequestBuilder WithHeader([NotNull] string name, string pattern, bool ignoreCase = true, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch); + /// + /// WithHeader: matching based on name, patterns and matchBehaviour. + /// + /// The name. + /// The patterns. + /// The match behaviour. + /// The . + IRequestBuilder WithHeader([NotNull] string name, string[] patterns, MatchBehaviour matchBehaviour); + /// /// WithHeader: matching based on name, patterns, ignoreCase and matchBehaviour. /// diff --git a/src/WireMock.Net/RequestBuilders/Request.cs b/src/WireMock.Net/RequestBuilders/Request.cs index c2051d9e..d22274b1 100644 --- a/src/WireMock.Net/RequestBuilders/Request.cs +++ b/src/WireMock.Net/RequestBuilders/Request.cs @@ -312,6 +312,12 @@ namespace WireMock.RequestBuilders 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) { @@ -322,6 +328,12 @@ namespace WireMock.RequestBuilders 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) { diff --git a/src/WireMock.Net/Serialization/MatcherMapper.cs b/src/WireMock.Net/Serialization/MatcherMapper.cs index 9e2343d2..b1f0f376 100644 --- a/src/WireMock.Net/Serialization/MatcherMapper.cs +++ b/src/WireMock.Net/Serialization/MatcherMapper.cs @@ -22,9 +22,11 @@ namespace WireMock.Serialization string[] patterns = matcher is IStringMatcher stringMatcher ? stringMatcher.GetPatterns() : new string[0]; bool? ignorecase = matcher is IIgnoreCaseMatcher ignoreCaseMatcher ? ignoreCaseMatcher.IgnoreCase : (bool?)null; + bool? rejectOnMatch = matcher.MatchBehaviour == MatchBehaviour.RejectOnMatch ? true : (bool?) null; return new MatcherModel { + RejectOnMatch = rejectOnMatch, IgnoreCase = ignorecase, Name = matcher.Name, Pattern = patterns.Length == 1 ? patterns.First() : null, diff --git a/src/WireMock.Net/Serialization/MatcherModelMapper.cs b/src/WireMock.Net/Serialization/MatcherModelMapper.cs index 2aea737d..91852d14 100644 --- a/src/WireMock.Net/Serialization/MatcherModelMapper.cs +++ b/src/WireMock.Net/Serialization/MatcherModelMapper.cs @@ -20,7 +20,7 @@ namespace WireMock.Serialization string matcherType = parts.Length > 1 ? parts[1] : null; string[] patterns = matcher.Patterns ?? new[] { matcher.Pattern }; - var matchBehaviour = matcher.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch; + MatchBehaviour matchBehaviour = matcher.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch; switch (matcherName) {