示例#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_MustCascade_WhenCascadeOnDirtyPropertiesIsTrue()
        {
            var root = new CascadeRoot {
                CascadeOnDirtyProperties = true
            };

            Assert.AreEqual(0, root.Num1);
            Assert.AreEqual(0, root.Num2);
            Assert.AreEqual(0, root.Num3);
            Assert.AreEqual(0, root.Num4);
            root.Num1 = 1;
            Assert.AreEqual(1, root.Num1); // the value set by test
            Assert.AreEqual(2, root.Num2); // Num2 is set from Num1 rules
            Assert.AreEqual(3, root.Num3); // Num3 is set from Num2 rules
            Assert.AreEqual(4, root.Num4); // Num4 is set from Num3 rules when Cascade propagates down to Num3
        }
示例#4
0
        public void BusinessRules_MustNotCascade_WhenCascadeOnDirtyPropertiesIsFalse()
        {
            var root = new CascadeRoot {
                CascadeOnDirtyProperties = false
            };

            Assert.AreEqual(0, root.Num1);
            Assert.AreEqual(0, root.Num2);
            Assert.AreEqual(0, root.Num3);
            Assert.AreEqual(0, root.Num4);
            root.Num1 = 1;
            Assert.AreEqual(1, root.Num1); // the value set by test
            Assert.AreEqual(2, root.Num2); // rerun rules for Num2 without cascade
            Assert.AreEqual(3, root.Num3); // will set Num3 as output from Num2 but not rerun rules for Num3
            Assert.AreEqual(0, root.Num4); // Num4 is unchanged
        }
示例#5
0
        public void BusinessRules_MustNotCascade_WhenCanRunAsAffectedIsFalse()
        {
            var root = new CascadeRoot {
                CascadeOnDirtyProperties = true
            };

            Assert.AreEqual(0, root.Num1);
            Assert.AreEqual(0, root.Num2);
            Assert.AreEqual(0, root.Num3);
            Assert.AreEqual(0, root.Num4);
            Assert.AreEqual(0, root.Num5);
            root.Num1 = 1;
            Assert.AreEqual(1, root.Num1); // the value set by test
            Assert.AreEqual(2, root.Num2); // Num2 is set from Num1 rules
            Assert.AreEqual(3, root.Num3); // Num3 is set from Num2 rules
            Assert.AreEqual(4, root.Num4); // Num4 is set from Num3 rules when Cascade propagates down to Num3
            Assert.AreEqual(0, root.Num5); // Rule on Num4 is not allowed to run as AffectedProperty som Num5 must be unchanged.
        }
示例#6
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);
        }