...

Source file src/github.com/99designs/gqlgen/plugin/federation/fieldset/fieldset_test.go

Documentation: github.com/99designs/gqlgen/plugin/federation/fieldset

     1  package fieldset
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/99designs/gqlgen/codegen"
     7  	"github.com/stretchr/testify/require"
     8  	"github.com/vektah/gqlparser/v2/ast"
     9  )
    10  
    11  func TestUnnestedWithoutPrefix(t *testing.T) {
    12  	fieldSet := New("foo bar", nil)
    13  
    14  	require.Len(t, fieldSet, 2)
    15  
    16  	require.Len(t, fieldSet[0], 1)
    17  	require.Equal(t, "foo", fieldSet[0][0])
    18  
    19  	require.Len(t, fieldSet[1], 1)
    20  	require.Equal(t, "bar", fieldSet[1][0])
    21  }
    22  
    23  func TestNestedWithoutPrefix(t *testing.T) {
    24  	fieldSet := New("foo bar { baz} a b {c{d}}e", nil)
    25  
    26  	require.Len(t, fieldSet, 5)
    27  
    28  	require.Len(t, fieldSet[0], 1)
    29  	require.Equal(t, "foo", fieldSet[0][0])
    30  
    31  	require.Len(t, fieldSet[1], 2)
    32  	require.Equal(t, "bar", fieldSet[1][0])
    33  	require.Equal(t, "baz", fieldSet[1][1])
    34  
    35  	require.Len(t, fieldSet[2], 1)
    36  	require.Equal(t, "a", fieldSet[2][0])
    37  
    38  	require.Len(t, fieldSet[3], 3)
    39  	require.Equal(t, "b", fieldSet[3][0])
    40  	require.Equal(t, "c", fieldSet[3][1])
    41  	require.Equal(t, "d", fieldSet[3][2])
    42  
    43  	require.Len(t, fieldSet[4], 1)
    44  	require.Equal(t, "e", fieldSet[4][0])
    45  }
    46  
    47  func TestWithPrefix(t *testing.T) {
    48  	t.Run("prefix with len=capacity", func(t *testing.T) {
    49  		fieldSet := New("foo bar{id}", []string{"prefix"})
    50  
    51  		require.Len(t, fieldSet, 2)
    52  
    53  		require.Len(t, fieldSet[0], 2)
    54  		require.Equal(t, "prefix", fieldSet[0][0])
    55  		require.Equal(t, "foo", fieldSet[0][1])
    56  
    57  		require.Len(t, fieldSet[1], 3)
    58  		require.Equal(t, "prefix", fieldSet[1][0])
    59  		require.Equal(t, "bar", fieldSet[1][1])
    60  		require.Equal(t, "id", fieldSet[1][2])
    61  	})
    62  	t.Run("prefix with len<capacity", func(t *testing.T) {
    63  		prefix := make([]string, 0, 2)
    64  		prefix = append(prefix, "prefix")
    65  		fieldSet := New("foo bar{id}", prefix)
    66  
    67  		require.Len(t, fieldSet, 2)
    68  		t.Log(fieldSet)
    69  
    70  		require.Len(t, fieldSet[0], 2)
    71  		require.Equal(t, "prefix", fieldSet[0][0])
    72  		require.Equal(t, "foo", fieldSet[0][1])
    73  
    74  		require.Len(t, fieldSet[1], 3)
    75  		require.Equal(t, "prefix", fieldSet[1][0])
    76  		require.Equal(t, "bar", fieldSet[1][1])
    77  		require.Equal(t, "id", fieldSet[1][2])
    78  	})
    79  }
    80  
    81  func TestHandlesRequiresFieldWithArgument(t *testing.T) {
    82  	obj := &codegen.Object{
    83  		Fields: []*codegen.Field{
    84  			{
    85  				FieldDefinition: &ast.FieldDefinition{
    86  					Name: "foo(limit:4) { bar }",
    87  				},
    88  				TypeReference:    nil,
    89  				GoFieldType:      0,
    90  				GoReceiverName:   "",
    91  				GoFieldName:      "",
    92  				IsResolver:       false,
    93  				Args:             nil,
    94  				MethodHasContext: false,
    95  				NoErr:            false,
    96  				VOkFunc:          false,
    97  				Object:           nil,
    98  				Default:          nil,
    99  				Stream:           false,
   100  				Directives:       nil,
   101  			},
   102  		},
   103  		Implements: nil,
   104  	}
   105  
   106  	require.NotNil(t, fieldByName(obj, "foo"))
   107  }
   108  
   109  func TestInvalid(t *testing.T) {
   110  	require.Panics(t, func() {
   111  		New("foo bar{baz", nil)
   112  	})
   113  }
   114  
   115  func TestToGo(t *testing.T) {
   116  	require.Equal(t, Field{"foo"}.ToGo(), "Foo")
   117  	require.Equal(t, Field{"foo", "bar"}.ToGo(), "FooBar")
   118  	require.Equal(t, Field{"bar", "id"}.ToGo(), "BarID")
   119  }
   120  
   121  func TestToGoPrivate(t *testing.T) {
   122  	require.Equal(t, Field{"foo"}.ToGoPrivate(), "foo")
   123  	require.Equal(t, Field{"foo", "bar"}.ToGoPrivate(), "fooBar")
   124  	require.Equal(t, Field{"bar", "id"}.ToGoPrivate(), "barID")
   125  }
   126  

View as plain text