public async Task <DmnResult> Evaluate(string key, DmnRequest request) { var stringTask = client.PostAsync($"{restApiEndpoint}/decision-definition/key/{key}/evaluate", new StringContent(JsonConvert.SerializeObject(request, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore } ), Encoding.UTF8, "application/json")); var msg = await stringTask; var content = await msg.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <DmnResult>(content)); }
static void Main(string[] args) { DmnClient client = null; Parser.Default.ParseArguments <Options>(args).WithParsed(o => { switch (o.operation) { case "create": client = new DmnClient(o.Endpoint); var res = client.GetDefinition(o.dmnKey).Result; var def = DmnParser.ParseString(res.DmnXml); System.IO.File.WriteAllText(o.Markdown, "# Decisions\n"); foreach (var decision in def.Decisions) { var table = createMarkdownTable(decision.Id, decision.DecisionTable); System.IO.File.AppendAllText(o.Markdown, table + "\n"); } break; case "test": client = new DmnClient(o.Endpoint); var md = System.IO.File.ReadAllLines(o.Markdown); var mode1 = 0; var s = 0; var e = 0; var table1 = ""; IEnumerable <string> columns = null; IEnumerable <string> values = null; for (int i = 0; i < md.Length; i++) { switch (mode1) { case 0: // look for start table tag if (md[i].StartsWith("## dmn:")) { table1 = md[i].Substring(7); mode1 = 1; //i++; } break; case 1: // extract columns columns = md[i].Split('|', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).AsEnumerable(); i = i + 1; // skip header seperator mode1 = 2; break; case 2: // perform test if (!md[i].Trim().StartsWith("|")) { mode1 = 0; // EOT md[i] = "#### last run: " + DateTime.Now; break; } values = md[i].Split('|', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).Select(y => y.TrimEnd('"')).Select(z => z.TrimStart('"')).AsEnumerable(); var req = new DmnRequest(); req.Variables = new Dictionary <string, Variable>(); for (int k = 0; k < columns.Count() - 1; k++) { if (columns.ElementAt(k).StartsWith('*')) { continue; } req.Variables.Add( columns.ElementAt(k), new Variable() { Value = values.ElementAt(k) } ); } ; var json = JsonConvert.SerializeObject( req, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); var result = client.Evaluate(table1, req).Result; for (int p = 0; p < result.Count(); p++) { var m = result[p]; var index = columns.TakeWhile(x => x != "*" + m.Keys.First().ToString()).Count(); var expected = values.ElementAt(index); var testResult = (expected == m[m.Keys.First().ToString()].Value.ToString()); if (testResult) { md[i] = md[i].Replace(Failed, Success); md[i] = md[i].Replace(Untested, Success); } else { md[i] = md[i].Replace(Success, Failed); md[i] = md[i].Replace(Untested, Failed); break; } } break; } } // write back the testfile. System.IO.File.WriteAllLines(o.Markdown, md); break; } return; int mode = 0; List <DmnTestCase> cases = new List <DmnTestCase>(); DmnTestCase current = new DmnTestCase(); string[] fieldNames = null; string key = ""; // read the markdown file. var j = 0; var text = System.IO.File.ReadAllText(o.Markdown); for (int i = 0; i < text.Length; i++) { switch (mode) { case 0: // searching for test scenario Console.Write("Searching for test scenario... "); if (i + 7 > text.Length) { mode = 4; break; } if (text.Substring(i, 7) == "## dmn:") { j = i + 7; i = text.IndexOf('\n', j); mode = 1; key = text.Substring(j, i - j); Console.Write($"found scenario {key} "); } current.Key = key; break; case 1: // searching for starting table if (text[i] == '|') { mode = 2; } break; case 2: // header mode j = i; i = text.IndexOf('\n', j); fieldNames = text.Substring(j, i - j - 1).Split('|').Select(x => x.Trim()).ToArray(); i = text.IndexOf('\n', i + 1); mode = 3; break; case 3: // extracting test cases for the current scenario if (text[i] != '|') { cases.Add(current); current = new DmnTestCase(); mode = 0; break; } j = text.IndexOf('\n', i + 1); var values = text.Substring(i + 1, j - i).Split('|').Select(x => x.Trim()).ToArray(); var req1 = new DmnRequest(); for (int l = 0; l < fieldNames.Length - 1; l++) { double r = 0; if (double.TryParse(values[l], out r)) { req1.Variables.Add(fieldNames[l], new Variable() { Value = r }); } else { req1.Variables.Add(fieldNames[l], new Variable() { Value = values[l] }); } } i = j; current.Requests.Add(req1); break; case 4: // done. i = text.Length; break; } } }); // var request = new DmnRequest(); // request.Variables.Add("amount", new Variable() { Value = 200 }); // request.Variables.Add("invoiceCategory", new Variable() { Value = "Travel Expenses" }); // var req = JsonConvert.SerializeObject(request); // var client = new DmnClient("http://192.168.99.112:8080/engine-rest"); // var res = client.GetDefinition("invoiceClassification").Result; // var def = DmnParser.ParseString(res.DmnXml); // var inp = def.Decisions[0].DecisionTable.Inputs; //var result = client.Evaluate("invoiceClassification",request).Result; }