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