diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs index f1f7095a..bc3c6c15 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs @@ -135,7 +135,7 @@ public class RequestMessageHeaderMatcher : IRequestMatcher results.Add(MatchScores.ToScore(resultsPerMatcher, MatchOperator.And)); } - return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.ToScore(results, MatchOperator)); + return MatchScores.ToScore(results, MatchOperator); } return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch); diff --git a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs index 988fd343..46a3b2c4 100644 --- a/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs +++ b/test/WireMock.Net.Tests/RequestMatchers/RequestMessageHeaderMatcherTests.cs @@ -86,7 +86,7 @@ public class RequestMessageHeaderMatcherTests Check.That(score).IsEqualTo(1.0d); } - [Fact(Skip = "does not work anymore since 'and'/'or'/'average'")] + [Fact] public void RequestMessageHeaderMatcher_GetMatchingScore_RejectOnMatch() { // Assign @@ -102,6 +102,22 @@ public class RequestMessageHeaderMatcherTests Check.That(score).IsEqualTo(0.0d); } + [Fact] + public void RequestMessageHeaderMatcher_GetMatchingScore_RejectOnMatch_Wildcard() + { + // 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(MatchBehaviour.RejectOnMatch, "h", "*", 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() { diff --git a/test/WireMock.Net.Tests/RequestTests.cs b/test/WireMock.Net.Tests/RequestTests.cs index 32081267..9d4cd716 100644 --- a/test/WireMock.Net.Tests/RequestTests.cs +++ b/test/WireMock.Net.Tests/RequestTests.cs @@ -84,6 +84,82 @@ namespace WireMock.Net.Tests Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0); } + [Fact] + public void Should_specify_requests_matching_given_wildcard_header() + { + // given + var spec = Request.Create().UsingAnyMethod().WithHeader("X-toto", "*"); + + // when + var body = new BodyData + { + BodyAsString = "whatever", + DetectedBodyType = BodyType.String + }; + var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp, body, new Dictionary { { "X-toto", new[] { "TaTa" } } }); + + // then + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0); + } + + [Fact] + public void Should_specify_requests_not_matching_given_wildcard_header2() + { + // given + var spec = Request.Create().UsingAnyMethod().WithHeader("X-toto", "*"); + + // when + var body = new BodyData + { + BodyAsString = "whatever", + DetectedBodyType = BodyType.String + }; + var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp, body, new Dictionary { { "X-tata", new[] { "ToTo" } } }); + + // then + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(0.0); + } + + [Fact] + public void Should_specify_requests_matching_given_wildcard_header_rejectonmatch() + { + // given + var spec = Request.Create().UsingAnyMethod().WithHeader("X-toto", "*", WireMock.Matchers.MatchBehaviour.RejectOnMatch); + + // when + var body = new BodyData + { + BodyAsString = "whatever", + DetectedBodyType = BodyType.String + }; + var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp, body, new Dictionary { { "X-tata", new[] { "ToTo" } } }); + + // then + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0); + } + + [Fact] + public void Should_specify_requests_not_matching_given_wildcard_header_rejectonmatch() + { + // given + var spec = Request.Create().UsingAnyMethod().WithHeader("X-toto", "*", WireMock.Matchers.MatchBehaviour.RejectOnMatch); + + // when + var body = new BodyData + { + BodyAsString = "whatever", + DetectedBodyType = BodyType.String + }; + var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "PUT", ClientIp, body, new Dictionary { { "X-toto", new[] { "TaTa" } } }); + + // then + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(0.0); + } + [Fact] public void Should_specify_requests_matching_given_body() {