wiremock / wiremock/WireMock.Net
Request Matching JsonPathMatcher Partially
Open
@StefH is already working on this.
Since Jul 22, 2024.
question
- Dominant language
- C#
- Stars
- 1.7k
- Forks
- 240
- Avg merge
- 5d 12h
- Merged PRs (30d)
- 2
Description
Hello, I'm trying to match a json path partially, but I'm not sure how to do it.
Here's what I have:
var client = new HttpClient();
var server = WireMockServer.Start();
// this match
var test1 = new { things = new { name = "RequiredThing" } };
// this does not match
var test2 = new { things = new { name = "RequiredThing" }, soup = "carrot" };
server.Given(
WireMock.RequestBuilders.Request.Create()
.WithPath("/test1")
.UsingPost()
.WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"))
)
.RespondWith(
WireMock.ResponseBuilders.Response.Create()
.WithHeader("Content-Type", "application/json")
.WithStatusCode(200)
.WithDelay(TimeSpan.FromMilliseconds(50))
);
server.Given(
WireMock.RequestBuilders.Request.Create()
.WithPath("/test2")
.UsingPost()
.WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"))
)
.RespondWith(
WireMock.ResponseBuilders.Response.Create()
.WithHeader("Content-Type", "application/json")
.WithStatusCode(200)
.WithDelay(TimeSpan.FromMilliseconds(50))
);
var response1 = await client.PostAsJsonAsync($"http://localhost:{server.Port}/test1", test1);
response1.EnsureSuccessStatusCode();
var response2 = await client.PostAsJsonAsync($"http://localhost:{server.Port}/test2", test2);
response2.EnsureSuccessStatusCode();
My expectation is that both requests match, but the second one fails.
The same approach using JmesPathMatching works fine.
server.Given(
WireMock.RequestBuilders.Request.Create()
.WithPath("/test2")
.UsingPost()
//.WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"))
.WithBody(new JmesPathMatcher("things.name == 'RequiredThing'"))
)
.RespondWith(
WireMock.ResponseBuilders.Response.Create()
.WithHeader("Content-Type", "application/json")
.WithStatusCode(200)
.WithDelay(TimeSpan.FromMilliseconds(50))
);
WireMock.Net: 1.5.56
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.