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> /// Attempts to create a qualified input argument for the supplied schema field. /// </summary> /// <param name="argument">The argument defined on schema that needs to have /// an input value created fro.</param> /// <returns>Task.</returns> public ArgumentGenerationResult CreateInputArgument(IGraphFieldArgument argument) { Validation.ThrowIfNull(argument, nameof(argument)); if (!_suppliedArguments.ContainsKey(argument.Name)) { return(new ArgumentGenerationResult(new ResolvedInputArgumentValue(argument.Name, argument.DefaultValue))); } var coreValue = _suppliedArguments[argument.Name].Value; var resolver = _inputResolverGenerator.CreateResolver(coreValue.OwnerArgument.TypeExpression); if (this.ShouldDeferResolution(coreValue)) { return(new ArgumentGenerationResult(new DeferredInputArgumentValue(coreValue, resolver))); } try { var data = resolver.Resolve(coreValue); return(new ArgumentGenerationResult(new ResolvedInputArgumentValue(coreValue.OwnerArgument.Name, data))); } catch (UnresolvedValueException svce) { var message = new GraphExecutionMessage( GraphMessageSeverity.Critical, svce.Message, Constants.ErrorCodes.INVALID_ARGUMENT, coreValue.OwnerArgument.Value.ValueNode.Location.AsOrigin(), exception: svce.InnerException); return(new ArgumentGenerationResult(message)); } catch (Exception ex) { var message = new GraphExecutionMessage( GraphMessageSeverity.Critical, "Invalid argument value.", Constants.ErrorCodes.INVALID_ARGUMENT, coreValue.OwnerArgument.Value.ValueNode.Location.AsOrigin(), ex); return(new ArgumentGenerationResult(message)); } }