Ejemplo n.º 1
0
        public void ListOfListValueResolver()
        {
            var innerList1 = new QueryListInputValue(new FakeSyntaxNode());

            innerList1.ListItems.Add(new QueryScalarInputValue(new FakeSyntaxNode(), "15", ScalarValueType.Number));
            innerList1.ListItems.Add(new QueryScalarInputValue(new FakeSyntaxNode(), "12", ScalarValueType.Number));

            var innerList2 = new QueryListInputValue(new FakeSyntaxNode());

            innerList2.ListItems.Add(new QueryScalarInputValue(new FakeSyntaxNode(), "30", ScalarValueType.Number));
            innerList2.ListItems.Add(new QueryScalarInputValue(new FakeSyntaxNode(), "40", ScalarValueType.Number));

            var outerList = new QueryListInputValue(new FakeSyntaxNode());

            outerList.ListItems.Add(innerList1);
            outerList.ListItems.Add(innerList2);

            var typeExpression = GraphTypeExpression.FromDeclaration("[[Int]]");
            var generator      = new InputResolverMethodGenerator(this.CreateSchema());

            var resolver = generator.CreateResolver(typeExpression);
            var result   = resolver.Resolve(outerList) as IEnumerable;

            CollectionAssert.AreEqual(new List <IEnumerable <int> > {
                new List <int> {
                    15, 12
                }, new List <int> {
                    30, 40
                }
            }, result);
        }
Ejemplo n.º 2
0
        public void DefaultScalarValueResolvers_InvalidInputValue(string expressionText, string inputText)
        {
            var generator = new InputResolverMethodGenerator(this.CreateSchema());

            var text        = inputText?.AsMemory() ?? ReadOnlyMemory <char> .Empty;
            var source      = new SourceText(text);
            var tokenStream = Lexer.Tokenize(source);

            tokenStream.Prime();
            InputValueNode node = null;

            if (!tokenStream.EndOfStream)
            {
                var maker = ValueMakerFactory.CreateMaker(tokenStream.ActiveToken);
                if (maker != null)
                {
                    node = maker.MakeNode(tokenStream) as InputValueNode;
                }
            }

            var inputValue     = QueryInputValueFactory.CreateInputValue(node);
            var typeExpression = GraphTypeExpression.FromDeclaration(expressionText);
            var resolver       = generator.CreateResolver(typeExpression);

            Assert.Throws <UnresolvedValueException>(() =>
            {
                resolver.Resolve(inputValue);
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Converts the input variable collection to their type-expression-bound values in context of the
        /// operation being executed.
        /// </summary>
        /// <param name="inputVariables">The input variables.</param>
        /// <returns>IResolvedVariableCollection.</returns>
        public IResolvedVariableCollection Resolve(IInputVariableCollection inputVariables)
        {
            if (inputVariables == null || inputVariables.Count == 0)
            {
                return(ResolvedVariableCollection.Empty);
            }

            var resolverGenerator = new InputResolverMethodGenerator(_schema);
            var result            = new ResolvedVariableCollection();

            foreach (var variable in _operation.DeclaredVariables.Values)
            {
                var resolver = resolverGenerator.CreateResolver(variable.TypeExpression);

                IResolvableItem resolvableItem = null;
                var             found          = inputVariables.TryGetVariable(variable.Name, out var suppliedValue);
                resolvableItem = found ? suppliedValue : variable.Value as IResolvableItem;

                var resolvedValue = resolver.Resolve(resolvableItem);

                var resolvedVariable = new ResolvedVariable(variable.Name, variable.TypeExpression, resolvedValue);
                result.AddVariable(resolvedVariable);
            }

            return(result);
        }
Ejemplo n.º 4
0
        public void BasicListValueResolver()
        {
            var sourceList = new QueryListInputValue(new FakeSyntaxNode());

            sourceList.ListItems.Add(new QueryScalarInputValue(new FakeSyntaxNode(), "15", ScalarValueType.Number));
            sourceList.ListItems.Add(new QueryScalarInputValue(new FakeSyntaxNode(), "12", ScalarValueType.Number));

            var typeExpression = GraphTypeExpression.FromDeclaration("[Int]");
            var generator      = new InputResolverMethodGenerator(this.CreateSchema());

            var resolver = generator.CreateResolver(typeExpression);
            var result   = resolver.Resolve(sourceList) as IEnumerable;

            CollectionAssert.AreEqual(new List <int> {
                15, 12
            }, result);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ArgumentGenerator" /> class.
 /// </summary>
 /// <param name="schema">The schema.</param>
 /// <param name="suppliedArguments">A collection of arguments passed on a user's query
 /// to be used first in the chain of object resolution for any created arguments.</param>
 public ArgumentGenerator(ISchema schema, IQueryInputArgumentCollection suppliedArguments)
 {
     _suppliedArguments      = Validation.ThrowIfNullOrReturn(suppliedArguments, nameof(suppliedArguments));
     _schema                 = Validation.ThrowIfNullOrReturn(schema, nameof(schema));
     _inputResolverGenerator = new InputResolverMethodGenerator(_schema);
 }