public void AndOrTests() { var isHeavyOrExpensive = UserDefinedExpression <SalesOrderHeader, bool> .Create("TotalDue > 1000 || Freight > 1000"); var isHeavyAndExpensive = UserDefinedExpression <SalesOrderHeader, bool> .Create("TotalDue > 1000 && Freight > 1000"); var order1 = new SalesOrderHeader() { TotalDue = 1200, Freight = 700 }; var order2 = new SalesOrderHeader() { TotalDue = 800, Freight = 1300 }; var order3 = new SalesOrderHeader() { TotalDue = 800, Freight = 700 }; var order4 = new SalesOrderHeader() { TotalDue = 1200, Freight = 1300 }; Assert.IsTrue(isHeavyOrExpensive.Invoke(order1)); Assert.IsTrue(isHeavyOrExpensive.Invoke(order2)); Assert.IsFalse(isHeavyOrExpensive.Invoke(order3)); Assert.IsTrue(isHeavyOrExpensive.Invoke(order4)); Assert.IsFalse(isHeavyAndExpensive.Invoke(order1)); Assert.IsFalse(isHeavyAndExpensive.Invoke(order2)); Assert.IsFalse(isHeavyAndExpensive.Invoke(order3)); Assert.IsTrue(isHeavyAndExpensive.Invoke(order4)); }
public void UnsafeScopeTest() { Assert.Throws <UnsafeExpressionException>(() => { var unsafeExpression = UserDefinedExpression <SalesOrderHeader, bool> .Create("Customer.PersonId != null"); bool result = unsafeExpression.Invoke(order); }); }
public void SafeScopeTest() { Assert.DoesNotThrow(() => { var safeExpression = UserDefinedExpression <SalesOrderHeader, bool> .Create("Customer != null && DueDate >= DateTime.Today"); bool result = safeExpression.Invoke(order); }); }
public void UnsafeScopeTestAllowance() { Assert.DoesNotThrow(() => { TypesValidator.Defaults.AddAllowedType(typeof(Customer)); var unsafeExpression = UserDefinedExpression <SalesOrderHeader, bool> .Create("Customer.PersonId != null"); bool result = unsafeExpression.Invoke(order); }); }
public void UnsafeExpressionsShouldPass(string unsafeExpression, Func <IUserDefinedExpression, ISafetyValidator> validatorFactory) { var order1 = new SalesOrderHeader() { DueDate = DateTime.Today.AddDays(-1) }; UserDefinedExpression.DefaultSafetyValidatorFactory = validatorFactory; Assert.DoesNotThrow(() => { var unsafeUDE = UserDefinedExpression <SalesOrderHeader, bool> .Create(unsafeExpression); bool result = unsafeUDE.Invoke(order1); }); }
public void ComplexExpressionTest() { var creditInfo = new CreditInfo() { HardInquiries = new List <DateTime>() { new DateTime(2020, 12, 12), new DateTime(2019, 05, 06), new DateTime(2017, 03, 03) }, Accounts = new List <CreditAccount>() { new CreditAccount() { TotalCredit = 10000, UsedCredit = 3000 }, new CreditAccount() { TotalCredit = 5000, UsedCredit = 300 } } }; //creditInfo.HardInquiries.Count(h => h.Date > DateTime.Today.AddDays(-300)) > 1; //creditInfo.Accounts.Sum(a => a.UsedCredit) / creditInfo.Accounts.Sum(a => a.TotalCredit); // The input model (CreditInfo) is automatically added to white-list, but other non-primitive types should be explicitly added SafetyValidators.TypesValidator.Defaults.AddAllowedType(typeof(CreditAccount)); // Past 2 years var recentHardInquiriesFormula = UserDefinedExpression <CreditInfo, int> .Create("HardInquiries.Count(h => h.Date > DateTime.Today.AddYears(-2))"); var creditUsageFormula = UserDefinedExpression <CreditInfo, decimal> .Create("Accounts.Sum(a => a.UsedCredit) / Accounts.Sum(a => a.TotalCredit)"); var recentHardInquiries = recentHardInquiriesFormula.Invoke(creditInfo); Assert.AreEqual(2, recentHardInquiries); var creditUsage = creditUsageFormula.Invoke(creditInfo); Assert.AreEqual(0.22, creditUsage); }
public void SinglePropertyTest() { var isOrderPastDueFormula = UserDefinedExpression <SalesOrderHeader, bool> .Create("DueDate < DateTime.Today"); var order1 = new SalesOrderHeader() { DueDate = DateTime.Today.AddDays(-1) }; var order2 = new SalesOrderHeader() { DueDate = DateTime.Today.AddDays(1) }; bool isOrderPastDue1 = isOrderPastDueFormula.Invoke(order1); bool isOrderPastDue2 = isOrderPastDueFormula.Invoke(order2); Assert.IsTrue(isOrderPastDue1); Assert.IsFalse(isOrderPastDue2); }
public void UnsafeExpressionsShouldThrow(string unsafeExpression, Func <IUserDefinedExpression, ISafetyValidator> validatorFactory) { UserDefinedExpression.DefaultSafetyValidatorFactory = validatorFactory; Assert.Throws <UnsafeExpressionException>(() => UserDefinedExpression <SalesOrderHeader, bool> .Create(unsafeExpression)); }