...
1 package followschema
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 }
81
View as plain text