@Override public void checkArgument(Argument argument) { GraphQLDirective directiveDef = getValidationContext().getDirective(); if (directiveDef != null) { GraphQLArgument directiveArgument = directiveDef.getArgument(argument.getName()); if (directiveArgument == null) { String message = String.format("Unknown directive argument %s", argument.getName()); addError(ValidationErrorType.UnknownDirective, argument.getSourceLocation(), message); } return; } GraphQLFieldDefinition fieldDef = getValidationContext().getFieldDef(); if (fieldDef == null) return; GraphQLArgument fieldArgument = fieldDef.getArgument(argument.getName()); if (fieldArgument == null) { String message = String.format("Unknown field argument %s", argument.getName()); addError(ValidationErrorType.UnknownArgument, argument.getSourceLocation(), message); } } }
actualDataFetcher = new RelayMutationMethodDataFetcher(method, args, relay.getArgument("input").getType(), relay.getType());
@Test public void noArgMutation() { GraphQLObjectType object = GraphQLAnnotations.object(TestObject.class); GraphQLFieldDefinition doSomething = object.getFieldDefinition("doSomething"); assertNotNull(doSomething); assertEquals(doSomething.getArguments().size(), 1); GraphQLInputType input = doSomething.getArgument("input").getType(); assertTrue(input instanceof GraphQLNonNull); GraphQLType inputType = ((graphql.schema.GraphQLNonNull) input).getWrappedType(); assertTrue(inputType instanceof GraphQLInputObjectType); assertTrue(doSomething.getType() instanceof GraphQLObjectType); GraphQLObjectType returnType = (GraphQLObjectType) doSomething.getType(); assertNotNull(returnType.getFieldDefinition("getI")); assertNotNull(returnType.getFieldDefinition("clientMutationId")); GraphQLSchema schema = GraphQLSchema.newSchema().query(object).mutation(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).queryExecutionStrategy(new EnhancedExecutionStrategy()).build(); ExecutionResult result = graphQL.execute("mutation { doSomething(input: {clientMutationId: \"1\"}) { getI clientMutationId } }", new TestObject()); assertEquals(result.getErrors().size(), 0); Map<String, Object> returns = (Map<String, Object>) ((Map<String, Object>) result.getData()).get("doSomething"); assertEquals(returns.get("getI"), 0); assertEquals(returns.get("clientMutationId"), "1"); }
@Override public DataFetcher build() { GraphQLDataFetcher dataFetcher = method.getAnnotation(GraphQLDataFetcher.class); DataFetcher actualDataFetcher; if (dataFetcher == null && method.getAnnotation(GraphQLBatched.class) != null) { actualDataFetcher = new BatchedMethodDataFetcher(method, typeFunction, container); } else if (dataFetcher == null) { actualDataFetcher = new MethodDataFetcher(method, typeFunction, container); } else { actualDataFetcher = dataFetcherConstructor.constructDataFetcher(method.getName(), dataFetcher); } if (method.isAnnotationPresent(GraphQLRelayMutation.class) && relayFieldDefinition != null) { actualDataFetcher = new RelayMutationMethodDataFetcher(method, args, relayFieldDefinition.getArgument("input").getType(), relayFieldDefinition.getType()); } if (isConnection){ actualDataFetcher = getConnectionDataFetcher(method.getAnnotation(GraphQLConnection.class), actualDataFetcher); } return actualDataFetcher; } }
GraphQLInputType input = doSomethingElse.getArgument("input").getType(); assertTrue(input instanceof GraphQLNonNull); GraphQLType inputType = ((graphql.schema.GraphQLNonNull) input).getWrappedType();
GraphQLFieldDefinition graphQlQuery = graphQlQueries.get(i); if (graphQlQuery.getArgument(GraphQLId.RELAY_ID_FIELD_NAME) != null && GraphQLUtils.isRelayId(graphQlQuery.getArgument(GraphQLId.RELAY_ID_FIELD_NAME)) && query.getResolver(GraphQLId.RELAY_ID_FIELD_NAME) != null) {
@Test public void argMutation() { GraphQLObjectType object = GraphQLAnnotations.object(TestObject.class); GraphQLFieldDefinition doSomethingElse = object.getFieldDefinition("doSomethingElse"); assertNotNull(doSomethingElse); assertEquals(doSomethingElse.getArguments().size(), 1); GraphQLInputType input = doSomethingElse.getArgument("input").getType(); assertTrue(input instanceof GraphQLNonNull); GraphQLType inputType = ((graphql.schema.GraphQLNonNull) input).getWrappedType(); assertTrue(inputType instanceof GraphQLInputObjectType); GraphQLInputObjectType inputType_ = (GraphQLInputObjectType) inputType; assertNotNull(inputType_.getField("a")); assertNotNull(inputType_.getField("b")); assertEquals(inputType_.getField("a").getDescription(), "A"); assertTrue(doSomethingElse.getType() instanceof GraphQLObjectType); GraphQLObjectType returnType = (GraphQLObjectType) doSomethingElse.getType(); assertNotNull(returnType.getFieldDefinition("getI")); assertNotNull(returnType.getFieldDefinition("clientMutationId")); GraphQLSchema schema = GraphQLSchema.newSchema().query(object).mutation(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).queryExecutionStrategy(new EnhancedExecutionStrategy()).build(); ExecutionResult result = graphQL.execute("mutation { doSomethingElse(input: {a: 0, b: 1, clientMutationId: \"1\"}) { getI clientMutationId } }", new TestObject()); assertEquals(result.getErrors().size(), 0); Map<String, Object> returns = (Map<String, Object>) ((Map<String, Object>) result.getData()).get("doSomethingElse"); assertEquals(returns.get("getI"), -1); assertEquals(returns.get("clientMutationId"), "1"); }
@Test public void complexInputObjectArgument() { GraphQLObjectType object = GraphQLAnnotations.object(TestObjectInput.class); GraphQLArgument argument = object.getFieldDefinition("test2").getArgument("arg"); assertTrue(argument.getType() instanceof GraphQLInputObjectType); assertEquals(argument.getName(), "arg"); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{ test2(arg: {inputs:[{ a:\"ok\", b:2 }]}, other:0) }", new TestObjectInput()); assertTrue(result.getErrors().isEmpty()); Map<String, Object> v = result.getData(); assertEquals(v.get("test2"), "ok"); }
@Test public void inputObjectArgument() { GraphQLObjectType object = GraphQLAnnotations.object(TestObjectInput.class); GraphQLArgument argument = object.getFieldDefinition("test").getArgument("arg"); assertTrue(argument.getType() instanceof GraphQLInputObjectType); assertEquals(argument.getName(), "arg"); GraphQLSchema schema = newSchema().query(object).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{ test( other:0,arg: { a:\"ok\", b:2 }) }", new TestObjectInput()); assertTrue(result.getErrors().isEmpty()); Map<String, Object> v = (Map<String, Object>) result.getData(); assertEquals(v.get("test"), "ok"); }
@Test public void testQueryArguments() { GraphQLSchema schema = GraphQLSchemaBuilder.newBuilder().registerGraphQLControllerObjects(ImmutableList.<Object> of(new TestController())).build(); GraphQLFieldDefinition queryType = schema.getQueryType().getFieldDefinition("testQueryArguments"); assertEquals("testQueryArguments", queryType.getName()); assertEquals(Scalars.GraphQLString, queryType.getArgument("string").getType()); assertEquals(Scalars.GraphQLInt, queryType.getArgument("int").getType()); assertEquals(GraphQLInputObjectType.class, queryType.getArgument("test").getType().getClass()); assertEquals("RenamedTestInputType_Input", queryType.getArgument("test").getType().getName()); }
@Override public void checkArgument(Argument argument) { GraphQLDirective directiveDef = getValidationContext().getDirective(); if (directiveDef != null) { GraphQLArgument directiveArgument = directiveDef.getArgument(argument.getName()); if (directiveArgument == null) { String message = String.format("Unknown directive argument %s", argument.getName()); addError(ValidationErrorType.UnknownDirective, argument.getSourceLocation(), message); } return; } GraphQLFieldDefinition fieldDef = getValidationContext().getFieldDef(); if (fieldDef == null) return; GraphQLArgument fieldArgument = fieldDef.getArgument(argument.getName()); if (fieldArgument == null) { String message = String.format("Unknown field argument %s", argument.getName()); addError(ValidationErrorType.UnknownArgument, argument.getSourceLocation(), message); } } }
@Test public void testInputAndOutputWithSameNameWithChildrenWithSameName() { // arrange + act GraphQLSchema schema = newSchema().query(GraphQLAnnotations.object(QuerySameNameWithChildren.class)).build(); // assert assertEquals(schema.getQueryType().getFieldDefinition("getAout").getType().getName(), "A"); assertEquals(schema.getQueryType().getFieldDefinition("getAout").getType().getClass(), GraphQLObjectType.class); assertEquals(schema.getQueryType().getFieldDefinition("getBout").getType().getName(), "B"); assertEquals(schema.getQueryType().getFieldDefinition("getBout").getType().getClass(), GraphQLObjectType.class); assertEquals(schema.getQueryType().getFieldDefinition("getA").getArgument("input").getType().getName(), "InputA"); assertEquals(schema.getQueryType().getFieldDefinition("getA").getArgument("input").getType().getClass(), GraphQLInputObjectType.class); assertEquals(schema.getQueryType().getFieldDefinition("getB").getArgument("input").getType().getClass(), GraphQLInputObjectType.class); } }
@Test public void testInputAndOutputWithSameName() { // arrange + act GraphQLSchema schema = newSchema().query(GraphQLAnnotations.object(QueryInputAndOutput.class)).build(); // assert assertEquals(schema.getQueryType().getFieldDefinition("getHero").getType().getName(), "hero"); assertEquals(schema.getQueryType().getFieldDefinition("getString").getArgument("input").getType().getName(), "Inputhero"); assertEquals(((GraphQLInputObjectType) schema.getQueryType().getFieldDefinition("getString") .getArgument("input").getType()).getField("skill").getType().getName(), "InputSkill"); }
@Test public void testInputAndOutputSameClass() { // arrange + act GraphQLSchema schema = newSchema().query(GraphQLAnnotations.object(QueryInputAndOutput2.class)).build(); // assert assertEquals(schema.getQueryType().getFieldDefinition("getSkill").getType().getName(), "Skill"); assertEquals(schema.getQueryType().getFieldDefinition("getA").getArgument("skill").getType().getName(), "InputSkill"); }
@Test public void testControllerObjectScoping() { GraphQLSchema schema = GraphQLSchemaBuilder.newBuilder() .registerTypeFactory(new JacksonTypeFactory(new ObjectMapper())) .registerGraphQLControllerObjects(ImmutableList.<Object> of(new ControllerScoping())) .build(); // validate query scope GraphQLFieldDefinition queryScope = schema.getQueryType().getFieldDefinition("QueriesScope"); assertNotNull(queryScope); assertEquals(GraphQLObjectType.class, queryScope.getType().getClass()); GraphQLObjectType queryObject = (GraphQLObjectType) queryScope.getType(); GraphQLFieldDefinition query1Field = queryObject.getFieldDefinition("query1"); assertNotNull(query1Field); assertNotNull(query1Field.getArgument("param1")); assertEquals(Scalars.GraphQLString, query1Field.getArgument("param1").getType()); // validate mutation scope GraphQLFieldDefinition mutationScope = schema.getMutationType().getFieldDefinition("MutationsScope"); assertNotNull(mutationScope); assertEquals(GraphQLObjectType.class, mutationScope.getType().getClass()); GraphQLObjectType mutationObject = (GraphQLObjectType) mutationScope.getType(); GraphQLFieldDefinition mutationField = mutationObject.getFieldDefinition("mutation1"); assertNotNull(mutationField); assertNotNull(mutationField.getArgument("param1")); assertEquals(Scalars.GraphQLString, mutationField.getArgument("param1").getType()); }
@SuppressWarnings("unchecked") @Test public void testMutation() { GraphQLSchema schema = GraphQLSchemaBuilder.newBuilder() .registerTypeFactory(new JacksonTypeFactory(new ObjectMapper())) .registerGraphQLControllerObjects(ImmutableList.<Object> of(new TestController())) .build(); GraphQLFieldDefinition mutationType = schema.getMutationType().getFieldDefinition("setName"); assertEquals("setName", mutationType.getName()); assertEquals(Scalars.GraphQLString, mutationType.getArgument("name").getType()); ExecutionResult result = new GraphQL(schema).execute("mutation M { setName(name: \"The new name\") }"); String newName = ((Map<String, String>) result.getData()).get("setName"); assertEquals(0, result.getErrors().size()); assertEquals("The new name", newName); result = new GraphQL(schema).execute("query Q { getName }"); newName = ((Map<String, String>) result.getData()).get("getName"); assertEquals(0, result.getErrors().size()); assertEquals("The new name", newName); }