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); }
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); }); }
/// <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); }
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); }
/// <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); }