CSLA.NET 6.0.0
CSLA .NET is a software development framework that helps you build a reusable, maintainable object-oriented business layer for your app.
CascadeTests.cs
Go to the documentation of this file.
1
2
3using System.Linq;
4using Csla.TestHelpers;
5using Microsoft.VisualStudio.TestTools.UnitTesting;
6
8{
9 [TestClass]
10 public class CascadeTests
11 {
12 private static TestDIContext _testDIContext;
13
14 [ClassInitialize]
15 public static void ClassInitialze(TestContext testContext)
16 {
17 _testDIContext = TestDIContextFactory.CreateDefaultContext();
18 }
19
20 [TestMethod]
22 {
23 IDataPortal<CascadeRoot> dataPortal = _testDIContext.CreateDataPortal<CascadeRoot>();
24
25 var root = dataPortal.Create();
26 root.CascadeOnDirtyProperties = true;
27 Assert.AreEqual(0, root.Num1);
28 Assert.AreEqual(0, root.Num2);
29 Assert.AreEqual(0, root.Num3);
30 Assert.AreEqual(0, root.Num4);
31 root.Num1 = 1;
32 Assert.AreEqual(1, root.Num1); // the value set by test
33 Assert.AreEqual(2, root.Num2); // Num2 is set from Num1 rules
34 Assert.AreEqual(3, root.Num3); // Num3 is set from Num2 rules
35 Assert.AreEqual(4, root.Num4); // Num4 is set from Num3 rules when Cascade propagates down to Num3
36 }
37
38 [TestMethod]
40 {
41 IDataPortal<CascadeRoot> dataPortal = _testDIContext.CreateDataPortal<CascadeRoot>();
42
43 var root = dataPortal.Create();
44 root.CascadeOnDirtyProperties = true;
45 Assert.AreEqual(0, root.Num1);
46 Assert.AreEqual(0, root.Num2);
47 Assert.AreEqual(0, root.Num3);
48 Assert.AreEqual(0, root.Num4);
49 Assert.AreEqual(0, root.Num5);
50 root.Num1 = 1;
51 Assert.AreEqual(1, root.Num1); // the value set by test
52 Assert.AreEqual(2, root.Num2); // Num2 is set from Num1 rules
53 Assert.AreEqual(3, root.Num3); // Num3 is set from Num2 rules
54 Assert.AreEqual(4, root.Num4); // Num4 is set from Num3 rules when Cascade propagates down to Num3
55 Assert.AreEqual(0, root.Num5); // Rule on Num4 is not allowed to run as AffectedProperty som Num5 must be unchanged.
56 }
57
58 [TestMethod]
60 {
61 IDataPortal<CascadeRoot> dataPortal = _testDIContext.CreateDataPortal<CascadeRoot>();
62
63 var root = dataPortal.Create();
64 root.CascadeOnDirtyProperties = false;
65 Assert.AreEqual(0, root.Num1);
66 Assert.AreEqual(0, root.Num2);
67 Assert.AreEqual(0, root.Num3);
68 Assert.AreEqual(0, root.Num4);
69 root.Num1 = 1;
70 Assert.AreEqual(1, root.Num1); // the value set by test
71 Assert.AreEqual(2, root.Num2); // rerun rules for Num2 without cascade
72 Assert.AreEqual(3, root.Num3); // will set Num3 as output from Num2 but not rerun rules for Num3
73 Assert.AreEqual(0, root.Num4); // Num4 is unchanged
74 }
75
76 [TestMethod]
77 [TestCategory("SkipWhenLiveUnitTesting")]
79 {
80 // complex ruleset
81 // calculate the sum of Aa and Ab to Ac
82 // copy value of Ac to Ae
83 // calculate sum of Ad and Ae to Af
84 // copy value of Af to Ag
85 IDataPortal<CascadeRoot> dataPortal = _testDIContext.CreateDataPortal<CascadeRoot>();
86
87 var root = dataPortal.Create();
88 root.CascadeOnDirtyProperties = true;
89 root.CheckRules();
90 Assert.AreEqual(0, root.ValueAc);
91 Assert.AreEqual(0, root.ValueAg);
92 Assert.AreEqual(0, root.ValueAe);
93 Assert.AreEqual(0, root.ValueAf);
94
95 root.ValueAa = 10;
96 Assert.AreEqual(10, root.ValueAc);
97 Assert.AreEqual(10, root.ValueAg);
98 Assert.AreEqual(10, root.ValueAe);
99 Assert.AreEqual(10, root.ValueAf);
100
101 root.ValueAb = 20;
102 Assert.AreEqual(30, root.ValueAc);
103 Assert.AreEqual(30, root.ValueAe);
104 Assert.AreEqual(30, root.ValueAf);
105 Assert.AreEqual(30, root.ValueAg);
106
107 root.ValueAd = 25;
108 Assert.AreEqual(55, root.ValueAf);
109 Assert.AreEqual(55, root.ValueAg);
110 }
111
112
113 [TestMethod]
114
116 {
117 // check that the sum of Ba and Bb is always 100 (and error message on both properties)
118 IDataPortal<CascadeRoot> dataPortal = _testDIContext.CreateDataPortal<CascadeRoot>();
119
120 var root = dataPortal.Create();
121 root.CascadeOnDirtyProperties = true;
122 root.CheckRules();
123 Assert.AreEqual(0, root.ValueBa);
124 Assert.AreEqual(0, root.ValueBb);
125 Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
126 Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));
127
128 root.ValueBa = 100;
129 Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
130 Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));
131
132 root.ValueBb = 50;
133 Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
134 Assert.IsTrue(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));
135
136 root.ValueBa = 50;
137 Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBaProperty.Name));
138 Assert.IsFalse(root.BrokenRulesCollection.Any(p => p.Property == CascadeRoot.ValueBbProperty.Name));
139 }
140
141 [TestMethod]
142
144 {
145 // calculate sum of Ca, Cb, Cc and Cd to Ce
146 // calculate fraction of Ce to Cd
147 // must then recalculate sum again as Cd was changed.
148 IDataPortal<CascadeRoot> dataPortal = _testDIContext.CreateDataPortal<CascadeRoot>();
149
150 var root = dataPortal.Create();
151 root.CascadeOnDirtyProperties = true;
152 root.CheckRules();
153 Assert.AreEqual(0, root.ValueCa);
154 Assert.AreEqual(0, root.ValueCb);
155 Assert.AreEqual(0, root.ValueCc);
156 Assert.AreEqual(0, root.ValueCd);
157 Assert.AreEqual(0, root.ValueCe);
158
159 root.ValueCa = 5;
160 Assert.AreEqual(5, root.ValueCa);
161 Assert.AreEqual(0, root.ValueCb);
162 Assert.AreEqual(0, root.ValueCc);
163 Assert.AreEqual(1.67m, root.ValueCd);
164 Assert.AreEqual(6.67m, root.ValueCe);
165
166 root.ValueCb = 15;
167 Assert.AreEqual(5, root.ValueCa);
168 Assert.AreEqual(15, root.ValueCb);
169 Assert.AreEqual(0, root.ValueCc);
170 Assert.AreEqual(6.67m, root.ValueCd);
171 Assert.AreEqual(26.67m, root.ValueCe);
172
173 root.ValueCc = 25;
174 Assert.AreEqual(5, root.ValueCa);
175 Assert.AreEqual(15, root.ValueCb);
176 Assert.AreEqual(25, root.ValueCc);
177 Assert.AreEqual(15.00m, root.ValueCd);
178 Assert.AreEqual(60.00m, root.ValueCe);
179 }
180 }
181}
void BusinessRules_MustNotCascade_WhenCascadeOnDirtyPropertiesIsFalse()
Definition: CascadeTests.cs:59
static void ClassInitialze(TestContext testContext)
Definition: CascadeTests.cs:15
void BusinessRules_MustRecalculateSumAfterCaclulateFraction_WhenCascadeOnDirtyPropertiesIsTrue()
void BusinessRules_MustCascade_WhenCascadeOnDirtyPropertiesIsTrue()
Definition: CascadeTests.cs:21
void BusinessRules_MustCascadeAsSpreadsheet_WhenCascadeOnDirtyPropertiesIsTrue()
Definition: CascadeTests.cs:78
void BusinessRules_MustCheckBothSums_WhenCascadeOnDirtyPropertiesIsTrue()
Type to carry context information for DI in unit tests
Interface defining the members of the data portal type.
Definition: IDataPortalT.cs:17
object Create(params object[] criteria)
Called by a factory method in a business class to create a new object, which is loaded with default v...