From ecca6968e885aea30b6cd656c6a8196683bdcfb4 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Tue, 17 Nov 2020 17:30:20 +0100 Subject: [PATCH] Created Request Matching JsonPathMatcher (markdown) --- Request-Matching-JsonPathMatcher.md | 56 +++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Request-Matching-JsonPathMatcher.md diff --git a/Request-Matching-JsonPathMatcher.md b/Request-Matching-JsonPathMatcher.md new file mode 100644 index 0000000..805b5ee --- /dev/null +++ b/Request-Matching-JsonPathMatcher.md @@ -0,0 +1,56 @@ +### JSON Path (JsonPathMatcher) +Deems a match if the attribute value is valid JSON and matches the JSON Path expression supplied. +A JSON body will be considered to match a path expression if the expression returns either a non-null single value (string, integer etc.), or a non-empty object or array. + +#### C# +```csharp +var server = WireMockServer.Start(); +server + .Given( + Request.Create().WithPath("/some/thing").UsingGet() + .WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]")); + ) + .RespondWith(Response.Create().WithBody("Hello")); +``` + +#### JSON Mapping +``` js +{ + "Guid": "e4a600b8-9d6f-453f-90c6-3db2b0885ddb", + "Request": { + "Path": { + "Matchers": [ + { + "Name": "WildcardMatcher", + "Pattern": "/jsonpath", + "IgnoreCase": false + } + ] + }, + "Methods": [ + "put" + ], + "Body": { + "Matcher": { + "Name": "JsonPathMatcher", + "Pattern": "$.things[?(@.name == 'RequiredThing')]" + } + } + }, + "Response": { + "StatusCode": 200, + "BodyDestination": "SameAsSource", + "Body": "{ \"result\": \"JsonPathMatcher !!!\"}", + "UseTransformer": false + } +} +``` + +``` +// matching +{ "things": { "name": "RequiredThing" } } +{ "things": [ { "name": "RequiredThing" }, { "name": "Wiremock" } ] } +// not matching +{ "price": 15 } +{ "things": { "name": "Wiremock" } } +``` \ No newline at end of file