diff --git a/src/WireMock.Net/RequestBuilders/Request.WithBody.cs b/src/WireMock.Net/RequestBuilders/Request.WithBody.cs index 19926529..12b15595 100644 --- a/src/WireMock.Net/RequestBuilders/Request.WithBody.cs +++ b/src/WireMock.Net/RequestBuilders/Request.WithBody.cs @@ -37,13 +37,14 @@ public partial class Request /// public IRequestBuilder WithBodyAsJson(object body, MatchBehaviour matchBehaviour = MatchBehaviour.AcceptOnMatch) { - return WithBody(new IMatcher[] { new JsonMatcher(matchBehaviour, body) }); + var matcher = body as IMatcher ?? new JsonMatcher(matchBehaviour, body); + return WithBody([matcher]); } /// public IRequestBuilder WithBody(IMatcher matcher) { - return WithBody(new[] { matcher }); + return WithBody([matcher]); } /// diff --git a/test/WireMock.Net.Tests/Matchers/JsonPartialWildcardMatcherTests.cs b/test/WireMock.Net.Tests/Matchers/JsonPartialWildcardMatcherTests.cs index d8009ac8..3bf67734 100644 --- a/test/WireMock.Net.Tests/Matchers/JsonPartialWildcardMatcherTests.cs +++ b/test/WireMock.Net.Tests/Matchers/JsonPartialWildcardMatcherTests.cs @@ -20,7 +20,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher("{}"); // Act - string name = matcher.Name; + var name = matcher.Name; // Assert Check.That(name).Equals("JsonPartialWildcardMatcher"); @@ -33,7 +33,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher("{}"); // Act - object value = matcher.Value; + var value = matcher.Value; // Assert Check.That(value).Equals("{}"); @@ -83,7 +83,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(""); // Act - double match = matcher.IsMatch(bytes).Score; + var match = matcher.IsMatch(bytes).Score; // Assert Check.That(match).IsEqualTo(0); @@ -97,7 +97,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(""); // Act - double match = matcher.IsMatch(s).Score; + var match = matcher.IsMatch(s).Score; // Assert Check.That(match).IsEqualTo(0); @@ -111,7 +111,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(""); // Act - double match = matcher.IsMatch(o).Score; + var match = matcher.IsMatch(o).Score; // Assert Check.That(match).IsEqualTo(0); @@ -129,7 +129,7 @@ public class JsonPartialWildcardMatcherTests "x", "y" }; - double match = matcher.IsMatch(jArray).Score; + var match = matcher.IsMatch(jArray).Score; // Assert Assert.Equal(1.0, match); @@ -147,7 +147,7 @@ public class JsonPartialWildcardMatcherTests { "Id", new JValue(1) }, { "Name", new JValue("Test") } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -165,7 +165,7 @@ public class JsonPartialWildcardMatcherTests { "Id", new JValue(1) }, { "NaMe", new JValue("Test") } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -179,7 +179,7 @@ public class JsonPartialWildcardMatcherTests // Act var jObject = JObject.Parse("{ \"Id\" : 1, \"Name\" : \"Test\" }"); - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -193,7 +193,7 @@ public class JsonPartialWildcardMatcherTests // Act var jObject = JObject.Parse("{ \"Id\" : 1, \"Name\" : \"Test\" }"); - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -211,7 +211,7 @@ public class JsonPartialWildcardMatcherTests "x", "y" }; - double match = matcher.IsMatch(jArray).Score; + var match = matcher.IsMatch(jArray).Score; // Assert Assert.Equal(1.0, match); @@ -229,7 +229,7 @@ public class JsonPartialWildcardMatcherTests { "Id", new JValue(1) }, { "Name", new JValue("Test") } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -247,7 +247,7 @@ public class JsonPartialWildcardMatcherTests { "Id", new JValue(1) }, { "Name", new JValue("Test") } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -265,7 +265,7 @@ public class JsonPartialWildcardMatcherTests { "Id", new JValue(1) }, { "Name", new JValue("Test") } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(0.0, match); @@ -282,7 +282,7 @@ public class JsonPartialWildcardMatcherTests { { "preferredAt", new JValue("2019-11-21T10:32:53.2210009+00:00") } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); @@ -305,7 +305,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(value); // Act - double match = matcher.IsMatch(input).Score; + var match = matcher.IsMatch(input).Score; // Assert Assert.Equal(1.0, match); @@ -320,7 +320,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(value); // Act - double match = matcher.IsMatch(input).Score; + var match = matcher.IsMatch(input).Score; // Assert match.Should().Be(1.0); @@ -344,7 +344,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(value); // Act - double match = matcher.IsMatch(input).Score; + var match = matcher.IsMatch(input).Score; // Assert Assert.Equal(0.0, match); @@ -363,7 +363,7 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(value); // Act - double match = matcher.IsMatch(input).Score; + var match = matcher.IsMatch(input).Score; // Assert Assert.Equal(1.0, match); @@ -382,14 +382,14 @@ public class JsonPartialWildcardMatcherTests var matcher = new JsonPartialWildcardMatcher(value); // Act - double match = matcher.IsMatch(input).Score; + var match = matcher.IsMatch(input).Score; // Assert Assert.Equal(0.0, match); } [Fact] - public void JsonPartialWildcardMatcher_IsMatch_WithIgnoreCaseTrueAndRegexTrue_JObject() + public void JsonPartialWildcardMatcher_IsMatch_WithIgnoreCaseTrueAndRegexTrue_JObject1() { // Assign var matcher = new JsonPartialWildcardMatcher(new { id = 1, Number = "^\\d+$" }, ignoreCase: true, regex: true); @@ -400,7 +400,22 @@ public class JsonPartialWildcardMatcherTests { "Id", new JValue(1) }, { "Number", new JValue(1) } }; - double match = matcher.IsMatch(jObject).Score; + var match = matcher.IsMatch(jObject).Score; + + // Assert + Assert.Equal(1.0, match); + } + + [Fact] + public void JsonPartialWildcardMatcher_IsMatch_WithIgnoreCaseTrueAndRegexTrue_JObject2() + { + // Assign + var matcher = new JsonPartialWildcardMatcher(new { method = "initialize", id = "^[a-f0-9]{32}-[0-9]$" }, ignoreCase: true, regex: true); + + // Act + var jObject = JsonConvert.DeserializeObject( + "{\"jsonrpc\":\"2.0\",\"id\":\"ec475f56d4694b48bc737500ba575b35-1\",\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"GitHub Test\",\"version\":\"1.0.0\"}}}"); + var match = matcher.IsMatch(jObject).Score; // Assert Assert.Equal(1.0, match); diff --git a/test/WireMock.Net.Tests/WireMockServerTests.WithBody.cs b/test/WireMock.Net.Tests/WireMockServerTests.WithBody.cs index 3bcfbaf6..57d45e44 100644 --- a/test/WireMock.Net.Tests/WireMockServerTests.WithBody.cs +++ b/test/WireMock.Net.Tests/WireMockServerTests.WithBody.cs @@ -5,6 +5,8 @@ using System; using System.Collections.Generic; using System.Net; using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; using System.Threading.Tasks; using FluentAssertions; using WireMock.Matchers; @@ -166,6 +168,40 @@ public partial class WireMockServerTests server.Stop(); } + [Fact] + public async Task WireMockServer_WithBodyAsJson_Using_PostAsync_And_JsonPartialWildcardMatcher_ShouldMatch() + { + // Arrange + using var server = WireMockServer.Start(); + + var matcher = new JsonPartialWildcardMatcher(new { method = "initialize", id = "^[a-f0-9]{32}-[0-9]$" }, ignoreCase: true, regex: true); + server.Given(Request.Create() + .WithHeader("Content-Type", "application/json*") + .UsingPost() + .WithPath("/foo") + .WithBody(matcher) + ) + .RespondWith(Response.Create() + .WithHeader("Content-Type", "application/json") + .WithBody(""" + {"jsonrpc":"2.0","id":"{{request.bodyAsJson.id}}","result":{"protocolVersion":"2024-11-05","capabilities":{"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":true,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"ExampleServer","version":"1.0.0"}}} + """) + .WithStatusCode(200) + ); + + // Act + var content = "{\"jsonrpc\":\"2.0\",\"id\":\"ec475f56d4694b48bc737500ba575b35-1\",\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"GitHub Test\",\"version\":\"1.0.0\"}}}"; + var response = await new HttpClient() + .PostAsync($"{server.Url}/foo", new StringContent(content, Encoding.UTF8, "application/json")) + .ConfigureAwait(false); + + // Assert + response.StatusCode.Should().Be(HttpStatusCode.OK); + + var responseText = await response.RequestMessage!.Content!.ReadAsStringAsync(); + responseText.Should().Contain("ec475f56d4694b48bc737500ba575b35-1"); + } + [Fact] public async Task WireMockServer_WithBodyAsFormUrlEncoded_Using_PostAsync_And_WithFunc() {