public void FormatAsString() { DatonKey k = new PersistonKey("Emp", "3", false); Assert.AreEqual("Emp|=3", k.ToString()); k = new PersistonKey("Emp", "3", true); Assert.AreEqual("Emp|+", k.ToString()); var criteria = new[] { new ViewonKey.Criterion("Region", "NE"), new ViewonKey.Criterion("Funny", "1") }; k = new ViewonKey("EmpList", criteria, sortColumnName: "LastName", pageNo: 2); Assert.AreEqual("EmpList|_page=2|_sort=LastName|Funny=1|Region=NE", k.ToString()); //now with crazy characters criteria = new[] { new ViewonKey.Criterion("Crazy", "Angry \"O'Leary\" :| :\\"), //actual: Angry "O'Leary" :| :\ new ViewonKey.Criterion("Zany", "a=|b|"), new ViewonKey.Criterion("Loopy", "\\/") //actual: \/ }; k = new ViewonKey("EmpList", criteria); Assert.AreEqual(@"EmpList|Crazy=Angry ""O'Leary"" :\| :\\|Loopy=\\/|Zany=a=\|b\|", k.ToString()); }
public override Task ValidateCriteria(IUser user, ViewonKey key, Action <string> fail) { var companyCri = key.Criteria.FirstOrDefault(c => c.Name == "Company"); if (companyCri != null && companyCri.PackedValue.StartsWith("The", StringComparison.InvariantCultureIgnoreCase)) { fail("Cannot search for companies starting with 'the'"); } return(Task.CompletedTask); }
public override Task ValidateCriteria(IUser user, ViewonKey key, Action <string> fail) { var companyCri = key.Criteria.FirstOrDefault(c => c.Name == "LastName"); //assume this exists for the tests if (companyCri.PackedValue.StartsWith("THE")) { fail("THE"); } return(Task.CompletedTask); }
/// <summary> /// Sample validation function (registered in Startup) /// </summary> public static Task <IEnumerable <string> > ValidateCustomer(Daton daton, ViewonKey _, IUser user) { var cust = daton as Customer; var errors = new List <string>(); //silly rule to demonstrate custom validation: if (cust.Company.StartsWith("The", StringComparison.InvariantCultureIgnoreCase)) { errors.Add("Companies cannot start with 'the' "); } //note that you can use multi language strings here by checking user.LangCode //This longer return expression is used when we are not doing async validation. For async validation, //make the validation method async and return errors directly. return(Task.FromResult(errors as IEnumerable <string>)); //sync return //return errors; //async return }
public async Task ValidateViewon() { var ddict = new DataDictionary(); ddict.AddDatonUsingClassAnnotation(typeof(EmployeeList)); var datondef = ddict.DatonDefs["EmployeeList"]; var validator = new Validator(new User()); var viewonKey = new ViewonKey("EmployeeList", new[] { new ViewonKey.Criterion("LastName", "Wash") }); await validator.ValidateCriteria(datondef, viewonKey); Assert.AreEqual(0, validator.Errors.Count); //last name is ok viewonKey = new ViewonKey("EmployeeList", new[] { new ViewonKey.Criterion("LastName", "Washington") }); await validator.ValidateCriteria(datondef, viewonKey); Assert.AreEqual(1, validator.Errors.Count); //last name criteria is too long viewonKey = new ViewonKey("EmployeeList", new[] { new ViewonKey.Criterion("LastName", "THEM") }); await validator.ValidateCriteria(datondef, viewonKey); Assert.AreEqual(1, validator.Errors.Count); //last name is not valid by custom rule }