github.com/luciferinlove/gqlgen@v0.17.16-bzc.1/codegen/testserver/followschema/input_test.go (about) 1 package followschema 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/luciferinlove/gqlgen/client" 8 "github.com/luciferinlove/gqlgen/graphql/handler" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestInput(t *testing.T) { 13 resolvers := &Stub{} 14 srv := handler.NewDefaultServer(NewExecutableSchema(Config{Resolvers: resolvers})) 15 c := client.New(srv) 16 17 t.Run("when function errors on directives", func(t *testing.T) { 18 resolvers.QueryResolver.InputSlice = func(ctx context.Context, arg []string) (b bool, e error) { 19 return true, nil 20 } 21 22 var resp struct { 23 DirectiveArg *string 24 } 25 26 err := c.Post(`query { inputSlice(arg: ["ok", 1, 2, "ok"]) }`, &resp) 27 28 require.EqualError(t, err, `http 422: {"errors":[{"message":"String cannot represent a non string value: 1","locations":[{"line":1,"column":32}],"extensions":{"code":"GRAPHQL_VALIDATION_FAILED"}},{"message":"String cannot represent a non string value: 2","locations":[{"line":1,"column":35}],"extensions":{"code":"GRAPHQL_VALIDATION_FAILED"}}],"data":null}`) 29 require.Nil(t, resp.DirectiveArg) 30 }) 31 32 t.Run("when input slice nullable", func(t *testing.T) { 33 resolvers.QueryResolver.InputNullableSlice = func(ctx context.Context, arg []string) (b bool, e error) { 34 return arg == nil, nil 35 } 36 37 var resp struct { 38 InputNullableSlice bool 39 } 40 var err error 41 err = c.Post(`query { inputNullableSlice(arg: null) }`, &resp) 42 require.NoError(t, err) 43 require.True(t, resp.InputNullableSlice) 44 45 err = c.Post(`query { inputNullableSlice(arg: []) }`, &resp) 46 require.NoError(t, err) 47 require.False(t, resp.InputNullableSlice) 48 }) 49 50 t.Run("coerce single value to slice", func(t *testing.T) { 51 check := func(ctx context.Context, arg []string) (b bool, e error) { 52 return len(arg) == 1 && arg[0] == "coerced", nil 53 } 54 resolvers.QueryResolver.InputSlice = check 55 resolvers.QueryResolver.InputNullableSlice = check 56 57 var resp struct { 58 Coerced bool 59 } 60 var err error 61 err = c.Post(`query { coerced: inputSlice(arg: "coerced") }`, &resp) 62 require.NoError(t, err) 63 require.True(t, resp.Coerced) 64 65 err = c.Post(`query { coerced: inputNullableSlice(arg: "coerced") }`, &resp) 66 require.NoError(t, err) 67 require.True(t, resp.Coerced) 68 }) 69 }