...

Source file src/github.com/99designs/gqlgen/codegen/testserver/followschema/ptr_to_ptr_input_test.go

Documentation: github.com/99designs/gqlgen/codegen/testserver/followschema

     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