github.com/99designs/gqlgen@v0.17.45/codegen/testserver/singlefile/ptr_to_ptr_input_test.go (about) 1 package singlefile 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 }