github.com/operandinc/gqlgen@v0.16.1/codegen/testserver/followschema/input_test.go (about)

     1  package followschema
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/operandinc/gqlgen/client"
     8  	"github.com/operandinc/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":"Expected type String!, found 1.","locations":[{"line":1,"column":32}],"extensions":{"code":"GRAPHQL_VALIDATION_FAILED"}},{"message":"Expected type String!, found 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  }