// addConnections adds connections fields to the object afterward to prevent from dead loops func (t types) addConnections(o *graphql.Object, idx resource.Index, r *resource.Resource) { // Add sub field references for name, def := range r.Schema().Fields { if ref, ok := def.Validator.(*schema.Reference); ok { sr, found := idx.GetResource(ref.Path, nil) if !found { log.Panicf("resource reference not found: %s", ref.Path) } o.AddFieldConfig(name, &graphql.Field{ Description: def.Description, Type: t.getObjectType(idx, sr), Args: getFArgs(def.Params), Resolve: getSubFieldResolver(name, sr, def), }) } } // Add sub resources for _, sr := range r.GetResources() { name := sr.Name() o.AddFieldConfig(name, &graphql.Field{ Description: fmt.Sprintf("Connection to %s", name), Type: graphql.NewList(t.getObjectType(idx, sr)), Args: listArgs, Resolve: getSubResourceResolver(sr), }) } }
func TestTypeSystem_DefinitionExample_IncludesFieldsThunk(t *testing.T) { var someObject *graphql.Object someObject = graphql.NewObject(graphql.ObjectConfig{ Name: "SomeObject", Fields: (graphql.FieldsThunk)(func() graphql.Fields { return graphql.Fields{ "f": &graphql.Field{ Type: graphql.Int, }, "s": &graphql.Field{ Type: someObject, }, } }), }) fieldMap := someObject.Fields() if !reflect.DeepEqual(fieldMap["s"].Type, someObject) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(fieldMap["s"].Type, someObject)) } }