private void checkObjectImplementsInterface(GraphQLObjectType objectType, GraphQLInterfaceType interfaceType, SchemaValidationErrorCollector validationErrorCollector) { List<GraphQLFieldDefinition> fieldDefinitions = interfaceType.getFieldDefinitions(); for (GraphQLFieldDefinition interfaceFieldDef : fieldDefinitions) { GraphQLFieldDefinition objectFieldDef = objectType.getFieldDefinition(interfaceFieldDef.getName()); if (objectFieldDef == null) { validationErrorCollector.addError( error(format("object type '%s' does not implement interface '%s' because field '%s' is missing", objectType.getName(), interfaceType.getName(), interfaceFieldDef.getName()))); } else { checkFieldTypeCompatibility(objectType, interfaceType, validationErrorCollector, interfaceFieldDef, objectFieldDef); } } }
@Test public void interfaceInheritance() { GraphQLObjectType object = GraphQLAnnotations.object(IfaceImpl.class); assertEquals(object.getFieldDefinitions().size(), 1); assertEquals(object.getFieldDefinition("field").getType(), GraphQLString); }
public static boolean isRelayConnectionType(GraphQLType type) { return type instanceof GraphQLObjectType && !type.getName().equals(CONNECTION) && type.getName().endsWith(CONNECTION) && ((GraphQLObjectType) type).getFieldDefinition(EDGES) != null && ((GraphQLObjectType) type).getFieldDefinition(PAGE_INFO) != null; }
@Test public void inheritGraphQLField() { GraphQLObjectType object = GraphQLAnnotations.object(InheritGraphQLFieldTest.class); assertNotNull(object.getFieldDefinition("on")); assertNull(object.getFieldDefinition("off")); assertNotNull(object.getFieldDefinition("inheritedOn")); assertNull(object.getFieldDefinition("forcedOff")); }
@Test public void objectCreation_nameIsCorrect() { // Act GraphQLObjectType object = GraphQLAnnotations.object(NameTest.class); // Assert assertNotNull(object.getFieldDefinition("awesome")); assertNotNull(object.getFieldDefinition("isCool")); assertNotNull(object.getFieldDefinition("yarinnn")); assertNotNull(object.getFieldDefinition("getX")); assertNotNull(object.getFieldDefinition("y")); assertNotNull(object.getFieldDefinition("daniel")); }
@Test public void customTypeFunction() { GraphQLObjectType object = GraphQLAnnotations.object(TestCustomTypeFunction.class); assertEquals(object.getFieldDefinition("id").getType(), GraphQLString); }
private void assertGenericMapTypeMapping(String name, GraphQLOutputType expectedValueType, GraphQLOutputType graphQLOutputType) { GraphQLList listType = (GraphQLList) graphQLOutputType; // verify we contstructed an object from the map with the enum values as fields // and their type the expected value type assertEquals(GraphQLList.class, listType.getClass()); GraphQLObjectType objectType = (GraphQLObjectType) listType.getWrappedType(); assertEquals(name, objectType.getName()); assertNotNull(objectType.getFieldDefinition(MapMapper.KEY_NAME)); assertNotNull(objectType.getFieldDefinition(MapMapper.VALUE_NAME)); assertEquals(expectedValueType.getClass(), objectType.getFieldDefinition(MapMapper.KEY_NAME).getType().getClass()); assertEquals(expectedValueType.getClass(), objectType.getFieldDefinition(MapMapper.VALUE_NAME).getType().getClass()); }
@Test public void parametrizedArg() { GraphQLObjectType object = GraphQLAnnotations.object(ParametrizedArgsTest.class); GraphQLInputType t = object.getFieldDefinition("first").getArguments().get(0).getType(); assertTrue(t instanceof GraphQLList); assertEquals(((GraphQLList) t).getWrappedType(), Scalars.GraphQLString); }
@Test public void recursiveTypes() throws Exception { ProcessingElementsContainer container = testedProcessingElementsContainer(); GraphQLType type = container.getDefaultTypeFunction().buildType(Class1.class, Class2.class.getField("class1").getAnnotatedType(),container); GraphQLFieldDefinition class1class2 = ((GraphQLObjectType) type).getFieldDefinition("class2"); assertNotNull(class1class2); assertTrue(((GraphQLObjectType) class1class2.getType()).getFieldDefinition("class1").getType() instanceof GraphQLTypeReference); assertTrue(((GraphQLObjectType) class1class2.getType()).getFieldDefinition("class2").getType() instanceof GraphQLTypeReference); GraphQLAnnotations.instance = new GraphQLAnnotations(); }
@Test public void testCustomDataFetcherForField() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper(ImmutableList.<IGraphQLTypeMapper> builder() .add(new TestTypeMappingDataFetcher()) .addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()) .build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(ClassWithFieldDataFetcher.class); assertNotNull(objectType.getFieldDefinition("field1")); assertEquals(DefaultMethodDataFetcher.class, objectType.getFieldDefinition("field1").getDataFetcher().getClass()); }
@Test public void testDeprecated() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( ImmutableList.<IGraphQLTypeMapper> builder().addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken<TestDeprecratedClass>(){}.getType()); assertNotNull(objectType.getFieldDefinition("deprecatedField")); assertTrue(objectType.getFieldDefinition("deprecatedField").isDeprecated()); assertEquals("Old usage", objectType.getFieldDefinition("deprecatedField").getDeprecationReason()); assertTrue(objectType.getFieldDefinition("javaDeprecatedField").isDeprecated()); assertEquals("", objectType.getFieldDefinition("javaDeprecatedField").getDeprecationReason()); }
@Test public void testAbstractMethods() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( ImmutableList.<IGraphQLTypeMapper> builder().addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken<SubB>() { }.getType()); assertNotNull(objectType.getFieldDefinition("field1")); assertEquals("field1", objectType.getFieldDefinition("field1").getName()); assertEquals(Scalars.GraphQLInt, objectType.getFieldDefinition("field1").getType()); }
@Test public void customType() { GraphQLAnnotations.register(new UUIDTypeFunction()); GraphQLObjectType object = GraphQLAnnotations.object(TestCustomType.class); assertEquals(object.getFieldDefinition("id").getType(), GraphQLString); }
@Test public void testTypeMappingDataFetcher() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper(ImmutableList.<IGraphQLTypeMapper> builder() .add(new TestTypeMappingDataFetcher()) .addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()) .build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(TestType.class); assertNotNull(objectType.getFieldDefinition("myfield")); }
@SuppressWarnings("serial") @Test public void testTypeConverterDetection() { IGraphQLObjectMapper graphQLObjectMapper = newGraphQLObjectMapper( ImmutableList.<IGraphQLTypeMapper> builder().add(new TestTypeMapper()).addAll(GraphQLSchemaBuilder.getDefaultTypeMappers()).build()); GraphQLObjectType objectType = (GraphQLObjectType) graphQLObjectMapper.getOutputType(new TypeToken<TypeConverterTest>(){}.getType()); assertEquals(AppendingTypeconverter.class, objectType.getFieldDefinition("someStrings").getDataFetcher().getClass()); }
@Test public void simpleConnection_buildSchema_TypeOfSimpleConnectionIsGraphQLList() throws Exception { GraphQLObjectType object = GraphQLAnnotations.object(MainConnection.class); GraphQLSchema schema = newSchema().query(object).build(); String objsTypeName = schema.getQueryType().getFieldDefinition("objs").getType().getName(); assertThat(objsTypeName, is("ObjChunk")); }
@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 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 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"); }