Ejemplo n.º 1
0
        private IEnumerable <ArgumentDescription> CreateArguments()
        {
            var descriptions = new Dictionary <string, ArgumentDescription>();

            foreach (ArgumentDescription descriptor in FieldDescription.Arguments)
            {
                descriptions[descriptor.Name] = descriptor;
            }

            if (FieldDescription.Member != null && FieldDescription.Member is MethodInfo m)
            {
                foreach (ParameterInfo parameter in m.GetParameters())
                {
                    string argumentName = parameter.GetGraphQLName();
                    if (!descriptions.ContainsKey(argumentName) &&
                        IsArgumentType(parameter))
                    {
                        var argumentDescriptor =
                            new ArgumentDescriptor(argumentName,
                                                   parameter.ParameterType);
                        descriptions[argumentName] = argumentDescriptor
                                                     .CreateDescription();
                    }
                }
            }

            return(descriptions.Values);
        }
        protected void Argument(string name, Action <IArgumentDescriptor> argument)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(
                          "The argument name cannot be null or empty.",
                          nameof(name));
            }

            if (!ValidationHelper.IsFieldNameValid(name))
            {
                throw new ArgumentException(
                          "The specified name is not a valid GraphQL argument name.",
                          nameof(name));
            }

            if (argument == null)
            {
                throw new ArgumentNullException(nameof(argument));
            }

            var descriptor = new ArgumentDescriptor(name);

            argument(descriptor);
            FieldDescription.Arguments.Add(descriptor.CreateDescription());
        }
        internal static void DiscoverArguments(
            ICollection <ArgumentDescription> arguments,
            MemberInfo member)
        {
            if (arguments == null)
            {
                throw new ArgumentNullException(nameof(arguments));
            }

            var processed = new HashSet <NameString>();

            foreach (ArgumentDescription description in arguments)
            {
                processed.Add(description.Name);
            }

            if (member is MethodInfo method)
            {
                foreach (ParameterInfo parameter in method.GetParameters())
                {
                    string argumentName = parameter.GetGraphQLName();
                    if (IsArgumentType(method, parameter) &&
                        processed.Add(argumentName))
                    {
                        var argumentDescriptor = new ArgumentDescriptor(
                            argumentName, parameter.ParameterType);

                        argumentDescriptor.Description(
                            parameter.GetGraphQLDescription());

                        arguments.Add(argumentDescriptor.CreateDescription());
                    }
                }
            }
        }
        public void GetName()
        {
            // act
            var descriptor = new ArgumentDescriptor("args");

            // assert
            Assert.Equal("args", descriptor.CreateDescription().Name);
        }
        public void GetNameAndType()
        {
            // act
            var descriptor = new ArgumentDescriptor("args", typeof(string));

            // assert
            ArgumentDescription description = descriptor.CreateDescription();

            Assert.Equal("args", description.Name);
            Assert.Equal(typeof(string), description.TypeReference.ClrType);
        }
        public void SetDescription()
        {
            // arrange
            string expectedDescription = Guid.NewGuid().ToString();
            var    descriptor          = new ArgumentDescriptor("Type");

            // act
            ((IArgumentDescriptor)descriptor)
            .Description(expectedDescription);

            // assert
            Assert.Equal(expectedDescription,
                         descriptor.CreateDescription().Description);
        }
        public void SetTypeInstance()
        {
            // arrange
            var descriptor = new ArgumentDescriptor("Type");

            // act
            ((IArgumentDescriptor)descriptor).Type(new StringType());

            // assert
            ArgumentDescription description = descriptor.CreateDescription();
            TypeReference       typeRef     = description.TypeReference;

            Assert.IsType <StringType>(typeRef.SchemaType);
        }
        public void SetDefaultValueNull()
        {
            // arrange
            var descriptor = new ArgumentDescriptor("args");

            // act
            ((IArgumentDescriptor)descriptor).DefaultValue(null);

            // assert
            ArgumentDescription description = descriptor.CreateDescription();

            Assert.Equal(NullValueNode.Default, description.DefaultValue);
            Assert.Null(description.NativeDefaultValue);
        }
        protected void Argument(
            NameString name,
            Action <IArgumentDescriptor> argument)
        {
            if (argument == null)
            {
                throw new ArgumentNullException(nameof(argument));
            }

            var descriptor = new ArgumentDescriptor(
                name.EnsureNotEmpty(nameof(name)));

            argument(descriptor);
            FieldDescription.Arguments.Add(descriptor.CreateDescription());
        }
Ejemplo n.º 10
0
        public void SchemaTypesOverwriteDotNetTypes()
        {
            // arrange
            var descriptor = new ArgumentDescriptor("Type");

            // act
            ((IArgumentDescriptor)descriptor)
            .Type <NativeType <IReadOnlyDictionary <string, string> > >()
            .Type <ListType <StringType> >();

            // assert
            ArgumentDescription description = descriptor.CreateDescription();
            TypeReference       typeRef     = description.TypeReference;

            Assert.Equal(typeof(ListType <StringType>), typeRef.ClrType);
        }
Ejemplo n.º 11
0
        public void OverwriteDefaultValueLiteralWithNativeDefaultValue()
        {
            // arrange
            var descriptor = new ArgumentDescriptor("args");

            // act
            ((IArgumentDescriptor)descriptor)
            .DefaultValue(new StringValueNode("123"))
            .DefaultValue("string");

            // assert
            ArgumentDescription description = descriptor.CreateDescription();

            Assert.Null(description.DefaultValue);
            Assert.Equal("string", description.NativeDefaultValue);
        }
Ejemplo n.º 12
0
        public void SetDefaultValueAndInferType()
        {
            // arrange
            var descriptor = new ArgumentDescriptor("args");

            // act
            ((IArgumentDescriptor)descriptor).DefaultValue("string");

            // assert
            ArgumentDescription description = descriptor.CreateDescription();

            Assert.Equal(typeof(string),
                         description.TypeReference.ClrType);
            Assert.Equal("string",
                         description.NativeDefaultValue);
        }
Ejemplo n.º 13
0
        public void SettingTheNativeDefaultValueToNullCreatesNullLiteral()
        {
            // arrange
            var descriptor = new ArgumentDescriptor("args");

            // act
            ((IArgumentDescriptor)descriptor)
            .DefaultValue(new StringValueNode("123"))
            .DefaultValue("string")
            .DefaultValue(null);

            // assert
            ArgumentDescription description = descriptor.CreateDescription();

            Assert.IsType <NullValueNode>(description.DefaultValue);
            Assert.Null(description.NativeDefaultValue);
        }