github.com/humans-group/gqlgen@v0.7.2/example/dataloader/dataloader_test.go (about) 1 package dataloader 2 3 import ( 4 "net/http/httptest" 5 "testing" 6 7 "github.com/99designs/gqlgen/client" 8 "github.com/99designs/gqlgen/graphql/introspection" 9 "github.com/99designs/gqlgen/handler" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestTodo(t *testing.T) { 14 srv := httptest.NewServer(LoaderMiddleware(handler.GraphQL(NewExecutableSchema(Config{Resolvers: &Resolver{}})))) 15 c := client.New(srv.URL) 16 17 t.Run("create a new todo", func(t *testing.T) { 18 var resp interface{} 19 c.MustPost(`{ 20 customers { 21 name 22 address { 23 street 24 25 } 26 orders { 27 id 28 amount 29 items { 30 name 31 } 32 } 33 } 34 }`, &resp) 35 }) 36 37 t.Run("2d array marshaling", func(t *testing.T) { 38 var resp struct { 39 Torture2d [][]Customer 40 } 41 c.MustPost(`{ torture2d(customerIds:[[1,2],[3,4,5]]) { id name } }`, &resp) 42 43 require.EqualValues(t, [][]Customer{ 44 {{ID: 1, Name: "0 0"}, {ID: 2, Name: "0 1"}}, 45 {{ID: 3, Name: "1 0"}, {ID: 4, Name: "1 1"}, {ID: 5, Name: "1 2"}}, 46 }, resp.Torture2d) 47 }) 48 49 // Input coercion on arrays should convert non array values into an array of the appropriate depth 50 // http://facebook.github.io/graphql/June2018/#sec-Type-System.List 51 t.Run("array coercion", func(t *testing.T) { 52 t.Run("1d", func(t *testing.T) { 53 var resp struct { 54 Torture1d []Customer 55 } 56 c.MustPost(`{ torture1d(customerIds: 1) { id name } }`, &resp) 57 58 require.EqualValues(t, []Customer{ 59 {ID: 1, Name: "0"}, 60 }, resp.Torture1d) 61 }) 62 63 t.Run("2d", func(t *testing.T) { 64 var resp struct { 65 Torture2d [][]Customer 66 } 67 c.MustPost(`{ torture2d(customerIds: 1) { id name } }`, &resp) 68 69 require.EqualValues(t, [][]Customer{ 70 {{ID: 1, Name: "0 0"}}, 71 }, resp.Torture2d) 72 }) 73 }) 74 75 t.Run("introspection", func(t *testing.T) { 76 // Make sure we can run the graphiql introspection query without errors 77 var resp interface{} 78 c.MustPost(introspection.Query, &resp) 79 }) 80 81 t.Run("customer array torture malformed array query", func(t *testing.T) { 82 var resp struct { 83 Torture [][]Customer 84 } 85 err := c.Post(`{ torture2d(customerIds:{}) { id name } }`, &resp) 86 87 require.EqualError(t, err, "[{\"message\":\"map[string]interface {} is not an int\"}]") 88 }) 89 90 }