func TestVariables_ListsAndNullability_DoesNotAllowNonNullListsToBeNull(t *testing.T) { doc := ` query q($input: [String]!) { nnList(input: $input) } ` expected := &graphql.Result{ Data: nil, Errors: []gqlerrors.FormattedError{ { Message: `Variable "$input" of required type "[String]!" was not provided.`, Locations: []location.SourceLocation{ { Line: 2, Column: 17, }, }, }, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingVariables_ErrorsOnIncorrectType(t *testing.T) { params := map[string]interface{}{ "input": "foo bar", } expected := &graphql.Result{ Data: nil, Errors: []gqlerrors.FormattedError{ { Message: "Variable \"$input\" got invalid value \"foo bar\".\nExpected \"TestInputObject\", found not an object.", Locations: []location.SourceLocation{ { Line: 2, Column: 17, }, }, }, }, } ast := testVariables_ObjectsAndNullability_UsingVariables_GetAST(t) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ListsAndNullability_AllowsNonNullListsOfNonNulsToContainValues(t *testing.T) { doc := ` query q($input: [String!]!) { nnListNN(input: $input) } ` params := map[string]interface{}{ "input": []interface{}{"A"}, } expected := &graphql.Result{ Data: map[string]interface{}{ "nnListNN": `["A"]`, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestNonNull_NullsANullableFieldThatSynchronouslyReturnsNullInAPromise(t *testing.T) { doc := ` query Q { promise } ` expected := &graphql.Result{ Data: map[string]interface{}{ "promise": nil, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: nonNullTestSchema, AST: ast, Root: nullingData, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected.Data, result.Data) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected.Data, result.Data)) } if !reflect.DeepEqual(expected.Errors, result.Errors) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } }
func TestNonNull_NullsTheTopLevelIfSyncNonNullableFieldResolvesNull(t *testing.T) { doc := ` query Q { nonNullPromise } ` expected := &graphql.Result{ Data: nil, Errors: []gqlerrors.FormattedError{ { Message: `Cannot return null for non-nullable field DataType.nonNullPromise.`, Locations: []location.SourceLocation{ {Line: 2, Column: 17}, }, }, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: nonNullTestSchema, AST: ast, Root: nullingData, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_UsesArgumentDefaultValues_WhenArgumentProvidedCannotBeParsed(t *testing.T) { doc := ` { fieldWithDefaultArgumentValue(input: WRONG_TYPE) } ` expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithDefaultArgumentValue": `"Hello World"`, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestPrinter_CorrectlyPrintsNonQueryOperationsWithoutName(t *testing.T) { // Test #1 queryAstShorthanded := `query { id, name }` expected := `{ id name } ` astDoc := parse(t, queryAstShorthanded) results := printer.Print(astDoc) if !reflect.DeepEqual(expected, results) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(results, expected)) } // Test #2 mutationAst := `mutation { id, name }` expected = `mutation { id name } ` astDoc = parse(t, mutationAst) results = printer.Print(astDoc) if !reflect.DeepEqual(expected, results) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(results, expected)) } // Test #3 queryAstWithArtifacts := `query ($foo: TestType) @testDirective { id, name }` expected = `query ($foo: TestType) @testDirective { id name } ` astDoc = parse(t, queryAstWithArtifacts) results = printer.Print(astDoc) if !reflect.DeepEqual(expected, results) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(results, expected)) } // Test #4 mutationAstWithArtifacts := `mutation ($foo: TestType) @testDirective { id, name }` expected = `mutation ($foo: TestType) @testDirective { id name } ` astDoc = parse(t, mutationAstWithArtifacts) results = printer.Print(astDoc) if !reflect.DeepEqual(expected, results) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(results, expected)) } }
func TestMutations_ExecutionOrdering_EvaluatesMutationsSerially(t *testing.T) { root := newTestRoot(6) doc := `mutation M { first: immediatelyChangeTheNumber(newNumber: 1) { theNumber }, second: promiseToChangeTheNumber(newNumber: 2) { theNumber }, third: immediatelyChangeTheNumber(newNumber: 3) { theNumber } fourth: promiseToChangeTheNumber(newNumber: 4) { theNumber }, fifth: immediatelyChangeTheNumber(newNumber: 5) { theNumber } }` expected := &graphql.Result{ Data: map[string]interface{}{ "first": map[string]interface{}{ "theNumber": 1, }, "second": map[string]interface{}{ "theNumber": 2, }, "third": map[string]interface{}{ "theNumber": 3, }, "fourth": map[string]interface{}{ "theNumber": 4, }, "fifth": map[string]interface{}{ "theNumber": 5, }, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: mutationsTestSchema, AST: ast, Root: root, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestUnionIntersectionTypes_ExecutesUnionTypesWithInlineFragments(t *testing.T) { // This is the valid version of the query in the above test. doc := ` { __typename name pets { __typename ... on Dog { name barks } ... on Cat { name meows } } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "__typename": "Person", "name": "John", "pets": []interface{}{ map[string]interface{}{ "__typename": "Cat", "name": "Garfield", "meows": false, }, map[string]interface{}{ "__typename": "Dog", "name": "Odie", "barks": true, }, }, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: unionInterfaceTestSchema, AST: ast, Root: john, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestUnionIntersectionTypes_ExecutesUsingInterfaceTypes(t *testing.T) { // NOTE: This is an *invalid* query, but it should be an *executable* query. doc := ` { __typename name friends { __typename name barks meows } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "__typename": "Person", "name": "John", "friends": []interface{}{ map[string]interface{}{ "__typename": "Person", "name": "Liz", }, map[string]interface{}{ "__typename": "Dog", "name": "Odie", "barks": true, }, }, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: unionInterfaceTestSchema, AST: ast, Root: john, } result := testutil.TestExecute(t, ep) if len(result.Errors) != len(expected.Errors) { t.Fatalf("Unexpected errors, Diff: %v", testutil.Diff(expected.Errors, result.Errors)) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_NullableScalars_AllowsNullableInputsToBeOmittedInAnUnlistedVariable(t *testing.T) { doc := ` query SetsNullable { fieldWithNullableStringInput(input: $value) } ` expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithNullableStringInput": nil, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestPluralIdentifyingRootField_AllowsFetching(t *testing.T) { query := `{ usernames(usernames:["dschafer", "leebyron", "schrockn"]) { username url } }` expected := &graphql.Result{ Data: map[string]interface{}{ "usernames": []interface{}{ map[string]interface{}{ "username": "******", "url": "www.facebook.com/dschafer", }, map[string]interface{}{ "username": "******", "url": "www.facebook.com/leebyron", }, map[string]interface{}{ "username": "******", "url": "www.facebook.com/schrockn", }, }, }, } result := graphql.Do(graphql.Params{ Schema: pluralTestSchema, RequestString: query, }) if !reflect.DeepEqual(result, expected) { t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingVariables_ExecutesWithComplexScalarInput(t *testing.T) { params := map[string]interface{}{ "input": map[string]interface{}{ "c": "foo", "d": "SerializedValue", }, } expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithObjectInput": `{"c":"foo","d":"DeserializedValue"}`, }, } ast := testVariables_ObjectsAndNullability_UsingVariables_GetAST(t) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingVariables_ProperlyParsesSingleValueToList(t *testing.T) { params := map[string]interface{}{ "input": map[string]interface{}{ "a": "foo", "b": "bar", "c": "baz", }, } expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithObjectInput": `{"a":"foo","b":["bar"],"c":"baz"}`, }, } ast := testVariables_ObjectsAndNullability_UsingVariables_GetAST(t) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestDirectives_DirectivesMustBeNamed(t *testing.T) { invalidDirective := graphql.NewDirective(graphql.DirectiveConfig{ Locations: []string{ graphql.DirectiveLocationField, }, }) _, err := graphql.NewSchema(graphql.SchemaConfig{ Query: graphql.NewObject(graphql.ObjectConfig{ Name: "TestType", Fields: graphql.Fields{ "a": &graphql.Field{ Type: graphql.String, }, }, }), Directives: []*graphql.Directive{invalidDirective}, }) expectedErr := gqlerrors.FormattedError{ Message: "Directive must be named.", Locations: []location.SourceLocation{}, } if !reflect.DeepEqual(expectedErr, err) { t.Fatalf("Expected error to be equal, got: %v", testutil.Diff(expectedErr, err)) } }
func TestGlobalIDFields_RefetchesTheIDs(t *testing.T) { query := `{ user: node(id: "VXNlcjox") { id ... on User { name } }, photo: node(id: "UGhvdG86MQ==") { id ... on Photo { width } } }` expected := &graphql.Result{ Data: map[string]interface{}{ "user": map[string]interface{}{ "id": "VXNlcjox", "name": "John Doe", }, "photo": map[string]interface{}{ "id": "UGhvdG86MQ==", "width": 300, }, }, } result := graphql.Do(graphql.Params{ Schema: globalIDTestSchema, RequestString: query, }) if !reflect.DeepEqual(result, expected) { t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ListsAndNullability_AllowsListsToBeNull(t *testing.T) { doc := ` query q($input: [String]) { list(input: $input) } ` params := map[string]interface{}{ "input": nil, } expected := &graphql.Result{ Data: map[string]interface{}{ "list": nil, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingInlineStructs_ProperlyParsesSingleValueToList(t *testing.T) { doc := ` { fieldWithObjectInput(input: {a: "foo", b: "bar", c: "baz"}) } ` expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithObjectInput": `{"a":"foo","b":["bar"],"c":"baz"}`, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestConnectionFromArray_HandlesPagination_RespectsLastAndAfterAndBefore_TooFew(t *testing.T) { filter := map[string]interface{}{ "last": 2, "after": "YXJyYXljb25uZWN0aW9uOjA=", "before": "YXJyYXljb25uZWN0aW9uOjQ=", } args := relay.NewConnectionArguments(filter) expected := &relay.Connection{ Edges: []*relay.Edge{ &relay.Edge{ Node: "C", Cursor: "YXJyYXljb25uZWN0aW9uOjI=", }, &relay.Edge{ Node: "D", Cursor: "YXJyYXljb25uZWN0aW9uOjM=", }, }, PageInfo: relay.PageInfo{ StartCursor: "YXJyYXljb25uZWN0aW9uOjI=", EndCursor: "YXJyYXljb25uZWN0aW9uOjM=", HasPreviousPage: true, HasNextPage: false, }, } result := relay.ConnectionFromArray(arrayConnectionTestLetters, args) if !reflect.DeepEqual(result, expected) { t.Fatalf("wrong result, connection result diff: %v", testutil.Diff(expected, result)) } }
func TestConnectionFromArray_CursorForObjectInConnection_ReturnsAnEdgeCursor_GivenAnArrayAndAMemberObject(t *testing.T) { letterBCursor := relay.CursorForObjectInConnection(arrayConnectionTestLetters, "B") expected := relay.ConnectionCursor("YXJyYXljb25uZWN0aW9uOjE=") if !reflect.DeepEqual(letterBCursor, expected) { t.Fatalf("wrong result, cursor result diff: %v", testutil.Diff(expected, letterBCursor)) } }
func TestDirectives_DirectiveNameMustBeValid(t *testing.T) { invalidDirective := graphql.NewDirective(graphql.DirectiveConfig{ Name: "123invalid name", Locations: []string{ graphql.DirectiveLocationField, }, }) _, err := graphql.NewSchema(graphql.SchemaConfig{ Query: graphql.NewObject(graphql.ObjectConfig{ Name: "TestType", Fields: graphql.Fields{ "a": &graphql.Field{ Type: graphql.String, }, }, }), Directives: []*graphql.Directive{invalidDirective}, }) expectedErr := gqlerrors.FormattedError{ Message: `Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "123invalid name" does not.`, Locations: []location.SourceLocation{}, } if !reflect.DeepEqual(expectedErr, err) { t.Fatalf("Expected error to be equal, got: %v", testutil.Diff(expectedErr, err)) } }
func TestDirectivesWorksOnInlineFragmentUnlessTrueIncludesInlineFragment(t *testing.T) { query := ` query Q { a ... on TestType @skip(if: true) { b } } fragment Frag on TestType { b } ` expected := &graphql.Result{ Data: map[string]interface{}{ "a": "a", }, } result := executeDirectivesTestQuery(t, query) if len(result.Errors) != 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_NonNullableScalars_AllowsNonNullableInputsToBeSetToAValueDirectly(t *testing.T) { doc := ` { fieldWithNonNullableStringInput(input: "a") } ` params := map[string]interface{}{ "value": "a", } expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithNonNullableStringInput": `"a"`, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingInlineStructs_DoesNotUseIncorrectValue(t *testing.T) { doc := ` { fieldWithObjectInput(input: ["foo", "bar", "baz"]) } ` expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithObjectInput": nil, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_NonNullableScalars_PassesAlongNullForNonNullableInputsIfExplicitlySetInTheQuery(t *testing.T) { doc := ` { fieldWithNonNullableStringInput } ` params := map[string]interface{}{ "value": "a", } expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithNonNullableStringInput": nil, }, } ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, Args: params, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingInlineStructs_ProperlyRunsParseLiteralOnComplexScalarTypes(t *testing.T) { doc := ` { fieldWithObjectInput(input: {a: "foo", d: "SerializedValue"}) } ` expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithObjectInput": `{"a":"foo","d":"DeserializedValue"}`, }, } // parse query ast := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: ast, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestGlobalIDFields_GivesDifferentIDs(t *testing.T) { query := `{ allObjects { id } }` expected := &graphql.Result{ Data: map[string]interface{}{ "allObjects": []interface{}{ map[string]interface{}{ "id": "VXNlcjox", }, map[string]interface{}{ "id": "VXNlcjoy", }, map[string]interface{}{ "id": "UGhvdG86MQ==", }, map[string]interface{}{ "id": "UGhvdG86Mg==", }, }, }, } result := graphql.Do(graphql.Params{ Schema: globalIDTestSchema, RequestString: query, }) if !reflect.DeepEqual(result, expected) { t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result)) } }
func TestVariables_ObjectsAndNullability_UsingVariables_UsesDefaultValueWhenNotProvided(t *testing.T) { doc := ` query q($input: TestInputObject = {a: "foo", b: ["bar"], c: "baz"}) { fieldWithObjectInput(input: $input) } ` expected := &graphql.Result{ Data: map[string]interface{}{ "fieldWithObjectInput": `{"a":"foo","b":["bar"],"c":"baz"}`, }, } withDefaultsAST := testutil.TestParse(t, doc) // execute ep := graphql.ExecuteParams{ Schema: variablesTestSchema, AST: withDefaultsAST, } result := testutil.TestExecute(t, ep) if len(result.Errors) > 0 { t.Fatalf("wrong result, unexpected errors: %v", result.Errors) } if !reflect.DeepEqual(expected, result) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expected, result)) } }
func TestConnection_TestFetching_CorrectlyFetchesNoShipsOfTheRebelsAtTheEndOfTheConnection(t *testing.T) { query := ` query RebelsQuery { rebels { name, ships(first: 3 after: "YXJyYXljb25uZWN0aW9uOjQ=") { edges { cursor, node { name } } } } } ` expected := &graphql.Result{ Data: map[string]interface{}{ "rebels": map[string]interface{}{ "name": "Alliance to Restore the Republic", "ships": map[string]interface{}{ "edges": []interface{}{}, }, }, }, } result := graphql.Do(graphql.Params{ Schema: starwars.Schema, RequestString: query, }) if !reflect.DeepEqual(result, expected) { t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result)) } }
func TestConnectionFromArraySlice_UndersizedSliceBoth(t *testing.T) { filter := map[string]interface{}{ "first": 3, "after": "YXJyYXljb25uZWN0aW9uOjE=", } args := relay.NewConnectionArguments(filter) expected := &relay.Connection{ Edges: []*relay.Edge{ &relay.Edge{ Node: "D", Cursor: "YXJyYXljb25uZWN0aW9uOjM=", }, }, PageInfo: relay.PageInfo{ StartCursor: "YXJyYXljb25uZWN0aW9uOjM=", EndCursor: "YXJyYXljb25uZWN0aW9uOjM=", HasPreviousPage: false, HasNextPage: true, }, } result := relay.ConnectionFromArraySlice( arrayConnectionTestLetters[3:4], args, relay.ArraySliceMetaInfo{ SliceStart: 3, ArrayLength: 5, }, ) if !reflect.DeepEqual(result, expected) { t.Fatalf("wrong result, connection result diff: %v", testutil.Diff(expected, result)) } }