github.com/99designs/gqlgen@v0.17.45/plugin/federation/fieldset/fieldset_test.go (about) 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 }