package graphql.validation.rules; import graphql.schema.GraphQLEnumType; import graphql.schema.GraphQLInterfaceType; import graphql.schema.GraphQLList; import graphql.schema.GraphQLObjectType; import graphql.schema.GraphQLSchema; import graphql.schema.GraphQLTypeReference; import graphql.schema.GraphQLUnionType; import graphql.schema.TypeResolver; import static graphql.Scalars.GraphQLBoolean; import static graphql.Scalars.GraphQLInt; import static graphql.Scalars.GraphQLString; import static graphql.schema.GraphQLArgument.newArgument; import static graphql.schema.GraphQLEnumType.newEnum; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLInterfaceType.newInterface; import static graphql.schema.GraphQLObjectType.newObject; import static graphql.schema.GraphQLSchema.newSchema; import static graphql.schema.GraphQLUnionType.newUnionType; public class Harness { private static TypeResolver dummyTypeResolve = env -> null; public static GraphQLInterfaceType Being = newInterface() .name("Being") .field(newFieldDefinition() .name("name") .type(GraphQLString)) .typeResolver(dummyTypeResolve) .build(); public static GraphQLInterfaceType Pet = newInterface() .name("Pet") .field(newFieldDefinition() .name("name") .type(GraphQLString)) .typeResolver(dummyTypeResolve) .build(); public static GraphQLEnumType DogCommand = newEnum() .name("DogCommand") .value("SIT") .value("HEEL") .value("DOWN") .build(); public static GraphQLObjectType Dog = newObject() .name("Dog") .field(newFieldDefinition() .name("name") .type(GraphQLString)) .field(newFieldDefinition() .name("nickName") .type(GraphQLString)) .field(newFieldDefinition() .name("barkVolume") .type(GraphQLInt)) .field(newFieldDefinition() .name("barks") .type(GraphQLBoolean)) .field(newFieldDefinition() .name("doesKnowCommand") .type(GraphQLBoolean) .argument(newArgument() .name("dogCommand") .type(DogCommand))) .field(newFieldDefinition() .name("isHousetrained") .type(GraphQLBoolean) .argument(newArgument() .name("atOtherHomes") .type(GraphQLBoolean) .defaultValue(true))) .field(newFieldDefinition() .name("isAtLocation") .type(GraphQLBoolean) .argument(newArgument() .name("x") .type(GraphQLInt)) .argument(newArgument() .name("y") .type(GraphQLInt))) .withInterface(Being) .withInterface(Pet) .build(); public static GraphQLEnumType FurColor = newEnum() .name("FurColor") .value("BROWN") .value("BLACK") .value("TAN") .value("SPOTTED") .build(); public static GraphQLObjectType Cat = newObject() .name("Cat") .field(newFieldDefinition() .name("name") .type(GraphQLString)) .field(newFieldDefinition() .name("nickName") .type(GraphQLString)) .field(newFieldDefinition() .name("meows") .type(GraphQLBoolean)) .field(newFieldDefinition() .name("meowVolume") .type(GraphQLInt)) .field(newFieldDefinition() .name("furColor") .type(FurColor)) .withInterfaces(Being, Pet) .build(); public static GraphQLUnionType CatOrDog = newUnionType() .name("CatOrDog") .possibleTypes(Dog, Cat) .typeResolver(env -> null) .build(); public static GraphQLInterfaceType Intelligent = newInterface() .name("Intelligent") .field(newFieldDefinition() .name("iq") .type(GraphQLInt)) .typeResolver(dummyTypeResolve) .build(); public static GraphQLObjectType Human = newObject() .name("Human") .field(newFieldDefinition() .name("name") .type(GraphQLString)) .field(newFieldDefinition() .name("pets") .type(new GraphQLList(Pet))) .field(newFieldDefinition() .name("relatives") .type(new GraphQLList(new GraphQLTypeReference("Human")))) .field(newFieldDefinition() .name("iq") .type(GraphQLInt)) .withInterfaces(Being, Intelligent) .build(); public static GraphQLObjectType Alien = newObject() .name("Alien") .field(newFieldDefinition() .name("name") .type(GraphQLString)) .field(newFieldDefinition() .name("numEyes") .type(GraphQLInt)) .field(newFieldDefinition() .name("iq") .type(GraphQLInt)) .withInterfaces(Being, Intelligent) .build(); public static GraphQLUnionType DogOrHuman = newUnionType() .name("DogOrHuman") .possibleTypes(Dog, Human) .typeResolver(dummyTypeResolve) .build(); public static GraphQLUnionType HumanOrAlien = newUnionType() .name("HumanOrAlien") .possibleTypes(Alien, Human) .typeResolver(dummyTypeResolve) .build(); public static GraphQLObjectType QueryRoot = newObject() .name("QueryRoot") .field(newFieldDefinition() .name("alien") .type(Alien)) .field(newFieldDefinition() .name("dog") .type(Dog)) .field(newFieldDefinition() .name("cat") .type(Cat)) .field(newFieldDefinition() .name("pet") .type(Pet)) .field(newFieldDefinition() .name("catOrDog") .type(CatOrDog)) .field(newFieldDefinition() .name("dogOrHuman") .type(DogOrHuman)) .field(newFieldDefinition() .name("humanOrAlien") .type(HumanOrAlien)) .build(); public static GraphQLSchema Schema = newSchema() .query(QueryRoot) .build(); }