示例#1
0
        public void BusinessRules_MustCascadeAsSpreadsheet_WhenCascadeOnDirtyPropertiesIsTrue()
        {
            // complex ruleset
            // calculate the sum of Aa and Ab to Ac
            // copy value of Ac to Ae
            // calculate sum of Ad and Ae to Af
            // copy value of Af to Ag
            var root = new CascadeRoot {
                CascadeOnDirtyProperties = true
            };

            root.CheckRules();
            Assert.AreEqual(0, root.ValueAc);
            Assert.AreEqual(0, root.ValueAg);
            Assert.AreEqual(0, root.ValueAe);
            Assert.AreEqual(0, root.ValueAf);

            root.ValueAa = 10;
            Assert.AreEqual(10, root.ValueAc);
            Assert.AreEqual(10, root.ValueAg);
            Assert.AreEqual(10, root.ValueAe);
            Assert.AreEqual(10, root.ValueAf);

            root.ValueAb = 20;
            Assert.AreEqual(30, root.ValueAc);
            Assert.AreEqual(30, root.ValueAe);
            Assert.AreEqual(30, root.ValueAf);
            Assert.AreEqual(30, root.ValueAg);

            root.ValueAd = 25;
            Assert.AreEqual(55, root.ValueAf);
            Assert.AreEqual(55, root.ValueAg);
        }
示例#2
0
        public void BusinessRules_MustCheckBothSums_WhenCascadeOnDirtyPropertiesIsTrue()
        {
            // check that the sum of Ba and Bb is always 100 (and error message on both properties)
            var root = new CascadeRoot {
                CascadeOnDirtyProperties = true
            };

            root.CheckRules();
            Assert.AreEqual(0, root.ValueBa);
            Assert.AreEqual(0, root.ValueBb);
            Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
            Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));

            root.ValueBa = 100;
            Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
            Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));

            root.ValueBb = 50;
            Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
            Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));

            root.ValueBa = 50;
            Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
            Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));
        }
示例#3
0
        public void BusinessRules_MustRecalculateSumAfterCaclulateFraction_WhenCascadeOnDirtyPropertiesIsTrue()
        {
            // calculate sum of Ca, Cb, Cc and Cd to Ce
            // calculate fraction of Ce to Cd
            // must then recalculate sum again as Cd was changed.
            var root = new CascadeRoot {
                CascadeOnDirtyProperties = true
            };

            root.CheckRules();
            Assert.AreEqual(0, root.ValueCa);
            Assert.AreEqual(0, root.ValueCb);
            Assert.AreEqual(0, root.ValueCc);
            Assert.AreEqual(0, root.ValueCd);
            Assert.AreEqual(0, root.ValueCe);

            root.ValueCa = 5;
            Assert.AreEqual(5, root.ValueCa);
            Assert.AreEqual(0, root.ValueCb);
            Assert.AreEqual(0, root.ValueCc);
            Assert.AreEqual(1.67m, root.ValueCd);
            Assert.AreEqual(6.67m, root.ValueCe);

            root.ValueCb = 15;
            Assert.AreEqual(5, root.ValueCa);
            Assert.AreEqual(15, root.ValueCb);
            Assert.AreEqual(0, root.ValueCc);
            Assert.AreEqual(6.67m, root.ValueCd);
            Assert.AreEqual(26.67m, root.ValueCe);

            root.ValueCc = 25;
            Assert.AreEqual(5, root.ValueCa);
            Assert.AreEqual(15, root.ValueCb);
            Assert.AreEqual(25, root.ValueCc);
            Assert.AreEqual(15.00m, root.ValueCd);
            Assert.AreEqual(60.00m, root.ValueCe);
        }