diff --git a/Request-Matching.md b/Request-Matching.md index 3eb1a4c..8c0d821 100644 --- a/Request-Matching.md +++ b/Request-Matching.md @@ -250,7 +250,95 @@ server ``` ## GraphQL Schema (GraphQLMatcher) -This matcher +Can be used to match a GraphQL Query or Mutation using GraphQAL Schema. + +#### C# option +```csharp +var TestSchema = @" + input MessageInput { + content: String + author: String + } + + type Message { + id: ID! + content: String + author: String + } + + type Mutation { + createMessage(input: MessageInput): Message + updateMessage(id: ID!, input: MessageInput): Message + } + + type Query { + greeting:String + students:[Student] + studentById(id:ID!):Student + } + + type Student { + id:ID! + firstName:String + lastName:String + fullName:String + }"; + +var server = WireMockServer.Start(); +server + .Given(Request.Create() + .WithPath("/graphql") + .UsingPost() + .WithGraphQLSchema(TestSchema) + ) + .RespondWith(Response.Create() + .WithBody("GraphQL is ok") + ); +``` + +#### JSON Mapping option +``` json +{ + "Guid": "5a36d1c1-11df-4976-90f9-22cae5dadb38", + "UpdatedAt": "2023-07-08T17:02:06.1072879Z", + "Request": { + "Path": { + "Matchers": [ + { + "Name": "WildcardMatcher", + "Pattern": "/graphql", + "IgnoreCase": false + } + ] + }, + "Methods": [ + "POST" + ], + "Body": { + "Matcher": { + "Name": "GraphQLMatcher", + "Pattern": "\r\n input MessageInput {\r\n content: String\r\n author: String\r\n }\r\n\r\n type Message {\r\n id: ID!\r\n content: String\r\n author: String\r\n }\r\n\r\n type Mutation {\r\n createMessage(input: MessageInput): Message\r\n updateMessage(id: ID!, input: MessageInput): Message\r\n }\r\n\r\n type Query {\r\n greeting:String\r\n students:[Student]\r\n studentById(id:ID!):Student\r\n }\r\n\r\n type Student {\r\n id:ID!\r\n firstName:String\r\n lastName:String\r\n fullName:String \r\n }" + } + } + } +``` + +## CSharp Code (CSharpCodeMatcher) +*Advanced!* With this matcher you can use complex C# code to match an JObject or string value. +* You need to include the NuGet package [WireMock.Net.Matchers.CSharpCode](https://www.nuget.org/packages/WireMock.Net.Matchers.CSharpCode/) +* Note that this functionality will only work if enabled in the settings (`AllowCSharpCodeMatcher = true`). +* The argument-name from the string or JObject to match will be `it`. + +#### C# option +```csharp +var server = WireMockServer.Start(); +server + .Given(Request.Create().WithPath("/cs") + .WithParam("from", new CSharpCodeMatcher("return it == \"x\";"))) + .RespondWith(Response.Create() + .WithBody("cs match") + ); +``` ### Jmes Path (JmesPathMatcher) The JMESPath language is described in an ABNF grammar with a complete specification.