diff --git a/src/WireMock.Net/Matchers/GraphQLMatcher.cs b/src/WireMock.Net/Matchers/GraphQLMatcher.cs index cb66c6288..6bba41635 100644 --- a/src/WireMock.Net/Matchers/GraphQLMatcher.cs +++ b/src/WireMock.Net/Matchers/GraphQLMatcher.cs @@ -137,9 +137,14 @@ private static bool TryGetGraphQLRequest(string input, [NotNullWhen(true)] out G } } - private static ISchema BuildSchema(string schema) + private static ISchema BuildSchema(string typeDefinitions) { - return Schema.For(schema); + var schema = Schema.For(typeDefinitions); + + // #984 + schema.RegisterTypes(schema.BuiltInTypeMappings.Select(x => x.graphType).ToArray()); + + return schema; } } #endif \ No newline at end of file diff --git a/test/WireMock.Net.Tests/Matchers/GraphQLMatcherTests.cs b/test/WireMock.Net.Tests/Matchers/GraphQLMatcherTests.cs index cad8de3f9..3efc32a2a 100644 --- a/test/WireMock.Net.Tests/Matchers/GraphQLMatcherTests.cs +++ b/test/WireMock.Net.Tests/Matchers/GraphQLMatcherTests.cs @@ -11,7 +11,10 @@ namespace WireMock.Net.Tests.Matchers; public class GraphQLMatcherTests { private const string TestSchema = @" + scalar DateTime + input MessageInput { + date: DateTime content: String author: String } @@ -24,20 +27,21 @@ type Message { type Mutation { createMessage(input: MessageInput): Message + createAnotherMessage(date: DateTime, content: String, author: String): Message updateMessage(id: ID!, input: MessageInput): Message } type Query { - greeting:String - students:[Student] - studentById(id:ID!):Student + greeting: String + students: [Student] + studentById(id: ID!):Student } type Student { - id:ID! - firstName:String - lastName:String - fullName:String + id: ID! + firstName: String + lastName: String + fullName: String }"; [Fact] @@ -57,7 +61,7 @@ public void GraphQLMatcher_For_ValidSchema_And_CorrectQuery_IsMatch() } [Fact] - public void GraphQLMatcher_For_ValidSchema_And_CorrectGraphQLQuery_IsMatch() + public void GraphQLMatcher_For_ValidSchema_And_CorrectGraphQL_Query_IsMatch() { // Arrange var input = @"{ @@ -76,6 +80,25 @@ public void GraphQLMatcher_For_ValidSchema_And_CorrectGraphQLQuery_IsMatch() matcher.GetPatterns().Should().Contain(TestSchema); } + [Fact] + public void GraphQLMatcher_For_ValidSchema_And_CorrectGraphQL_Mutation_IsMatch() + { + // Arrange + var input = @"{ + ""query"": ""mutation CreateAnotherMessage($date: DateTime!, $content: String!, $author: String!) { createAnotherMessage(date: $date, content: $content, author: $author) { id } }"", + ""variables"": { ""date"": ""2007-12-03T10:15:30Z"", ""content"": ""--content--"", ""author"": ""--author--"" } +}"; + + // Act + var matcher = new GraphQLMatcher(TestSchema); + var result = matcher.IsMatch(input); + + // Assert + result.Score.Should().Be(MatchScores.Perfect); + + matcher.GetPatterns().Should().Contain(TestSchema); + } + [Fact] public void GraphQLMatcher_For_ValidSchema_And_IncorrectQuery_IsMismatch() {