public void VariableHandling(string ruleJson, string dataJson, object expectedResult) { var rule = JsonFrom(ruleJson); var localData = JsonFrom(dataJson); var jsonLogic = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule} against {localData}"); // Act var actualResult = jsonLogic.Apply(rule, localData); Assert.Equal(expectedResult, actualResult); }
public void EqualityAndInequalityHandling(string ruleJson, object expectedResult) { var rule = JsonFrom(ruleJson); var jsonLogic = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule}"); // Act var actualResult = jsonLogic.Apply(rule, Data); Assert.Equal(expectedResult, actualResult); }
public void Issue3_FilterBehaviorTest() { var localData = JsonConvert.DeserializeObject(@"[ { `Prop1`: { `PropA`: 5 }, `Prop2`: { `PropB`: 18 } }, { `Prop1`: { `PropA`: 1 }, `Prop2`: { `PropB`: 35 } } ]".Replace('`', '"')); var rules = JObject.Parse(@"{ `filter`: [ { `var`: `` }, { `and`: [ { `>=`: [ { `var`: `Prop1.PropA` }, 1 ] }, { `>=`: [ { `var`: `Prop2.PropB` }, 19 ] } ] } ] }".Replace('`', '"')); var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rules} against {localData}"); // Act var result = evaluator.Apply(rules, localData); // Assert Assert.Equal(1, (result as object[]).Length); }
public void PassesJsonLogicDotComTests(string ruleJson, string dataJson, string expectedJson) { var rule = JsonFrom(ruleJson); var data = GetDataObject(JsonFrom(dataJson)); var expected = GetDataObject(JsonFrom(expectedJson)); var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule} against {data}"); var result = evaluator.Apply(rule, data); Assert.Equal(expected, result); }
public void ApplyWithNamingConventionConvertion(NamingConventionEnum ruleNamingConvention, NamingConventionEnum dataNamingConvention, string ruleJson, object data, object expectedResult) { // Arrange var rules = JsonFrom(ruleJson); var jsonLogic = new JsonLogicEvaluator(EvaluateOperators.Default(ruleNamingConvention, dataNamingConvention)); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rules} against {data}"); // Act var actualResult = jsonLogic.Apply(rules, data); // Act & Assert Assert.Equal(expectedResult, actualResult); }
public void SimpleUseCase() { // Arrange string jsonText = "{\">\": [{\"var\": \"MyNumber\"}, 3]}"; var rule = JObject.Parse(jsonText); object localData = new { MyNumber = 8 }; var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule} against {localData}"); // Act var result = evaluator.Apply(rule, localData); // Assert Assert.True((bool)result); }
public void Issue2_Var_In_With_JObject() { // Arrange string ruleJson = "{`in`:[{`var`:`marital_status`},[`Single`,`Married`,`Divorced`,`Widowed`,`Separated`]]}" .Replace('`', '"'); string dataJson = "{`marital_status`: `Divorced`}".Replace('`', '"'); var rule = JObject.Parse(ruleJson); var localData = JObject.Parse(dataJson); var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule} against {localData}"); // Act var result = evaluator.Apply(rule, localData); // Assert Assert.True((bool)result); }
public void ConjunctExpression() { // Arrange string dataJson = "{ `temp` : 100, `pie` : { `filling` : `apple` } }".Replace('`', '"'); string ruleJson = "{ `and` : [ {`<` : [ { `var` : `temp` }, 110 ]}, {`==` : [ { `var` : `pie.filling` }, `apple` ] }] }" .Replace('`', '"'); var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default()); var rule = JObject.Parse(ruleJson); var localData = JObject.Parse(dataJson); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule} against {localData}"); // Act var result = evaluator.Apply(rule, localData); // Assert Assert.True((bool)result); }
public void NestedFilterVariableAccess(string ruleJson, string dataJson, string expectedJson) { // Arrange dataJson = dataJson.Replace('`', '"'); ruleJson = ruleJson.Replace('`', '"'); expectedJson = expectedJson.Replace('`', '"'); var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default()); var rule = JsonFrom(ruleJson); var localData = GetDataObject(JsonFrom(dataJson)); var expectedResult = GetDataObject(JsonFrom(expectedJson)); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rule} against {localData}"); // Act var result = evaluator.Apply(rule, localData); // Assert Assert.Equal(expectedResult, result); }
public void Apply(string argsJson, object expectedResult) { // Arrange var rules = JsonFrom(argsJson); var jsonLogic = new JsonLogicEvaluator(EvaluateOperators.Default()); _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rules} against {Data}"); // Act var result = jsonLogic.Apply(rules, Data); // Assert if (expectedResult is Array) { string[] expectedResultArr = (expectedResult as Array).Cast <object>().Select(i => i.ToString()).ToArray(); string[] resultArr; if (result is Array) { resultArr = (result as Array).Cast <object>().Select(i => i.ToString()).ToArray(); } else if (result is IEnumerable <object> ) { resultArr = (result as IEnumerable <object>).Select(i => i.ToString()).ToArray(); } else { throw new Exception("Cannot cast resultArr"); } Assert.Equal(expectedResultArr, resultArr); } else { Assert.Equal(expectedResult, result); } }
public void ApplyThrowsException(string rulesJson, Type exceptionType) { // Arrange var rules = JsonFrom(rulesJson); var jsonLogic = new JsonLogicEvaluator(EvaluateOperators.Default()); object result = null; _output.WriteLine($"{MethodBase.GetCurrentMethod().Name}() Testing {rules} against {Data}"); // Act & Assert try { result = jsonLogic.Apply(rules, Data); } catch (Exception e) { Assert.Equal(exceptionType, e.GetType()); } finally { Assert.Null(result); } }