public PersonValidator() { Property(x => x.FirstName).Mandatory().Common(CommonValidators.Text); Property(x => x.LastName).Mandatory().Common(CommonValidators.Text); Property(x => x.Gender).Mandatory().IsValid(); Property(x => x.EyeColor).IsValid(); Property(x => x.Birthday).Mandatory().CompareValue(CompareOperator.LessThanEqual, _ => DateTime.Now, _ => "Today"); Property(x => x.Address).Entity(_addressValidator); Property(x => x.Metadata).Dictionary(item: DictionaryRuleItem.Create <string?, string?>( key: Validator.CreateCommon <string?>(r => r.Text("Gender").Mandatory().RefDataCode().As <Gender>()), value: Validator.CreateCommon <string?>(r => r.Text("Description").Mandatory().String(10)))); }
public async Task Validate_Value() { var iv = Validator.Create <TestItem>().HasProperty(x => x.Code, p => p.Mandatory()); var v1 = await new Dictionary <string, TestItem>().Validate("Dict").Dictionary(item: DictionaryRuleItem.Create <string, TestItem>(value: iv)).RunAsync(); Assert.IsFalse(v1.HasError); v1 = await new Dictionary <string, TestItem> { { "k1", new TestItem() } }.Validate("Dict").Dictionary(item: DictionaryRuleItem.Create <string, TestItem>(value: iv)).RunAsync(); Assert.IsTrue(v1.HasError); Assert.AreEqual(1, v1.Messages.Count); Assert.AreEqual("Code is required.", v1.Messages[0].Text); Assert.AreEqual(MessageType.Error, v1.Messages[0].Type); Assert.AreEqual("Dict[k1].Code", v1.Messages[0].Property); }
public async Task Validate_Key() { var kv = Validator.CreateCommon <string>(r => r.Text("Key").Mandatory().String(2)); var v1 = await new Dictionary <string, int> { { "k1", 1 }, { "k2", 2 } }.Validate("Dict").Dictionary(item: DictionaryRuleItem.Create <string, int>(kv)).RunAsync(); Assert.IsFalse(v1.HasError); v1 = await new Dictionary <string, int> { { "k1", 1 }, { "k2x", 2 } }.Validate("Dict").Dictionary(item: DictionaryRuleItem.Create <string, int>(kv)).RunAsync(); Assert.IsTrue(v1.HasError); Assert.AreEqual(1, v1.Messages.Count); Assert.AreEqual("Key must not exceed 2 characters in length.", v1.Messages[0].Text); Assert.AreEqual(MessageType.Error, v1.Messages[0].Type); Assert.AreEqual("Dict[k2x]", v1.Messages[0].Property); }
public async Task Validate_KeyAndValue() { var kv = Validator.CreateCommon <string>(r => r.Text("Key").Mandatory().String(2)); var vv = Validator.CreateCommon <int>(r => r.Mandatory().CompareValue(CompareOperator.LessThanEqual, 10)); var v1 = await new Dictionary <string, int> { { "k1", 1 }, { "k2", 2 } }.Validate("Dict").Dictionary(item: DictionaryRuleItem.Create <string, int>(kv, vv)).RunAsync(); Assert.IsFalse(v1.HasError); v1 = await new Dictionary <string, int> { { "k1", 11 }, { "k2x", 2 } }.Validate("Dict").Dictionary(item: DictionaryRuleItem.Create <string, int>(kv, vv)).RunAsync(); Assert.IsTrue(v1.HasError); Assert.AreEqual(2, v1.Messages.Count); Assert.AreEqual("Value must be less than or equal to 10.", v1.Messages[0].Text); Assert.AreEqual(MessageType.Error, v1.Messages[0].Type); Assert.AreEqual("Dict[k1]", v1.Messages[0].Property); Assert.AreEqual("Key must not exceed 2 characters in length.", v1.Messages[1].Text); Assert.AreEqual(MessageType.Error, v1.Messages[1].Type); Assert.AreEqual("Dict[k2x]", v1.Messages[1].Property); }
public async Task Dict_Validator_KeyError() { var kv = CommonValidator.Create <string>(x => x.Text("Key").Mandatory().String(2)); var vxd = Validator.CreateDictionary <Dictionary <string, TestItem>, string, TestItem>(minCount: 2, item: DictionaryRuleItem.Create(key: kv, value: new TestItemValidator())); var tc = new Dictionary <string, TestItem> { { "k1", new TestItem { Code = "A", Text = "A" } }, { "k2x", new TestItem { Code = "B", Text = "B" } } }; var r = await vxd.ValidateAsync(tc); Assert.IsTrue(r.HasErrors); Assert.AreEqual(1, r.Messages.Count); Assert.AreEqual(MessageType.Error, r.Messages[0].Type); Assert.AreEqual("Key must not exceed 2 characters in length.", r.Messages[0].Text); Assert.AreEqual("Value[k2x]", r.Messages[0].Property); }
public async Task Dict_Validator_OK() { var vxd = Validator.CreateDictionary <Dictionary <string, TestItem>, string, TestItem>(minCount: 2, item: DictionaryRuleItem.Create <string, TestItem>(value: new TestItemValidator())); var tc = new Dictionary <string, TestItem> { { "k1", new TestItem { Code = "A", Text = "A" } }, { "k2", new TestItem { Code = "B", Text = "B" } } }; var r = await vxd.ValidateAsync(tc); Assert.IsFalse(r.HasErrors); }
public async Task Dict_Validator_MinCount() { var vxd = Validator.CreateDictionary <Dictionary <string, TestItem>, string, TestItem>(minCount: 3, item: DictionaryRuleItem.Create <string, TestItem>(value: new TestItemValidator())); var tc = new Dictionary <string, TestItem> { { "k1", new TestItem { Code = "A", Text = "A" } }, { "k2", new TestItem { Code = "B", Text = "B" } } }; var r = await vxd.ValidateAsync(tc); Assert.IsTrue(r.HasErrors); Assert.AreEqual(1, r.Messages.Count); Assert.AreEqual(MessageType.Error, r.Messages[0].Type); Assert.AreEqual("Value must have at least 3 item(s).", r.Messages[0].Text); Assert.AreEqual("Value", r.Messages[0].Property); }
public async Task Dict_Validator_MaxCount() { var vxd = Validator.CreateDictionary <Dictionary <string, TestItem>, string, TestItem>(minCount: 1, maxCount: 2, item: DictionaryRuleItem.Create <string, TestItem>(value: new TestItemValidator())); var tc = new Dictionary <string, TestItem> { { "k1", new TestItem { Code = "A", Text = "aaa" } }, { "k2", new TestItem { Code = "B", Text = "bbb" } }, { "k3", new TestItem { Code = "C", Text = "ccc" } } }; var r = await vxd.ValidateAsync(tc); Assert.IsTrue(r.HasErrors); Assert.AreEqual(3, r.Messages.Count); Assert.AreEqual(MessageType.Error, r.Messages[0].Type); Assert.AreEqual("Description is invalid.", r.Messages[0].Text); Assert.AreEqual("Value[k1].Text", r.Messages[0].Property); Assert.AreEqual(MessageType.Error, r.Messages[1].Type); Assert.AreEqual("Description is invalid.", r.Messages[1].Text); Assert.AreEqual("Value[k2].Text", r.Messages[1].Property); Assert.AreEqual(MessageType.Error, r.Messages[2].Type); Assert.AreEqual("Value must not exceed 2 item(s).", r.Messages[2].Text); Assert.AreEqual("Value", r.Messages[2].Property); }