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.
RuleBaseClassesTests.cs
Go to the documentation of this file.
1using System;
2using System.ComponentModel;
3using System.Globalization;
4using System.Linq;
5using System.Threading;
6using Csla.Rules;
7using Csla.TestHelpers;
8using Microsoft.VisualStudio.TestTools.UnitTesting;
9
11{
12
13
18 [TestClass()]
20 {
21
22
23 private TestContext testContextInstance;
24 private static TestDIContext _testDIContext;
25
31 {
32 get
33 {
34 return testContextInstance;
35 }
36 set
37 {
38 testContextInstance = value;
39 }
40 }
41
43 public static void ClassInitialize(TestContext context)
44 {
45 _testDIContext = TestDIContextFactory.CreateDefaultContext();
46 }
47
48 [TestMethod()]
50 {
51
53 Assert.IsTrue(rule.IsAsync);
54 Assert.IsFalse(rule.CanRunOnServer);
55 Assert.IsFalse(rule.CanRunInCheckRules);
56 Assert.IsFalse(rule.CanRunAsAffectedProperty);
57 }
58
59 [TestMethod()]
61 {
63 Assert.IsFalse(rule.IsAsync);
64 Assert.IsTrue(rule.CanRunOnServer);
65 Assert.IsTrue(rule.CanRunInCheckRules);
66 Assert.IsTrue(rule.CanRunAsAffectedProperty);
67 }
68
69 [TestMethod()]
71 {
73 Assert.IsFalse(rule.IsAsync);
74 Assert.IsFalse(rule.CanRunOnServer);
75 Assert.IsTrue(rule.CanRunInCheckRules);
76 Assert.IsTrue(rule.CanRunAsAffectedProperty);
77 }
78
79 [TestMethod()]
80 [ExpectedException(typeof(ArgumentException))]
82 {
83 var rule = new ValidateRootObject();
84 rule.PrimaryProperty = RuleBaseClassesRoot.NameProperty;
85 }
89 [TestMethod()]
90
92 {
93 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
94
95 // StartDate less than
96 string ruleSet = "Date";
97 string err1, err2;
98 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
99
100 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
101 actual.StartDate = "today";
102 actual.EndDate = "yesterday";
103
104 err1 = ((IDataErrorInfo)actual)[RuleBaseClassesRoot.StartDateProperty.Name];
105 err2 = ((IDataErrorInfo)actual)[RuleBaseClassesRoot.EndDateProperty.Name];
106
107 Assert.IsFalse(actual.IsSelfValid); // object has broken rule
108 Assert.IsTrue(err1.Length > 1); // both fields have error message
109 Assert.IsTrue(err2.Length > 1);
110
111 actual.EndDate = "tomorrow";
112 err1 = ((IDataErrorInfo)actual)[RuleBaseClassesRoot.StartDateProperty.Name];
113 err2 = ((IDataErrorInfo)actual)[RuleBaseClassesRoot.EndDateProperty.Name];
114
115 Assert.IsTrue(actual.IsSelfValid); // object has no broken rules
116 Assert.AreEqual(string.Empty, err1); // both fields are now OK
117 Assert.AreEqual(string.Empty, err2);
118 }
119
120 [TestMethod()]
122 {
123 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
124
125 string ruleSet = "Lookup";
126 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
127
128 // rule did not run on serverside (DAL) and no value is explicitly set
129 Assert.AreEqual(string.Empty, actual.Name);
130 }
131
132 [TestMethod()]
133 [TestCategory("SkipWhenLiveUnitTesting")]
135 {
136 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
137
138 string ruleSet = "Lookup";
139 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
140
141 var waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
142 actual.ValidationComplete += (o, e) => waitHandle.Set();
143 waitHandle.Reset();
144 actual.CustomerId = 1;
145 waitHandle.WaitOne(); // wait for async lookup to complete
146 Assert.AreEqual("Rocky Lhotka", actual.Name);
147
148 waitHandle.Reset();
149 actual.CustomerId = 2;
150 waitHandle.WaitOne();
151 Assert.AreEqual("Customer_2", actual.Name);
152 }
153
154
155 [TestMethod()]
157 {
158 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
159
160 // test that Name has broken rule on new object
161 string ruleSet = "LookupAndNameRequired";
162 string err1;
163 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
164 err1 = ((IDataErrorInfo)actual)[RuleBaseClassesRoot.NameProperty.Name];
165
166
167 Assert.AreEqual(string.Empty, actual.Name); // name is not set
168 Assert.IsFalse(actual.IsSelfValid); // object has broken rules
169 Assert.IsTrue(err1.Length > 0); // name has broken rule with message
170 }
171
172 [TestMethod()]
173 [TestCategory("SkipWhenLiveUnitTesting")]
175 {
176 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
177
178 // test that Name is revalidated as it is an affected property of LookupCustomer rule
179 // that runs when CustomerId is set.
180 string ruleSet = "LookupAndNameRequired";
181 string err1;
182 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
183 err1 = ((IDataErrorInfo)actual)[RuleBaseClassesRoot.NameProperty.Name];
184
185 Assert.IsFalse(actual.IsSelfValid); // is broken before we set customerid
186
187 var waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
188 actual.ValidationComplete += (o, e) => waitHandle.Set();
189 waitHandle.Reset();
190 actual.CustomerId = 1;
191 waitHandle.WaitOne(); // wait for async lookup to complete
192
193 Assert.IsTrue(actual.IsSelfValid); // is valid after
194 }
195
196 [TestMethod()]
198 {
199 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
200
201 string ruleSet = "Object";
202 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
203 Assert.IsTrue(actual.IsSelfValid);
204 }
205
206 [TestMethod()]
208 {
209 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
210
211 string ruleSet = "Object";
212 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
213
214 actual.CustomerId = 4;
215 Assert.IsFalse(actual.IsValid);
216 Assert.AreEqual(3, actual.BrokenRulesCollection.Where(p => p.Severity == RuleSeverity.Error).Count());
217 }
218
219 [TestMethod()]
221 {
222 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
223
224 string ruleSet = "Object";
225 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
226
227 actual.CustomerId = 5;
228 Assert.IsTrue(actual.IsValid);
229 Assert.AreEqual(3, actual.BrokenRulesCollection.Where(p => p.Severity == RuleSeverity.Warning).Count());
230 }
231
232 [TestMethod()]
234 {
235 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
236
237 string ruleSet = "Object";
238 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
239
240 actual.CustomerId = 6;
241 Assert.IsTrue(actual.IsValid);
242 Assert.AreEqual(3, actual.BrokenRulesCollection.Where(p => p.Severity == RuleSeverity.Information).Count());
243 }
244
245
246 [TestMethod()]
248 {
249 IDataPortal<RuleBaseClassesRoot> dataPortal = _testDIContext.CreateDataPortal<RuleBaseClassesRoot>();
250
251 string ruleSet = "Required";
252 var actual = RuleBaseClassesRoot.NewEditableRoot(dataPortal, ruleSet);
253 var culture = Thread.CurrentThread.CurrentCulture;
254
255 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
256 Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
257 actual.Name = "xyz";
258 actual.Name = "";
259 Assert.AreEqual("Name required", actual.BrokenRulesCollection[0].Description);
260 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("nb-NO");
261 Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("nb-NO");
262 actual.Name = "xyz";
263 actual.Name = "";
264 Assert.AreEqual("Name pÄkrevd", actual.BrokenRulesCollection[0].Description);
265 Thread.CurrentThread.CurrentCulture = culture;
266 Thread.CurrentThread.CurrentUICulture = culture;
267 }
268 }
269}
CalcSum rule will set primary property to the sum of all.
Implements a rule to compare 2 property values and make sure property1 is less than property2
static readonly PropertyInfo< Csla.SmartDate > EndDateProperty
static readonly PropertyInfo< int > CustomerIdProperty
static readonly PropertyInfo< Csla.SmartDate > StartDateProperty
static readonly PropertyInfo< string > NameProperty
static RuleBaseClassesRoot NewEditableRoot(IDataPortal< RuleBaseClassesRoot > dataPortal, string ruleSet)
This is a test class for RootTest and is intended to contain all RootTest Unit Tests /summary>
static void ClassInitialize(TestContext context)
TestContext TestContext
Gets or sets the test context which provides information about and functionality for the current test...
void LessThanSetsErrorOnBothFields()
A test for NewEditableRoot /summary>
Type to carry context information for DI in unit tests
Interface defining the members of the data portal type.
Definition: IDataPortalT.cs:17
RuleSeverity
Values for validation rule severities.
Definition: RuleSeverity.cs:16