예제 #1
0
        public void converts_string_to_string_value()
        {
            var result = new StringGraphType().ToAST("test");

            result.ShouldNotBeNull();
            result.ShouldBeOfType <StringValue>().Value.ShouldBe("test");
        }
예제 #2
0
        public void converts_null_to_null()
        {
            object value  = null;
            var    result = new StringGraphType().ToAST(value);

            result.ShouldBeOfType <NullValue>();
        }
예제 #3
0
        public ObjectGraphType CreateOrderType()
        {
            var tableType = new ObjectGraphType();

            tableType.Name = "Order";

            var columnType = new StringGraphType();

            tableType.Field("col1", columnType,
                            description: "",
                            resolve: ctx =>
            {
                var resolver = (ReadonlyResolveFieldContext)ctx;
                return(((Row)resolver.Source).Col1);
            });
            return(tableType);
        }
예제 #4
0
        private IGraphTypeOfGraphQLNet Convert(IGraphType graphType, bool input, ISchema root)
        {
            try
            {
                //Union
                if (graphType.OtherTypes.Any() && !input)
                {
                    var list = new List <IObjectGraphType>();
                    var convertedGraphType = (IObjectGraphType)Convert(_graphTypeProvider.GetGraphType(graphType.Type, false, false), false, root);
                    convertedGraphType.IsTypeOf = _ => true;
                    root.RegisterType(convertedGraphType);
                    list.Add(convertedGraphType);
                    foreach (var type in graphType.OtherTypes)
                    {
                        convertedGraphType          = (IObjectGraphType)Convert(_graphTypeProvider.GetGraphType(type, false, false), false, root);
                        convertedGraphType.IsTypeOf = _ => true;
                        root.RegisterType(convertedGraphType);
                        list.Add(convertedGraphType);
                    }
                    var unionType = new UnionGraphType {
                        PossibleTypes = list
                    };
                    root.RegisterType(unionType);
                    return(unionType);
                }

                //Enumerable
                if (graphType.IsEnumerable)
                {
                    var elementGraphType = _graphTypeProvider.GetGraphType(graphType.Type, false, false);
                    var listGraphType    = new ListGraphType(Convert(elementGraphType, input, root));
                    return(graphType.IsRequired
                        ? new NonNullGraphType(listGraphType)
                        : (IGraphTypeOfGraphQLNet)listGraphType);
                }

                //Scalar
                if (!graphType.Fields.Any())
                {
                    if (graphType.IsEnum)
                    {
                        var enumGraphType = typeof(EnumerationGraphType <>).MakeGenericType(graphType.Type);
                        enumGraphType = graphType.IsRequired
                            ? typeof(NonNullGraphType <>).MakeGenericType(enumGraphType)
                            : enumGraphType;
                        return((IGraphTypeOfGraphQLNet)Activator.CreateInstance(enumGraphType));
                    }

                    if (graphType.Type == typeof(string))
                    {
                        var stringType = new StringGraphType();
                        return(graphType.IsRequired
                            ? (IGraphTypeOfGraphQLNet) new NonNullGraphType(stringType)
                            : stringType);
                    }
                    var scalarType = graphType.Type.IsGenericType && graphType.Type.GetGenericTypeDefinition() == typeof(Nullable <>)
                       ? GraphTypeTypeRegistry.Get(graphType.Type.GenericTypeArguments[0])
                       : GraphTypeTypeRegistry.Get(graphType.Type);

                    if (null != scalarType)
                    {
                        var resolvedGraphType = (IGraphTypeOfGraphQLNet)Activator.CreateInstance(scalarType);
                        return(graphType.IsRequired
                            ? new NonNullGraphType(resolvedGraphType)
                            : resolvedGraphType);
                    }

                    throw new GraphException($"Unknown GraphType '{graphType.Name}'");
                }

                //Complex
                var objectGraphType = input
                    ? (IComplexGraphType) new InputObjectGraphType {
                    Name = $"{graphType.Name}Input"
                }
                    : new ObjectGraphType {
                    Name = graphType.Name
                };
                foreach (var field in graphType.Fields.Values)
                {
                    var fieldType = new FieldType
                    {
                        Name         = field.Name,
                        ResolvedType = Convert(field.GraphType, input, root)
                    };
                    if (field.Arguments.Any())
                    {
                        fieldType.Arguments = new QueryArguments();
                    }
                    foreach (var argument in field.Arguments.Values)
                    {
                        var queryArgument = new QueryArgument(Convert(argument.GraphType, input, root))
                        {
                            Name = argument.Name
                        };
                        fieldType.Arguments.Add(queryArgument);
                    }
                    objectGraphType.AddField(fieldType);
                }

                return(graphType.IsRequired
                    ? (IGraphTypeOfGraphQLNet) new NonNullGraphType(objectGraphType)
                    : objectGraphType);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
예제 #5
0
        private IGraphTypeOfGraphQLNet Convert(IGraphType graphType)
        {
            try
            {
                //Enumerable
                if (graphType.IsEnumerable)
                {
                    var elementGraphType = _graphTypeProvider.GetGraphType(graphType.Type, false, false);
                    var listGraphType    = new ListGraphType(Convert(elementGraphType));
                    return(graphType.IsRequired
                        ? new NonNullGraphType(listGraphType)
                        : (IGraphTypeOfGraphQLNet)listGraphType);
                }

                //Scalar
                if (!graphType.Fields.Any())
                {
                    if (graphType.IsEnum)
                    {
                        var enumGraphType = typeof(EnumerationGraphType <>).MakeGenericType(graphType.Type);
                        enumGraphType = graphType.IsRequired
                            ? typeof(NonNullGraphType <>).MakeGenericType(enumGraphType)
                            : enumGraphType;
                        return((IGraphTypeOfGraphQLNet)Activator.CreateInstance(enumGraphType));
                    }

                    if (graphType.Type == typeof(string))
                    {
                        var stringType = new StringGraphType();
                        return(graphType.IsRequired
                            ? (IGraphTypeOfGraphQLNet) new NonNullGraphType(stringType)
                            : stringType);
                    }
                    var scalarType = graphType.Type.IsGenericType && graphType.Type.GetGenericTypeDefinition() == typeof(Nullable <>)
                       ? GraphTypeTypeRegistry.Get(graphType.Type.GenericTypeArguments[0])
                       : GraphTypeTypeRegistry.Get(graphType.Type);

                    if (null != scalarType)
                    {
                        var resolvedGraphType = (IGraphTypeOfGraphQLNet)Activator.CreateInstance(scalarType);
                        return(graphType.IsRequired
                            ? new NonNullGraphType(resolvedGraphType)
                            : resolvedGraphType);
                    }
                    throw new GraphException($"Unknown GraphType '{graphType.Name}'");
                }

                //Complex
                var objectGraphType = new ObjectGraphType {
                    Name = graphType.Name
                };
                foreach (var field in graphType.Fields.Values)
                {
                    var fieldType = new FieldType
                    {
                        Name         = field.Name,
                        ResolvedType = Convert(field.GraphType)
                    };
                    if (field.Arguments.Any())
                    {
                        fieldType.Arguments = new QueryArguments();
                    }
                    foreach (var argument in field.Arguments.Values)
                    {
                        var queryArgument = new QueryArgument(Convert(argument.GraphType))
                        {
                            Name = argument.Name
                        };
                        fieldType.Arguments.Add(queryArgument);
                    }
                    objectGraphType.AddField(fieldType);
                }

                return(graphType.IsRequired
                    ? (IGraphTypeOfGraphQLNet) new NonNullGraphType(objectGraphType)
                    : objectGraphType);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
예제 #6
0
 public StringGraphTypeTests()
 {
     _type = new StringGraphType();
 }