github.com/99designs/gqlgen@v0.17.45/codegen/testserver/singlefile/introspection_test.go (about) 1 package singlefile 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/99designs/gqlgen/client" 10 "github.com/99designs/gqlgen/graphql" 11 "github.com/99designs/gqlgen/graphql/handler" 12 "github.com/99designs/gqlgen/graphql/handler/transport" 13 "github.com/99designs/gqlgen/graphql/introspection" 14 ) 15 16 func TestIntrospection(t *testing.T) { 17 t.Run("disabled when creating your own server", func(t *testing.T) { 18 resolvers := &Stub{} 19 20 srv := handler.New(NewExecutableSchema(Config{Resolvers: resolvers})) 21 srv.AddTransport(transport.POST{}) 22 c := client.New(srv) 23 24 var resp interface{} 25 err := c.Post(introspection.Query, &resp) 26 require.EqualError(t, err, "[{\"message\":\"introspection disabled\",\"path\":[\"__schema\"]}]") 27 }) 28 29 t.Run("enabled by default", func(t *testing.T) { 30 resolvers := &Stub{} 31 32 c := client.New(handler.NewDefaultServer( 33 NewExecutableSchema(Config{Resolvers: resolvers}), 34 )) 35 36 var resp interface{} 37 err := c.Post(introspection.Query, &resp) 38 require.NoError(t, err) 39 40 t.Run("does not return empty deprecation strings", func(t *testing.T) { 41 q := `{ 42 __type(name:"InnerObject") { 43 fields { 44 name 45 deprecationReason 46 } 47 } 48 }` 49 50 var resp struct { 51 Type struct { 52 Fields []struct { 53 Name string 54 DeprecationReason *string 55 } 56 } `json:"__type"` 57 } 58 err := c.Post(q, &resp) 59 require.NoError(t, err) 60 61 require.Equal(t, "id", resp.Type.Fields[0].Name) 62 require.Nil(t, resp.Type.Fields[0].DeprecationReason) 63 }) 64 }) 65 66 t.Run("disabled by middleware", func(t *testing.T) { 67 resolvers := &Stub{} 68 69 srv := handler.NewDefaultServer(NewExecutableSchema(Config{Resolvers: resolvers})) 70 srv.AroundOperations(func(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler { 71 graphql.GetOperationContext(ctx).DisableIntrospection = true 72 return next(ctx) 73 }) 74 c := client.New(srv) 75 76 var resp interface{} 77 err := c.Post(introspection.Query, &resp) 78 require.EqualError(t, err, "[{\"message\":\"introspection disabled\",\"path\":[\"__schema\"]}]") 79 }) 80 }