1 package followschema
2
3 import (
4 "context"
5 "testing"
6
7 "github.com/stretchr/testify/require"
8
9 "github.com/99designs/gqlgen/client"
10 "github.com/99designs/gqlgen/graphql/handler"
11 )
12
13 type UpdatePtrToPtrResults struct {
14 UpdatedPtrToPtr PtrToPtrOuter `json:"updatePtrToPtr"`
15 }
16
17 func TestPtrToPtr(t *testing.T) {
18 resolvers := &Stub{}
19
20 c := client.New(handler.NewDefaultServer(NewExecutableSchema(Config{Resolvers: resolvers})))
21
22 resolvers.MutationResolver.UpdatePtrToPtr = func(ctx context.Context, in UpdatePtrToPtrOuter) (ret *PtrToPtrOuter, err error) {
23 ret = &PtrToPtrOuter{
24 Name: "oldName",
25 Inner: &PtrToPtrInner{
26 Key: "oldKey",
27 Value: "oldValue",
28 },
29 StupidInner: nest7(&PtrToPtrInner{
30 Key: "oldStupidKey",
31 Value: "oldStupidValue",
32 }),
33 }
34
35 if in.Name != nil {
36 ret.Name = *in.Name
37 }
38
39 if in.Inner != nil {
40 inner := *in.Inner
41 if inner == nil {
42 ret.Inner = nil
43 } else {
44 if in.Inner == nil {
45 ret.Inner = &PtrToPtrInner{}
46 }
47 if inner.Key != nil {
48 ret.Inner.Key = *inner.Key
49 }
50 if inner.Value != nil {
51 ret.Inner.Value = *inner.Value
52 }
53 }
54 }
55
56 if in.StupidInner != nil {
57 si := *in.StupidInner
58 if si == nil {
59 ret.StupidInner = nil
60 } else {
61 deepIn := ******si
62 deepOut := ******ret.StupidInner
63 if deepIn.Key != nil {
64 deepOut.Key = *deepIn.Key
65 }
66 if deepIn.Value != nil {
67 deepOut.Value = *deepIn.Value
68 }
69 }
70 }
71 return ret, err
72 }
73
74 t.Run("pointer to pointer input missing", func(t *testing.T) {
75 var resp UpdatePtrToPtrResults
76
77 err := c.Post(`mutation { updatePtrToPtr(input: { name: "newName" }) { name, inner { key, value }, stupidInner { key, value }}}`, &resp)
78 require.NoError(t, err)
79
80 require.Equal(t, resp.UpdatedPtrToPtr.Name, "newName")
81 require.NotNil(t, resp.UpdatedPtrToPtr.Inner)
82 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Key, "oldKey")
83 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Value, "oldValue")
84 require.NotNil(t, resp.UpdatedPtrToPtr.StupidInner)
85 require.NotNil(t, ******resp.UpdatedPtrToPtr.StupidInner)
86 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Key, "oldStupidKey")
87 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Value, "oldStupidValue")
88 })
89
90 t.Run("pointer to pointer input non-null", func(t *testing.T) {
91 var resp UpdatePtrToPtrResults
92
93 err := c.Post(`mutation {
94 updatePtrToPtr(input: {
95 inner: {
96 key: "newKey"
97 value: "newValue"
98 }
99 })
100 { name, inner { key, value }, stupidInner { key, value }}
101 }`, &resp)
102 require.NoError(t, err)
103
104 require.Equal(t, resp.UpdatedPtrToPtr.Name, "oldName")
105 require.NotNil(t, resp.UpdatedPtrToPtr.Inner)
106 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Key, "newKey")
107 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Value, "newValue")
108 require.NotNil(t, resp.UpdatedPtrToPtr.StupidInner)
109 require.NotNil(t, ******resp.UpdatedPtrToPtr.StupidInner)
110 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Key, "oldStupidKey")
111 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Value, "oldStupidValue")
112 })
113
114 t.Run("pointer to pointer input null", func(t *testing.T) {
115 var resp UpdatePtrToPtrResults
116
117 err := c.Post(`mutation { updatePtrToPtr(input: { inner: null }) { name, inner { key, value }, stupidInner { key, value }}}`, &resp)
118 require.NoError(t, err)
119
120 require.Equal(t, resp.UpdatedPtrToPtr.Name, "oldName")
121 require.Nil(t, resp.UpdatedPtrToPtr.Inner)
122 require.NotNil(t, resp.UpdatedPtrToPtr.StupidInner)
123 require.NotNil(t, ******resp.UpdatedPtrToPtr.StupidInner)
124 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Key, "oldStupidKey")
125 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Value, "oldStupidValue")
126 })
127
128 t.Run("many pointers input non-null", func(t *testing.T) {
129 var resp UpdatePtrToPtrResults
130
131 err := c.Post(`mutation {
132 updatePtrToPtr(input: {
133 stupidInner: {
134 key: "newKey"
135 value: "newValue"
136 }
137 })
138 { name, inner { key, value }, stupidInner { key, value }}
139 }`, &resp)
140 require.NoError(t, err)
141
142 require.Equal(t, resp.UpdatedPtrToPtr.Name, "oldName")
143 require.NotNil(t, resp.UpdatedPtrToPtr.Inner)
144 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Key, "oldKey")
145 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Value, "oldValue")
146 require.NotNil(t, resp.UpdatedPtrToPtr.StupidInner)
147 require.NotNil(t, ******resp.UpdatedPtrToPtr.StupidInner)
148 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Key, "newKey")
149 require.Equal(t, (******resp.UpdatedPtrToPtr.StupidInner).Value, "newValue")
150 })
151
152 t.Run("many pointers input null", func(t *testing.T) {
153 var resp UpdatePtrToPtrResults
154
155 err := c.Post(`mutation { updatePtrToPtr(input: { stupidInner: null }) { name, inner { key, value }, stupidInner { key, value }}}`, &resp)
156 require.NoError(t, err)
157
158 require.Equal(t, resp.UpdatedPtrToPtr.Name, "oldName")
159 require.NotNil(t, resp.UpdatedPtrToPtr.Inner)
160 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Key, "oldKey")
161 require.Equal(t, resp.UpdatedPtrToPtr.Inner.Value, "oldValue")
162 require.Nil(t, resp.UpdatedPtrToPtr.StupidInner)
163 })
164 }
165
166 func nest7(in *PtrToPtrInner) *******PtrToPtrInner {
167 si2 := &in
168 si3 := &si2
169 si4 := &si3
170 si5 := &si4
171 si6 := &si5
172 si7 := &si6
173
174 return si7
175 }
176
View as plain text