public async Task AssignWithOperationVariableNotExisting(VariableOperation operation, object expected) { Mock <IInstanceNode> instancenode = new Mock <IInstanceNode>(); instancenode.Setup(s => s.Execute(It.IsAny <WorkflowInstanceState>(), It.IsAny <CancellationToken>())) .ReturnsAsync(11); Mock <IScriptCompiler> compiler = new Mock <IScriptCompiler>(); compiler.Setup(s => s.CompileCode(It.IsAny <string>(), ScriptLanguage.NCScript)).Returns <string, ScriptLanguage>((code, language) => new ScriptParser().Parse(code)); AssignStateNode node = new AssignStateNode(instancenode.Object, "result", operation, compiler.Object); Dictionary <string, object> variables = new Dictionary <string, object>(); await node.Execute(new WorkflowInstanceState(new WorkflowIdentifier(), null, new StateVariableProvider(variables), s => null, null, null, false), CancellationToken.None); Assert.That(variables.ContainsKey("result")); Assert.AreEqual(expected, variables["result"]); }
async Task <IInstanceNode> BuildNode(ScriptLanguage?language, NodeData node, Guid?nodeid = null) { nodeid ??= Guid.NewGuid(); IInstanceNode instance; switch (node.Type) { case NodeType.Start: instance = new StartNode(nodeid.Value, node.Name, node.Parameters.Deserialize <StartParameters>(), compiler); break; case NodeType.Expression: ExecuteExpressionParameters parameters = node.Parameters.Deserialize <ExecuteExpressionParameters>(); instance = new ExpressionNode(nodeid.Value, node.Name, await compiler.CompileCodeAsync(parameters.Code, parameters.Language)); break; case NodeType.Script: instance = new ScriptNode(nodeid.Value, node.Name, node.Parameters.Deserialize <CallWorkableParameters>(), compiler, language); break; case NodeType.Workflow: instance = new WorkflowInstanceNode(nodeid.Value, node.Name, node.Parameters.Deserialize <CallWorkableParameters>(), compiler, language); break; case NodeType.BinaryOperation: BinaryOpParameters binparameters = node.Parameters.Deserialize <BinaryOpParameters>(); instance = new BinaryNode(nodeid.Value, node.Name, binparameters, compiler); break; case NodeType.Value: ValueParameters valueparameters = node.Parameters.Deserialize <ValueParameters>(); instance = new ValueNode(nodeid.Value, node.Name, valueparameters.Value, compiler); break; case NodeType.Suspend: instance = new SuspendNode(nodeid.Value, node.Name, node.Parameters.Deserialize <SuspendParameters>()); break; case NodeType.Call: instance = new CallNode(nodeid.Value, node.Name, node.Parameters.Deserialize <CallParameters>(), compiler); break; case NodeType.Iterator: instance = new IteratorNode(nodeid.Value, node.Name, node.Parameters.Deserialize <IteratorParameters>(), compiler); break; case NodeType.Log: instance = new LogNode(nodeid.Value, node.Name, compiler, node.Parameters.Deserialize <LogParameters>()); break; default: instance = new InstanceNode(nodeid.Value, node.Name); break; } if (!string.IsNullOrEmpty(node.Variable)) { instance = new AssignStateNode(instance, node.Variable, node.VariableOperation, compiler); } return(instance); }