1
1
package graphql_test
2
2
3
3
import (
4
+ "errors"
4
5
"fmt"
5
6
"reflect"
6
7
"testing"
@@ -66,6 +67,10 @@ var blogArticle = graphql.NewObject(graphql.ObjectConfig{
66
67
},
67
68
},
68
69
})
70
+
71
+ var ErrArticleQuery = errors .New ("ErrArticleQuery" )
72
+ var ErrArticleMutation = errors .New ("ErrArticleMutation" )
73
+
69
74
var blogQuery = graphql .NewObject (graphql.ObjectConfig {
70
75
Name : "Query" ,
71
76
Fields : graphql.Fields {
@@ -76,6 +81,9 @@ var blogQuery = graphql.NewObject(graphql.ObjectConfig{
76
81
Type : graphql .String ,
77
82
},
78
83
},
84
+ Resolve : func (p graphql.ResolveParams ) (interface {}, error ) {
85
+ return nil , ErrArticleQuery
86
+ },
79
87
},
80
88
"feed" : & graphql.Field {
81
89
Type : graphql .NewList (blogArticle ),
@@ -88,6 +96,14 @@ var blogMutation = graphql.NewObject(graphql.ObjectConfig{
88
96
Fields : graphql.Fields {
89
97
"writeArticle" : & graphql.Field {
90
98
Type : blogArticle ,
99
+ Args : graphql.FieldConfigArgument {
100
+ "title" : & graphql.ArgumentConfig {
101
+ Type : graphql .String ,
102
+ },
103
+ },
104
+ Resolve : func (p graphql.ResolveParams ) (interface {}, error ) {
105
+ return nil , ErrArticleMutation
106
+ },
91
107
},
92
108
},
93
109
})
@@ -533,3 +549,45 @@ func TestTypeSystem_DefinitionExample_DoesNotMutatePassedFieldDefinitions(t *tes
533
549
}
534
550
535
551
}
552
+
553
+ func TestQuery_FieldResolveFn_AddsErrorsToGraphQLResult (t * testing.T ) {
554
+ blogSchema , err := graphql .NewSchema (graphql.SchemaConfig {
555
+ Query : blogQuery ,
556
+ Mutation : blogMutation ,
557
+ })
558
+ if err != nil {
559
+ t .Fatalf ("unexpected error, got: %v" , err )
560
+ }
561
+ query := "{ article(id:\" 1\" ) { id } }"
562
+ result := graphql .Do (graphql.Params {
563
+ Schema : blogSchema ,
564
+ RequestString : query ,
565
+ })
566
+ if len (result .Errors ) == 0 {
567
+ t .Fatal ("wrong result, expected errors, got no errors" )
568
+ }
569
+ if result .Errors [0 ].Error () != ErrArticleQuery .Error () {
570
+ t .Fatalf ("wrong result, unexpected error, got: %v, expected: %v" , result .Errors [0 ], ErrArticleQuery )
571
+ }
572
+ }
573
+
574
+ func TestMutation_FieldResolveFn_AddsErrorsToGraphQLResult (t * testing.T ) {
575
+ blogSchema , err := graphql .NewSchema (graphql.SchemaConfig {
576
+ Query : blogQuery ,
577
+ Mutation : blogMutation ,
578
+ })
579
+ if err != nil {
580
+ t .Fatalf ("unexpected error, got: %v" , err )
581
+ }
582
+ query := "mutation _ { newArticle: writeArticle(title:\" article title\" ) { id } }"
583
+ result := graphql .Do (graphql.Params {
584
+ Schema : blogSchema ,
585
+ RequestString : query ,
586
+ })
587
+ if len (result .Errors ) == 0 {
588
+ t .Fatal ("wrong result, expected errors, got no errors" )
589
+ }
590
+ if result .Errors [0 ].Error () != ErrArticleMutation .Error () {
591
+ t .Fatalf ("wrong result, unexpected error, got: %v, expected: %v" , result .Errors [0 ], ErrArticleMutation )
592
+ }
593
+ }
0 commit comments