func TestIntrospection_IdentifiesDeprecatedFields(t *testing.T) { testType := graphql.NewObject(graphql.ObjectConfig{ Name: "TestType", Fields: graphql.FieldConfigMap{ "nonDeprecated": &graphql.FieldConfig{ Type: graphql.String, }, "deprecated": &graphql.FieldConfig{ Type: graphql.String, DeprecationReason: "Removed in 1.0", }, }, }) schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: testType, }) if err != nil { t.Fatalf("Error creating Schema: %v", err.Error()) } query := ` { __type(name: "TestType") { name fields(includeDeprecated: true) { name isDeprecated, deprecationReason } } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "__type": map[string]interface{}{ "name": "TestType", "fields": []interface{}{ map[string]interface{}{ "name": "nonDeprecated", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "deprecated", "isDeprecated": true, "deprecationReason": "Removed in 1.0", }, }, }, }, } result := g(t, graphql.Params{ Schema: schema, RequestString: query, }) if !testutil.ContainSubset(result.Data.(map[string]interface{}), expected.Data.(map[string]interface{})) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestSubset_ComplexMixed(t *testing.T) { super := map[string]interface{}{ "a": "1", "b": "2", "c": "3", "d": map[string]interface{}{ "aa": "11", "bb": "22", "cc": []interface{}{ "ttt", "rrr", "sss", }, }, "e": []interface{}{ "111", "222", "333", }, "f": []interface{}{ []interface{}{ "9999", "8888", "7777", }, []interface{}{ "6666", "5555", "4444", }, }, } sub := map[string]interface{}{ "c": "3", "d": map[string]interface{}{ "bb": "22", "cc": []interface{}{ "sss", }, }, "e": []interface{}{ "111", }, "f": []interface{}{ []interface{}{ "8888", "9999", }, []interface{}{ "4444", }, }, } if !testutil.ContainSubset(super, sub) { t.Fatalf("expected map to be subset of super, got false") } }
func TestSubset_Simple_Fail(t *testing.T) { super := map[string]interface{}{ "a": "1", "b": "2", "c": "3", } sub := map[string]interface{}{ "d": "3", } if testutil.ContainSubset(super, sub) { t.Fatalf("expected map to not be subset of super, got true") } }
func TestSubset_NestedSlice(t *testing.T) { super := map[string]interface{}{ "a": "1", "b": "2", "c": "3", "d": []interface{}{ "11", "22", }, } sub := map[string]interface{}{ "c": "3", "d": []interface{}{ "11", }, } if !testutil.ContainSubset(super, sub) { t.Fatalf("expected map to be subset of super, got false") } }
func TestSubset_NestedMap_Fail(t *testing.T) { super := map[string]interface{}{ "a": "1", "b": "2", "c": "3", "d": map[string]interface{}{ "aa": "11", "bb": "22", "cc": "33", }, } sub := map[string]interface{}{ "c": "3", "d": map[string]interface{}{ "dd": "44", }, } if testutil.ContainSubset(super, sub) { t.Fatalf("expected map to not be subset of super, got true") } }
func TestIntrospection_ExecutesAnInputObject(t *testing.T) { testInputObject := graphql.NewInputObject(graphql.InputObjectConfig{ Name: "TestInputObject", Fields: graphql.InputObjectConfigFieldMap{ "a": &graphql.InputObjectFieldConfig{ Type: graphql.String, DefaultValue: "foo", }, "b": &graphql.InputObjectFieldConfig{ Type: graphql.NewList(graphql.String), }, }, }) testType := graphql.NewObject(graphql.ObjectConfig{ Name: "TestType", Fields: graphql.FieldConfigMap{ "field": &graphql.FieldConfig{ Type: graphql.String, Args: graphql.FieldConfigArgument{ "complex": &graphql.ArgumentConfig{ Type: testInputObject, }, }, Resolve: func(p graphql.GQLFRParams) interface{} { return p.Args["complex"] }, }, }, }) schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: testType, }) if err != nil { t.Fatalf("Error creating Schema: %v", err.Error()) } query := ` { __schema { types { kind name inputFields { name type { ...TypeRef } defaultValue } } } } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name } } } } ` expectedDataSubSet := map[string]interface{}{ "__schema": map[string]interface{}{ "types": []interface{}{ map[string]interface{}{ "kind": "INPUT_OBJECT", "name": "TestInputObject", "inputFields": []interface{}{ map[string]interface{}{ "name": "a", "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "defaultValue": `"foo"`, }, map[string]interface{}{ "name": "b", "type": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, }, "defaultValue": nil, }, }, }, }, }, } result := g(t, graphql.Params{ Schema: schema, RequestString: query, }) if !testutil.ContainSubset(result.Data.(map[string]interface{}), expectedDataSubSet) { t.Fatalf("unexpected, result does not contain subset of expected data") } }
func TestIntrospection_ExecutesAnIntrospectionQuery(t *testing.T) { emptySchema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: graphql.NewObject(graphql.ObjectConfig{ Name: "QueryRoot", Fields: graphql.FieldConfigMap{ "onlyField": &graphql.FieldConfig{ Type: graphql.String, }, }, }), }) if err != nil { t.Fatalf("Error creating Schema: %v", err.Error()) } expectedDataSubSet := map[string]interface{}{ "__schema": map[string]interface{}{ "mutationType": nil, "queryType": map[string]interface{}{ "name": "QueryRoot", }, "types": []interface{}{ map[string]interface{}{ "kind": "OBJECT", "name": "QueryRoot", "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "OBJECT", "name": "__Schema", "fields": []interface{}{ map[string]interface{}{ "name": "types", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", }, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "queryType", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "mutationType", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "directives", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Directive", }, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, }, "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "OBJECT", "name": "__Type", "fields": []interface{}{ map[string]interface{}{ "name": "kind", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "ENUM", "name": "__TypeKind", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "name", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "description", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "fields", "args": []interface{}{ map[string]interface{}{ "name": "includeDeprecated", "type": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, "defaultValue": "false", }, }, "type": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Field", "ofType": nil, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "interfaces", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", "ofType": nil, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "possibleTypes", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", "ofType": nil, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "enumValues", "args": []interface{}{ map[string]interface{}{ "name": "includeDeprecated", "type": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, "defaultValue": "false", }, }, "type": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__EnumValue", "ofType": nil, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "inputFields", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__InputValue", "ofType": nil, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "ofType", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, }, "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "ENUM", "name": "__TypeKind", "fields": nil, "inputFields": nil, "interfaces": nil, "enumValues": []interface{}{ map[string]interface{}{ "name": "SCALAR", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "OBJECT", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "INTERFACE", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "UNION", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "ENUM", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "INPUT_OBJECT", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "LIST", "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "NON_NULL", "isDeprecated": false, "deprecationReason": nil, }, }, "possibleTypes": nil, }, map[string]interface{}{ "kind": "SCALAR", "name": "String", "fields": nil, "inputFields": nil, "interfaces": nil, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "fields": nil, "inputFields": nil, "interfaces": nil, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "OBJECT", "name": "__Field", "fields": []interface{}{ map[string]interface{}{ "name": "name", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "description", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "args", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__InputValue", }, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "type", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "isDeprecated", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "deprecationReason", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, }, "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "OBJECT", "name": "__InputValue", "fields": []interface{}{ map[string]interface{}{ "name": "name", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "description", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "type", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__Type", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "defaultValue", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, }, "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "OBJECT", "name": "__EnumValue", "fields": []interface{}{ map[string]interface{}{ "name": "name", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "description", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "isDeprecated", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "deprecationReason", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, }, "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, map[string]interface{}{ "kind": "OBJECT", "name": "__Directive", "fields": []interface{}{ map[string]interface{}{ "name": "name", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "description", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "SCALAR", "name": "String", "ofType": nil, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "args", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "LIST", "name": nil, "ofType": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "OBJECT", "name": "__InputValue", }, }, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "onOperation", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "onFragment", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, map[string]interface{}{ "name": "onField", "args": []interface{}{}, "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, "isDeprecated": false, "deprecationReason": nil, }, }, "inputFields": nil, "interfaces": []interface{}{}, "enumValues": nil, "possibleTypes": nil, }, }, "directives": []interface{}{ map[string]interface{}{ "name": "include", "args": []interface{}{ map[string]interface{}{ "defaultValue": nil, "name": "if", "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, }, }, "onOperation": false, "onFragment": true, "onField": true, }, map[string]interface{}{ "name": "skip", "args": []interface{}{ map[string]interface{}{ "defaultValue": nil, "name": "if", "type": map[string]interface{}{ "kind": "NON_NULL", "name": nil, "ofType": map[string]interface{}{ "kind": "SCALAR", "name": "Boolean", "ofType": nil, }, }, }, }, "onOperation": false, "onFragment": true, "onField": true, }, }, }, } result := g(t, graphql.Params{ Schema: emptySchema, RequestString: testutil.IntrospectionQuery, }) if !testutil.ContainSubset(result.Data.(map[string]interface{}), expectedDataSubSet) { t.Fatalf("unexpected, result does not contain subset of expected data") } }
func TestIntrospection_ExposesDescriptionsOnEnums(t *testing.T) { queryRoot := graphql.NewObject(graphql.ObjectConfig{ Name: "QueryRoot", Fields: graphql.FieldConfigMap{ "onlyField": &graphql.FieldConfig{ Type: graphql.String, }, }, }) schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: queryRoot, }) if err != nil { t.Fatalf("Error creating Schema: %v", err.Error()) } query := ` { typeKindType: __type(name: "__TypeKind") { name, description, enumValues { name, description } } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "typeKindType": map[string]interface{}{ "name": "__TypeKind", "description": `An enum describing what kind of type a given __Type is`, "enumValues": []interface{}{ map[string]interface{}{ "name": "SCALAR", "description": "Indicates this type is a scalar.", }, map[string]interface{}{ "name": "OBJECT", "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", }, map[string]interface{}{ "name": "INTERFACE", "description": "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", }, map[string]interface{}{ "name": "UNION", "description": "Indicates this type is a union. `possibleTypes` is a valid field.", }, map[string]interface{}{ "name": "ENUM", "description": "Indicates this type is an enum. `enumValues` is a valid field.", }, map[string]interface{}{ "name": "INPUT_OBJECT", "description": "Indicates this type is an input object. `inputFields` is a valid field.", }, map[string]interface{}{ "name": "LIST", "description": "Indicates this type is a list. `ofType` is a valid field.", }, map[string]interface{}{ "name": "NON_NULL", "description": "Indicates this type is a non-null. `ofType` is a valid field.", }, }, }, }, } result := g(t, graphql.Params{ Schema: schema, RequestString: query, }) if !testutil.ContainSubset(result.Data.(map[string]interface{}), expected.Data.(map[string]interface{})) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestIntrospection_ExposesDescriptionsOnTypesAndFields(t *testing.T) { queryRoot := graphql.NewObject(graphql.ObjectConfig{ Name: "QueryRoot", Fields: graphql.FieldConfigMap{ "onlyField": &graphql.FieldConfig{ Type: graphql.String, }, }, }) schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: queryRoot, }) if err != nil { t.Fatalf("Error creating Schema: %v", err.Error()) } query := ` { schemaType: __type(name: "__Schema") { name, description, fields { name, description } } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "schemaType": map[string]interface{}{ "name": "__Schema", "description": `A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query and mutation operations.`, "fields": []interface{}{ map[string]interface{}{ "name": "types", "description": "A list of all types supported by this server.", }, map[string]interface{}{ "name": "queryType", "description": "The type that query operations will be rooted at.", }, map[string]interface{}{ "name": "mutationType", "description": "If this server supports mutation, the type that " + "mutation operations will be rooted at.", }, map[string]interface{}{ "name": "directives", "description": "A list of all directives supported by this server.", }, }, }, }, } result := g(t, graphql.Params{ Schema: schema, RequestString: query, }) if !testutil.ContainSubset(result.Data.(map[string]interface{}), expected.Data.(map[string]interface{})) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestIntrospection_RespectsTheIncludeDeprecatedParameterForEnumValues(t *testing.T) { testEnum := graphql.NewEnum(graphql.EnumConfig{ Name: "TestEnum", Values: graphql.EnumValueConfigMap{ "NONDEPRECATED": &graphql.EnumValueConfig{ Value: 0, }, "DEPRECATED": &graphql.EnumValueConfig{ Value: 1, DeprecationReason: "Removed in 1.0", }, "ALSONONDEPRECATED": &graphql.EnumValueConfig{ Value: 2, }, }, }) testType := graphql.NewObject(graphql.ObjectConfig{ Name: "TestType", Fields: graphql.FieldConfigMap{ "testEnum": &graphql.FieldConfig{ Type: testEnum, }, }, }) schema, err := graphql.NewSchema(graphql.SchemaConfig{ Query: testType, }) if err != nil { t.Fatalf("Error creating Schema: %v", err.Error()) } query := ` { __type(name: "TestEnum") { name trueValues: enumValues(includeDeprecated: true) { name } falseValues: enumValues(includeDeprecated: false) { name } omittedValues: enumValues { name } } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "__type": map[string]interface{}{ "name": "TestEnum", "trueValues": []interface{}{ map[string]interface{}{ "name": "NONDEPRECATED", }, map[string]interface{}{ "name": "DEPRECATED", }, map[string]interface{}{ "name": "ALSONONDEPRECATED", }, }, "falseValues": []interface{}{ map[string]interface{}{ "name": "NONDEPRECATED", }, map[string]interface{}{ "name": "ALSONONDEPRECATED", }, }, "omittedValues": []interface{}{ map[string]interface{}{ "name": "NONDEPRECATED", }, map[string]interface{}{ "name": "ALSONONDEPRECATED", }, }, }, }, } result := g(t, graphql.Params{ Schema: schema, RequestString: query, }) if !testutil.ContainSubset(result.Data.(map[string]interface{}), expected.Data.(map[string]interface{})) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }