diff --git a/src/WireMock.Net.Minimal/RequestBuilders/Request.ClientIP.cs b/src/WireMock.Net.Minimal/RequestBuilders/Request.ClientIP.cs index 2352a065e..cc255df88 100644 --- a/src/WireMock.Net.Minimal/RequestBuilders/Request.ClientIP.cs +++ b/src/WireMock.Net.Minimal/RequestBuilders/Request.ClientIP.cs @@ -19,7 +19,7 @@ public IRequestBuilder WithClientIP(MatchOperator matchOperator, params IStringM { Guard.NotNullOrEmpty(matchers); - _requestMatchers.Add(new RequestMessageClientIPMatcher(MatchBehaviour.AcceptOnMatch, MatchOperator.Or, matchers)); + _requestMatchers.Add(new RequestMessageClientIPMatcher(MatchBehaviour.AcceptOnMatch, matchOperator, matchers)); return this; } diff --git a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithClientIPTests.cs b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithClientIPTests.cs index b2e248905..596ba6807 100644 --- a/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithClientIPTests.cs +++ b/test/WireMock.Net.Tests/RequestBuilders/RequestBuilderWithClientIPTests.cs @@ -64,4 +64,23 @@ public void Request_WithClientIP_Func() var requestMatchResult = new RequestMatchResult(); spec.GetMatchingScore(request, requestMatchResult).Should().Be(1.0); } + + [Fact] + public void Request_WithClientIP_MatchOperator_And_RequiresAllMatchers() + { + // given: two matchers combined with And (the client IP must satisfy BOTH) + var spec = Request.Create().WithClientIP(MatchOperator.And, new WildcardMatcher("1.2.*"), new WildcardMatcher("*.3.4")); + + // when: an IP matching both matchers -> perfect match + var matchesBoth = new RequestMessage(new UrlDetails("http://localhost"), "GET", "1.2.3.4"); + spec.GetMatchingScore(matchesBoth, new RequestMatchResult()).Should().Be(1.0); + + // when: an IP matching only the first matcher -> mismatch + var matchesFirstOnly = new RequestMessage(new UrlDetails("http://localhost"), "GET", "1.2.9.9"); + spec.GetMatchingScore(matchesFirstOnly, new RequestMatchResult()).Should().Be(0.0); + + // when: an IP matching only the second matcher -> mismatch + var matchesSecondOnly = new RequestMessage(new UrlDetails("http://localhost"), "GET", "9.3.4"); + spec.GetMatchingScore(matchesSecondOnly, new RequestMatchResult()).Should().Be(0.0); + } } \ No newline at end of file