From 694caccf8fc9340f5980d37048264818a6511f71 Mon Sep 17 00:00:00 2001 From: Phillip Kruger Date: Thu, 11 Aug 2022 18:34:29 +1000 Subject: [PATCH] Upgrade to SmallRye GraphQL 1.7.0 (graphql-java 19.0) Signed-off-by: Phillip Kruger --- bom/application/pom.xml | 2 +- .../deployment/SmallRyeGraphQLProcessor.java | 7 ++ .../graphql/deployment/HotReloadTest.java | 4 +- .../deployment/InstrumentationTest.java | 84 +++++++++++++++++++ .../runtime/SmallRyeGraphQLConfig.java | 54 ++++++++++-- .../runtime/SmallRyeGraphQLConfigMapping.java | 14 ++++ jakarta/rewrite.yml | 2 +- .../createNewNullNamedHero/output2.json | 14 ++++ .../createNewUnnamedHero/output2.json | 14 ++++ .../invalidDataTypeValue/output3.json | 16 ++++ .../overrides/invalidEnumValue/output2.json | 14 ++++ .../output3.json | 16 ++++ .../output3.json | 16 ++++ .../invalidLocalDateTimeValue/output3.json | 16 ++++ .../invalidLocalDateValue/output3.json | 16 ++++ .../output3.json | 16 ++++ .../invalidLocalTimeValue/output3.json | 16 ++++ .../overrides/unknownField/output2.json | 14 ++++ .../overrides/unknownMutation/output2.json | 14 ++++ .../overrides/unknownQuery/output2.json | 14 ++++ 20 files changed, 353 insertions(+), 10 deletions(-) create mode 100644 extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/InstrumentationTest.java create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/createNewNullNamedHero/output2.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/createNewUnnamedHero/output2.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidDataTypeValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidEnumValue/output2.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateFormattedValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeFormattedValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeFormattedValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeValue/output3.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/unknownField/output2.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/unknownMutation/output2.json create mode 100644 tcks/microprofile-graphql/src/main/resources/overrides/unknownQuery/output2.json diff --git a/bom/application/pom.xml b/bom/application/pom.xml index 1f4f0744a44c5..2cca1db5a31a7 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -44,7 +44,7 @@ 3.2.1 3.0.5 2.1.23 - 1.6.2 + 1.7.0 2.1.1 5.5.0 3.5.3 diff --git a/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java b/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java index df27e9ab5c54c..0a24fad627214 100644 --- a/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java +++ b/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java @@ -46,6 +46,7 @@ import io.quarkus.deployment.builditem.ShutdownContextBuildItem; import io.quarkus.deployment.builditem.SystemPropertyBuildItem; import io.quarkus.deployment.builditem.TransformedClassesBuildItem; +import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveHierarchyBuildItem; import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem; @@ -194,6 +195,12 @@ void registerNativeImageResources(BuildProducer servic .produce(ServiceProviderBuildItem.allProvidersFromClassPath(SmallRyeGraphQLConfigMapping.class.getName())); } + @BuildStep + void registerNativeResourceBundle(BuildProducer nativeResourceBundleProvider) + throws IOException { + nativeResourceBundleProvider.produce(new NativeImageResourceBundleBuildItem("i18n.Validation")); + } + @BuildStep SmallRyeGraphQLModifiedClasesBuildItem createIndex(TransformedClassesBuildItem transformedClassesBuildItem) { Map modifiedClasses = new HashMap<>(); diff --git a/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/HotReloadTest.java b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/HotReloadTest.java index bc17dcc634f58..6eacf9b78afd3 100644 --- a/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/HotReloadTest.java +++ b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/HotReloadTest.java @@ -52,7 +52,7 @@ public void testAddAndRemoveFieldChange() { .statusCode(200) .and() .body(CoreMatchers.containsString( - "{\"errors\":[{\"message\":\"Validation error of type FieldUndefined: Field 'foo' in type 'TestPojo' is undefined @ 'foo/foo'\",\"locations\":[{\"line\":7,\"column\":5}],\"extensions\":{\"classification\":\"ValidationError\"}}],\"data\":null}")); + "{\"errors\":[{\"message\":\"Validation error (FieldUndefined@[foo/foo]) : Field 'foo' in type 'TestPojo' is undefined\",\"locations\":[{\"line\":7,\"column\":5}],\"extensions\":{\"classification\":\"ValidationError\"}}],\"data\":null}")); LOG.info("Initial request done"); // Make a code change (add a field) @@ -94,7 +94,7 @@ public void testAddAndRemoveFieldChange() { .statusCode(200) .and() .body(CoreMatchers.containsString( - "{\"errors\":[{\"message\":\"Validation error of type FieldUndefined: Field 'foo' in type 'TestPojo' is undefined @ 'foo/foo'\",\"locations\":[{\"line\":7,\"column\":5}],\"extensions\":{\"classification\":\"ValidationError\"}}],\"data\":null}")); + "{\"errors\":[{\"message\":\"Validation error (FieldUndefined@[foo/foo]) : Field 'foo' in type 'TestPojo' is undefined\",\"locations\":[{\"line\":7,\"column\":5}],\"extensions\":{\"classification\":\"ValidationError\"}}],\"data\":null}")); LOG.info("Code change done - field removed"); diff --git a/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/InstrumentationTest.java b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/InstrumentationTest.java new file mode 100644 index 0000000000000..fdd4ea5f203e7 --- /dev/null +++ b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/InstrumentationTest.java @@ -0,0 +1,84 @@ +package io.quarkus.smallrye.graphql.deployment; + +import static io.quarkus.smallrye.graphql.deployment.AbstractGraphQLTest.getPropertyAsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.nullValue; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.microprofile.graphql.GraphQLApi; +import org.eclipse.microprofile.graphql.Query; +import org.eclipse.microprofile.graphql.Source; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; +import io.restassured.RestAssured; +import io.smallrye.common.annotation.NonBlocking; + +public class InstrumentationTest extends AbstractGraphQLTest { + + @RegisterExtension + static QuarkusUnitTest test = new QuarkusUnitTest() + .withApplicationRoot((jar) -> jar + .addClasses(FooApi.class, Foo.class) + .addAsResource(new StringAsset(getPropertyAsString(configuration())), "application.properties") + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")); + + @Test + public void testQueryDepth() { + String query = getPayload("{ foo { nestedFoo { nestedFoo { message}}}}"); + RestAssured.given() + .body(query) + .contentType(MEDIATYPE_JSON) + .post("/graphql/") + .then() + .log().all() + .assertThat() + .body("errors[0].message", equalTo("maximum query depth exceeded 4 > 1")) + .body("data", nullValue()); + } + + private static Map configuration() { + Map m = new HashMap<>(); + m.put("quarkus.smallrye-graphql.events.enabled", "true"); + m.put("quarkus.smallrye-graphql.instrumentation-query-depth", "1"); + return m; + } + + public static class Foo { + + private String message; + + public Foo(String foo) { + this.message = foo; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + } + + @GraphQLApi + public static class FooApi { + + @Query + @NonBlocking + public Foo foo() { + return new Foo("foo"); + } + + public Foo nestedFoo(@Source Foo foo) { + return new Foo("foo"); + } + } + +} diff --git a/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfig.java b/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfig.java index f5aae3013b908..fa340d09cf5a2 100644 --- a/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfig.java +++ b/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfig.java @@ -152,17 +152,59 @@ public class SmallRyeGraphQLConfig { public Optional> unwrapExceptions; /** - * SmallRye GraphQL UI configuration + * Subprotocols that should be supported by the server for graphql-over-websocket use cases. + * Allowed subprotocols are "graphql-ws" and "graphql-transport-ws". By default, both are enabled. */ @ConfigItem - @ConfigDocSection - public SmallRyeGraphQLUIConfig ui; + public Optional> websocketSubprotocols; /** - * Subprotocols that should be supported by the server for graphql-over-websocket use cases. - * Allowed subprotocols are "graphql-ws" and "graphql-transport-ws". By default, both are enabled. + * Set to true if ignored chars should be captured as AST nodes. Default to false */ @ConfigItem - public Optional> websocketSubprotocols; + public Optional parserCaptureIgnoredChars; + + /** + * Set to true if `graphql.language.Comment`s should be captured as AST nodes + */ + @ConfigItem + public Optional parserCaptureLineComments; + + /** + * Set to true true if `graphql.language.SourceLocation`s should be captured as AST nodes. Default to true + */ + @ConfigItem + public Optional parserCaptureSourceLocation; + /** + * The maximum number of raw tokens the parser will accept, after which an exception will be thrown. Default to 15000 + */ + @ConfigItem + public Optional parserMaxTokens; + + /** + * The maximum number of raw whitespace tokens the parser will accept, after which an exception will be thrown. Default to + * 200000 + */ + @ConfigItem + public Optional parserMaxWhitespaceTokens; + + /** + * Abort a query if the total number of data fields queried exceeds the defined limit. Default to no limit + */ + @ConfigItem + public Optional instrumentationQueryComplexity; + + /** + * Abort a query if the total depth of the query exceeds the defined limit. Default to no limit + */ + @ConfigItem + public Optional instrumentationQueryDepth; + + /** + * SmallRye GraphQL UI configuration + */ + @ConfigItem + @ConfigDocSection + public SmallRyeGraphQLUIConfig ui; } diff --git a/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfigMapping.java b/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfigMapping.java index 2625810641aaf..3c563b548b69c 100644 --- a/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfigMapping.java +++ b/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLConfigMapping.java @@ -49,6 +49,13 @@ private static Map relocations() { mapKey(relocations, ConfigKey.LOG_PAYLOAD, QUARKUS_LOG_PAYLOAD); mapKey(relocations, ConfigKey.FIELD_VISIBILITY, QUARKUS_FIELD_VISIBILITY); mapKey(relocations, ConfigKey.UNWRAP_EXCEPTIONS, QUARKUS_UNWRAP_EXCEPTIONS); + mapKey(relocations, ConfigKey.PARSER_CAPTURE_IGNORED_CHARS, QUARKUS_PARSER_CAPTURE_IGNORED_CHARS); + mapKey(relocations, ConfigKey.PARSER_CAPTURE_LINE_COMMENTS, QUARKUS_PARSER_CAPTURE_LINE_COMMENTS); + mapKey(relocations, ConfigKey.PARSER_CAPTURE_SOURCE_LOCATION, QUARKUS_PARSER_CAPTURE_SOURCE_LOCATION); + mapKey(relocations, ConfigKey.PARSER_MAX_TOKENS, QUARKUS_PARSER_MAX_TOKENS); + mapKey(relocations, ConfigKey.PARSER_MAX_WHITESPACE_TOKENS, QUARKUS_PARSER_MAX_WHITESPACE_TOKENS); + mapKey(relocations, ConfigKey.INSTRUMENTATION_QUERY_COMPLEXITY, QUARKUS_INSTRUMENTATION_QUERY_COMPLEXITY); + mapKey(relocations, ConfigKey.INSTRUMENTATION_QUERY_DEPTH, QUARKUS_INSTRUMENTATION_QUERY_DEPTH); mapKey(relocations, SHOW_ERROR_MESSAGE, QUARKUS_SHOW_ERROR_MESSAGE); mapKey(relocations, HIDE_ERROR_MESSAGE, QUARKUS_HIDE_ERROR_MESSAGE); return Collections.unmodifiableMap(relocations); @@ -75,5 +82,12 @@ private static void mapKey(Map map, String quarkusKey, String ot private static final String QUARKUS_LOG_PAYLOAD = "quarkus.smallrye-graphql.log-payload"; private static final String QUARKUS_FIELD_VISIBILITY = "quarkus.smallrye-graphql.field-visibility"; private static final String QUARKUS_UNWRAP_EXCEPTIONS = "quarkus.smallrye-graphql.unwrap-exceptions"; + private static final String QUARKUS_PARSER_CAPTURE_IGNORED_CHARS = "quarkus.smallrye-graphql.parser-capture-ignored-chars"; + private static final String QUARKUS_PARSER_CAPTURE_LINE_COMMENTS = "quarkus.smallrye-graphql.parser-capture-line-comments"; + private static final String QUARKUS_PARSER_CAPTURE_SOURCE_LOCATION = "quarkus.smallrye-graphql.parser-capture-source-location"; + private static final String QUARKUS_PARSER_MAX_TOKENS = "quarkus.smallrye-graphql.parser-max-tokens"; + private static final String QUARKUS_PARSER_MAX_WHITESPACE_TOKENS = "quarkus.smallrye-graphql.parser-max-whitespace-tokens"; + private static final String QUARKUS_INSTRUMENTATION_QUERY_COMPLEXITY = "quarkus.smallrye-graphql.instrumentation-query-complexity"; + private static final String QUARKUS_INSTRUMENTATION_QUERY_DEPTH = "quarkus.smallrye-graphql.instrumentation-query-depth"; } diff --git a/jakarta/rewrite.yml b/jakarta/rewrite.yml index f8c0faf950844..15609e36bfdbc 100644 --- a/jakarta/rewrite.yml +++ b/jakarta/rewrite.yml @@ -451,7 +451,7 @@ recipeList: newValue: 6.0.0-RC4 - org.openrewrite.maven.ChangePropertyValue: key: smallrye-graphql.version - newValue: 2.0.0.RC6 + newValue: 2.0.0.RC7 - org.openrewrite.maven.ChangePropertyValue: key: smallrye-health.version newValue: 4.0.0-RC2 diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/createNewNullNamedHero/output2.json b/tcks/microprofile-graphql/src/main/resources/overrides/createNewNullNamedHero/output2.json new file mode 100644 index 0000000000000..068ed46a76cae --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/createNewNullNamedHero/output2.json @@ -0,0 +1,14 @@ +{ + "errors": [ + { + "message": "Validation error (WrongType@[createNewHero]) : argument 'hero.name' with value 'NullValue{}' must not be null", + "locations": [ + { + "line": 2, + "column": 19 + } + ] + } + ], + "data": null +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/createNewUnnamedHero/output2.json b/tcks/microprofile-graphql/src/main/resources/overrides/createNewUnnamedHero/output2.json new file mode 100644 index 0000000000000..ea8331aa708a1 --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/createNewUnnamedHero/output2.json @@ -0,0 +1,14 @@ +{ + "errors": [ + { + "message": "Validation error (WrongType@[createNewHero]) : argument 'hero' with value 'ObjectValue{objectFields=[ObjectField{name='realName', value=StringValue{value='John Smith'}}]}' is missing required fields '[name]'", + "locations": [ + { + "line": 2, + "column": 19 + } + ] + } + ], + "data": null +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidDataTypeValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidDataTypeValue/output3.json new file mode 100644 index 0000000000000..5f9b23eab9939 --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidDataTypeValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'powerLevel' with value 'StringValue{value='Unlimited'}' is not a valid 'Int'", + "locations": [ + { + "line": 2, + "column": 37 + } + ] + } + ], + "data": { + "updateItemPowerLevel": null + } +} diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidEnumValue/output2.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidEnumValue/output2.json new file mode 100644 index 0000000000000..a667fb5d6128f --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidEnumValue/output2.json @@ -0,0 +1,14 @@ +{ + "errors": [ + { + "message": "Validation error (WrongType@[createNewHero]) : argument 'hero.tshirtSize' with value 'EnumValue{name='XLTall'}' is not a valid 'ShirtSize' - Expected enum literal value not in allowable values - 'EnumValue{name='XLTall'}'.", + "locations": [ + { + "line": 3, + "column": 19 + } + ] + } + ], + "data": null +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateFormattedValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateFormattedValue/output3.json new file mode 100644 index 0000000000000..4fcff2375ff9f --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateFormattedValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'date' with value 'StringValue{value='Today'}' is not a valid 'Date'", + "locations": [ + { + "line": 2, + "column": 49 + } + ] + } + ], + "data": { + "checkInWithCorrectDateFormat": null + } +} diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeFormattedValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeFormattedValue/output3.json new file mode 100644 index 0000000000000..34be441fabf1d --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeFormattedValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'dateTime' with value 'StringValue{value='Today'}' is not a valid 'DateTime'", + "locations": [ + { + "line": 2, + "column": 48 + } + ] + } + ], + "data": { + "battleWithCorrectDateFormat": null + } +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeValue/output3.json new file mode 100644 index 0000000000000..af2c0dc4eb76b --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateTimeValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'dateTime' with value 'StringValue{value='Today'}' is not a valid 'DateTime'", + "locations": [ + { + "line": 2, + "column": 27 + } + ] + } + ], + "data": { + "battle": null + } +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateValue/output3.json new file mode 100644 index 0000000000000..49fac88d88889 --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalDateValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'date' with value 'StringValue{value='Today'}' is not a valid 'Date'", + "locations": [ + { + "line": 2, + "column": 28 + } + ] + } + ], + "data": { + "checkIn": null + } +} diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeFormattedValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeFormattedValue/output3.json new file mode 100644 index 0000000000000..dbd8088308d7d --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeFormattedValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'time' with value 'StringValue{value='Today'}' is not a valid 'Time'", + "locations": [ + { + "line": 2, + "column": 57 + } + ] + } + ], + "data": { + "startPatrollingWithCorrectDateFormat": null + } +} diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeValue/output3.json b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeValue/output3.json new file mode 100644 index 0000000000000..78d6bfd37101a --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/invalidLocalTimeValue/output3.json @@ -0,0 +1,16 @@ +{ + "errors": [ + { + "message": "argument 'time' with value 'StringValue{value='Today'}' is not a valid 'Time'", + "locations": [ + { + "line": 2, + "column": 36 + } + ] + } + ], + "data": { + "startPatrolling": null + } +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/unknownField/output2.json b/tcks/microprofile-graphql/src/main/resources/overrides/unknownField/output2.json new file mode 100644 index 0000000000000..6715517fca358 --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/unknownField/output2.json @@ -0,0 +1,14 @@ +{ + "errors": [ + { + "message": "Validation error (FieldUndefined@[allHeroes/weaknesses]) : Field 'weaknesses' in type 'SuperHero' is undefined", + "locations": [ + { + "line": 4, + "column": 5 + } + ] + } + ], + "data": null +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/unknownMutation/output2.json b/tcks/microprofile-graphql/src/main/resources/overrides/unknownMutation/output2.json new file mode 100644 index 0000000000000..c63695ca06309 --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/unknownMutation/output2.json @@ -0,0 +1,14 @@ +{ + "errors": [ + { + "message": "Validation error (FieldUndefined@[createNewHeroCat]) : Field 'createNewHeroCat' in type 'Mutation' is undefined", + "locations": [ + { + "line": 2, + "column": 5 + } + ] + } + ], + "data": null +} \ No newline at end of file diff --git a/tcks/microprofile-graphql/src/main/resources/overrides/unknownQuery/output2.json b/tcks/microprofile-graphql/src/main/resources/overrides/unknownQuery/output2.json new file mode 100644 index 0000000000000..474c2b5d5cc76 --- /dev/null +++ b/tcks/microprofile-graphql/src/main/resources/overrides/unknownQuery/output2.json @@ -0,0 +1,14 @@ +{ + "errors": [ + { + "message": "Validation error (FieldUndefined@[allHeroesWhoLikeIceCream]) : Field 'allHeroesWhoLikeIceCream' in type 'Query' is undefined", + "locations": [ + { + "line": 2, + "column": 3 + } + ] + } + ], + "data": null +}