public void TuplesBasicOperatorTest() { // rule DTO #1 var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; // rule DTO #2 var salesperson = new SalesPersonDTO { State = "PA", IsManager = true, MaximumDiscount = 1000.0000m }; // programatic mix in of claims rule and rule against the DTO user var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual","CarDTO"); var salePersonRule1 = new Rule("State", "PA", "Equals", "SalesPersonDTO"); var salePersonRule2 = new Rule("IsManager", "true", "Equals", "SalesPersonDTO"); var re = new TupleRuleEngine(); // Compile the rules as a seperate step Expression<Func<CarDTO, SalesPersonDTO, bool>> carRule1Expression = re.GetExpression<CarDTO, SalesPersonDTO>(carRule1); Expression<Func<CarDTO, SalesPersonDTO, bool>> salePersonRuleExpression1 = re.GetExpression<CarDTO, SalesPersonDTO>(salePersonRule1); Expression<Func<CarDTO, SalesPersonDTO, bool>> salePersonRuleExpression2 = re.GetExpression<CarDTO, SalesPersonDTO>(salePersonRule2); Expression<Func<CarDTO, SalesPersonDTO, bool>> compositeRule = carRule1Expression.Or(salePersonRuleExpression1).Or(salePersonRuleExpression2); Assert.AreEqual(true, compositeRule.Compile()(car, salesperson)); }
public void IdentityBasicOperatorTest() { // rule DTO var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; // programatic mix in of claims rule and rule against the DTO user var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual"); var claimRule = new Rule("@User", "S-1-5-21-2493390151-660934664-2262481224-513", "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"); var re = new IdentityRuleEngine(); // Compile the rules as a seperate step Expression<Func<CarDTO, IClaimsPrincipal, bool>> carRule1Expression = re.GetExpression<CarDTO>(carRule1); Expression<Func<CarDTO, IClaimsPrincipal, bool>> claimRuleExpression = re.GetExpression<CarDTO>(claimRule); Expression<Func<CarDTO, IClaimsPrincipal, bool>> compositeRule = carRule1Expression.Or(claimRuleExpression); // invoke the rules as a third step IClaimsPrincipal id = new ClaimsPrincipal(System.Threading.Thread.CurrentPrincipal); Assert.AreEqual(true,compositeRule.Compile()(car,id)); }
public void BasicOperatorTest() { // rule DTO var car = new CarDTO { Make = "Ford", Year=2010, Model="Expedition", AskingPrice=10000.0000m, SellingPrice=9000.0000m }; // build up some rules var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual"); var carRule2 = new Rule("AskingPrice", "10000.0000", "LessThanOrEqual"); var carRule3= new Rule("Make", "Ford", "Equals"); var carRule4 = new Rule("Model", "Ex", "StartsWith"); //gets the excursion, explorer, expedition -gass guzzlers var re = new RuleEngine(); // Compile the rules as a seperate step Func<CarDTO, bool> carRule1Compiled = re.Compile<CarDTO>(carRule1); Func<CarDTO, bool> carRule2Compiled = re.Compile<CarDTO>(carRule2); Func<CarDTO, bool> carRule3Compiled = re.Compile<CarDTO>(carRule3); Func<CarDTO, bool> carRule4Compiled = re.Compile<CarDTO>(carRule4); Assert.AreEqual(true,carRule1Compiled(car)); Assert.AreEqual(true,carRule2Compiled(car)); Assert.AreEqual(true,carRule3Compiled(car)); Assert.AreEqual(true,carRule4Compiled(car)); }
public void IdentityTupleBasicOperatorTest() { // rule DTO var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; var salesperson = new SalesPersonDTO { State = "PA", IsManager = true, MaximumDiscount = 1000.0000m }; // programatic mix in of claims rule and rule against the DTO for Car and SalesPerson var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual","CarDTO"); var claimRule = new Rule("@User", "S-1-5-21-2493390151-660934664-2262481224-513", "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"); var salePersonRule1 = new Rule("State", "PA", "Equals","SalesPersonDTO"); var salePersonRule2 = new Rule("IsManager", "true", "Equals", "SalesPersonDTO"); var re = new IdentityTupleRuleEngine(); // build Some Expressions Expression<Func<CarDTO, SalesPersonDTO,IClaimsPrincipal, bool>> carRule1Expression = re.GetExpression<CarDTO,SalesPersonDTO>(carRule1); Expression<Func<CarDTO, SalesPersonDTO, IClaimsPrincipal, bool>> claimRuleExpression = re.GetExpression<CarDTO, SalesPersonDTO>(claimRule); Expression<Func<CarDTO, SalesPersonDTO, IClaimsPrincipal, bool>> sp1Expression = re.GetExpression<CarDTO, SalesPersonDTO>(salePersonRule1); Expression<Func<CarDTO, SalesPersonDTO, IClaimsPrincipal, bool>> sp2Expression = re.GetExpression<CarDTO, SalesPersonDTO>(salePersonRule2); Expression<Func<CarDTO, SalesPersonDTO, IClaimsPrincipal, bool>> coumpoundExpr = carRule1Expression.Or(claimRuleExpression).Or(sp1Expression).Or(sp2Expression); IClaimsPrincipal id = new ClaimsPrincipal(System.Threading.Thread.CurrentPrincipal); Assert.AreEqual(true, coumpoundExpr.Compile()(car,salesperson,id)); }
public void PredicatesTest() { // rule DTO var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; // build up some rules var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual"); var carRule2 = new Rule("AskingPrice", "10000.0000", "LessThanOrEqual"); var carRule3 = new Rule("Make", "Ford", "Equals"); var carRule4 = new Rule("Model", "Ex", "StartsWith"); //gets the excursion, explorer, expedition -gas guzzlers var re = new RuleEngine(); // Compile the rules as a seperate step Expression<Func<CarDTO, bool>> carRule1Exp = re.GetExpression<CarDTO>(carRule1); Expression<Func<CarDTO, bool>> carRule2Exp = re.GetExpression<CarDTO>(carRule2); Expression<Func<CarDTO, bool>> carRule3Exp = re.GetExpression<CarDTO>(carRule3); Expression<Func<CarDTO, bool>> carRule4Exp = re.GetExpression<CarDTO>(carRule4); // join the rules with fluent syntax ala predicate builder Expression<Func<CarDTO, bool>> compundedRule = carRule1Exp.Or(carRule2Exp).Or(carRule3Exp).Or(carRule4Exp); Func<CarDTO, bool> compiledRule = compundedRule.Compile(); Assert.AreEqual(true, compiledRule(car), "car"); }
public void StoreSomeRules() { // rule DTO var car = new CarDTO { Make = "Ford", Year = 2010, Model = "Expedition", AskingPrice = 10000.0000m, SellingPrice = 9000.0000m }; // build up some rules var carRule1 = new Rule("Year", "2010", "GreaterThanOrEqual"); var re = new RuleEngine(); // Get the rule expressions Expression<Func<CarDTO, bool>> carRule1Exp =re.GetExpression<CarDTO>(carRule1); // Save a rule Expression to the the list re.LoadRule("carrule", carRule1Exp); Assert.AreEqual(true, (re.GetRule<CarDTO>("carrule").Compile()(car)), "This car is greater than or equal to year 2010 but failed to rule as such"); }