示例#1
0
        public void GetFields()
        {
            /* Given */
            var namedTypeName = Schema.Query.Name;

            /* When */
            var fields = Schema.GetFields(namedTypeName);

            /* Then */
            Assert.Single(
                fields,
                kv => kv.Key == "name" && (ScalarType)kv.Value.Type == ScalarType.String);
        }
示例#2
0
        private static void MergeComplexTypeFields(ISchema right, SchemaBuilder builder, ComplexType rightType)
        {
            if (builder.TryGetType <ComplexType>(rightType.Name, out var leftType))
            {
                var rightTypeFields = right.GetFields(rightType.Name);

                foreach (var rightTypeField in rightTypeFields)
                {
                    builder.Connections(connect =>
                    {
                        // if field already exists skip it
                        if (connect.TryGetField(leftType, rightTypeField.Key, out _))
                        {
                            return;
                        }

                        // include field
                        connect.Include(leftType, rightTypeField);

                        // include resolver
                        var resolver = right.GetResolver(rightType.Name, rightTypeField.Key);

                        if (resolver != null)
                        {
                            connect.GetOrAddResolver(leftType, rightTypeField.Key)
                            .Run(resolver);
                        }

                        // include subscriber
                        var subscriber = right.GetSubscriber(rightType.Name, rightTypeField.Key);

                        if (subscriber != null)
                        {
                            connect.GetOrAddSubscriber(leftType, rightTypeField.Key)
                            .Run(subscriber);
                        }
                    });
                }
            }
            else
            {
                throw new SchemaBuilderException(
                          rightType.Name,
                          $"Cannot merge fields of {rightType}. Type is now known by builder. " +
                          $"Call MergeComplexType first.");
            }
        }
示例#3
0
        private static void MergeComplexType(ISchema right, SchemaBuilder builder, ComplexType rightType)
        {
            if (builder.TryGetType <ComplexType>(rightType.Name, out var leftType))
            {
                var rightTypeFields = right.GetFields(rightType.Name);

                foreach (var rightTypeField in rightTypeFields)
                {
                    builder.Connections(connect =>
                    {
                        if (connect.TryGetField(leftType, rightTypeField.Key, out _))
                        {
                            return;
                        }

                        connect.Include(leftType, new[] { rightTypeField });

                        var resolver = right.GetResolver(rightType.Name, rightTypeField.Key);

                        if (resolver != null)
                        {
                            connect.GetOrAddResolver(leftType, rightTypeField.Key)
                            .Run(resolver);
                        }

                        var subscriber = right.GetSubscriber(rightType.Name, rightTypeField.Key);

                        if (subscriber != null)
                        {
                            connect.GetOrAddSubscriber(leftType, rightTypeField.Key)
                            .Run(subscriber);
                        }
                    });
                }
            }
            else
            {
                builder
                .Include(rightType)
                .Connections(connect =>
                {
                    var fields = right.GetFields(rightType.Name).ToList();
                    connect.Include(rightType, fields);

                    foreach (var rightTypeField in fields)
                    {
                        var resolver = right.GetResolver(rightType.Name, rightTypeField.Key);

                        if (resolver != null)
                        {
                            connect.GetOrAddResolver(rightType, rightTypeField.Key)
                            .Run(resolver);
                        }

                        var subscriber = right.GetSubscriber(rightType.Name, rightTypeField.Key);

                        if (subscriber != null)
                        {
                            connect.GetOrAddSubscriber(rightType, rightTypeField.Key)
                            .Run(subscriber);
                        }
                    }
                });
            }
        }