Beispiel #1
0
 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))));
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }