Datei: IntegrationTests/IntegrationTests/PolymorphicWTable.cs
Last Commit (08b23aa)
1 | // |
2 | // Copyright ( c) 2002-2016 Mirko Matytschak |
3 | // (www.netdataobjects.de) |
4 | // |
5 | // Author: Mirko Matytschak |
6 | // |
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated |
8 | // documentation files (the "Software"), to deal in the Software without restriction, including without limitation |
9 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the |
10 | // Software, and to permit persons to whom the Software is furnished to do so, subject to the following |
11 | // conditions: |
12 | |
13 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions |
14 | // of the Software. |
15 | // |
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED |
17 | // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
19 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. |
21 | |
22 | |
23 | using System; |
24 | using System.Diagnostics; |
25 | using System.Collections; |
26 | using NUnit.Framework; |
27 | using NDO; |
28 | using NDO.Mapping; |
29 | using Reisekosten; |
30 | using Reisekosten.Personal; |
31 | using PureBusinessClasses; |
32 | using NDO.Query; |
33 | using System.Linq; |
34 | using System.Collections.Generic; |
35 | |
36 | namespace NdoUnitTests { |
37 | ····/// <summary> |
38 | ····/// Polymorphic tests. |
39 | ····/// </summary> |
40 | ····[TestFixture] |
41 | ····public class PolymorphicWTable : NDOTest |
42 | ····{ |
43 | ········public PolymorphicWTable() { |
44 | ········} |
45 | |
46 | ········private Reise r; |
47 | ········private Kostenpunkt kp; |
48 | ········private ICollection onSavingCollection = null; |
49 | |
50 | ········[SetUp] |
51 | ········public void Setup() { |
52 | ············r = CreateReise("ADC"); |
53 | ············kp = CreateBeleg(); |
54 | ········} |
55 | |
56 | ········[TearDown] |
57 | ········public void TearDown() { |
58 | var pm = PmFactory. NewPersistenceManager( ) ; |
59 | ············pm.TransactionMode = TransactionMode.None; |
60 | |
61 | ············//pm.UnloadCache(); |
62 | ············IList reiseliste = pm.GetClassExtent(typeof(Reise), true); |
63 | pm. Delete( reiseliste) ; |
64 | ············pm.Save(); |
65 | ············pm.UnloadCache(); |
66 | ············IQuery q; |
67 | ············IList liste; |
68 | |
69 | ············// We can't delete orphan Beleg object with NDO, so use direct Sql statements |
70 | ············using (var handler = pm.GetSqlPassThroughHandler()) |
71 | ············{ |
72 | ················var sql = "DELETE FROM " + pm.NDOMapping.FindClass( typeof( Beleg ) ).TableName; |
73 | ················handler.Execute( sql ); |
74 | ············} |
75 | |
76 | q = new NDOQuery<Contact>( pm) ; |
77 | ············liste = q.Execute(); |
78 | pm. Delete( liste) ; |
79 | ············pm.Save(); |
80 | q = new NDOQuery<Adresse>( pm) ; |
81 | ············liste = q.Execute(); |
82 | pm. Delete( liste) ; |
83 | ············pm.Save(); |
84 | pm. Dispose( ) ; |
85 | ········} |
86 | |
87 | ········[Test] |
88 | public void TestCreateObjects( ) { |
89 | var pm = PmFactory. NewPersistenceManager( ) ; |
90 | pm. MakePersistent( r) ; |
91 | r. AddKostenpunkt( kp) ; |
92 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "Beleg should be Created: ") ; |
93 | ········} |
94 | |
95 | |
96 | ········[Test] |
97 | public void TestCreateObjects2( ) { |
98 | var pm = PmFactory. NewPersistenceManager( ) ; |
99 | r. AddKostenpunkt( kp) ; |
100 | pm. MakePersistent( r) ; |
101 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "Beleg should be Created: ") ; |
102 | ········} |
103 | |
104 | ········[Test] |
105 | public void TestCreateObjectsSave( ) { |
106 | var pm = PmFactory. NewPersistenceManager( ) ; |
107 | r. AddKostenpunkt( kp) ; |
108 | pm. MakePersistent( r) ; |
109 | ············pm.Save(); |
110 | |
111 | ············pm.UnloadCache(); |
112 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
113 | Assert. That( r != null, "Reise not found") ; |
114 | Assert. That( 1 == r. Kostenpunkte. Count ) ; |
115 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found") ; |
116 | ········} |
117 | |
118 | ········[Test] |
119 | public void TestCreateManyObjectsSave( ) { |
120 | var pm = PmFactory. NewPersistenceManager( ) ; |
121 | r. AddKostenpunkt( kp) ; |
122 | pm. MakePersistent( r) ; |
123 | ············pm.Save(); |
124 | |
125 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
126 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
127 | ············pm.Save(); |
128 | ············pm.UnloadCache(); |
129 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
130 | Assert. That( r != null, "Reise not found") ; |
131 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: " ) ; |
132 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found") ; |
133 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: ") ; |
134 | ········} |
135 | ········[Test] |
136 | public void TestCreatePolymorphicObjectsSave( ) { |
137 | var pm = PmFactory. NewPersistenceManager( ) ; |
138 | r. AddKostenpunkt( kp) ; |
139 | pm. MakePersistent( r) ; |
140 | ············pm.Save(); |
141 | |
142 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
143 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
144 | ············pm.Save(); |
145 | ············pm.UnloadCache(); |
146 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
147 | Assert. That( r != null, "Reise not found") ; |
148 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found") ; |
149 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: ") ; |
150 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: ") ; |
151 | Assert. That( typeof( Beleg) == r. Kostenpunkte[0]. GetType( ) , "Type") ; |
152 | Assert. That( typeof( PKWFahrt) == r. Kostenpunkte[1]. GetType( ) , "Type") ; |
153 | Assert. That( typeof( Beleg) == r. Kostenpunkte[2]. GetType( ) , "Type") ; |
154 | |
155 | ········} |
156 | |
157 | ········[Test] |
158 | ········public void TestPolymorphicQuery() |
159 | ········{ |
160 | // Debug. WriteLine( "TestPolymorphicQuery") ; |
161 | var pm = PmFactory. NewPersistenceManager( ) ; |
162 | r. AddKostenpunkt( kp) ; |
163 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
164 | ············r.AddKostenpunkt(CreateBeleg(50)); |
165 | ············pm.MakePersistent(r); |
166 | ············pm.Save(); |
167 | ············pm.UnloadCache(); |
168 | |
169 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
170 | ············IList l = q.Execute(); |
171 | Assert. That( 3 == l. Count, "Anzahl Belege: ") ; |
172 | ········} |
173 | |
174 | |
175 | ········[Test] |
176 | ········public void TestPolymorphicAggregateQuery() |
177 | ········{ |
178 | // Debug. WriteLine( "TestPolymorphicAggregateQuery") ; |
179 | var pm = PmFactory. NewPersistenceManager( ) ; |
180 | r. AddKostenpunkt( kp) ; |
181 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
182 | ············r.AddKostenpunkt(CreateBeleg(50)); |
183 | ············pm.MakePersistent(r); |
184 | ············if (r.NDOObjectId.Id[0] is Int32) |
185 | ············{ |
186 | ················pm.Save(); |
187 | ················decimal sum = 0m; |
188 | foreach( Kostenpunkt kp2 in r. Kostenpunkte) |
189 | ················{ |
190 | sum += ( Int32) kp2. NDOObjectId. Id[0]; |
191 | ················} |
192 | |
193 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
194 | ················decimal newsum = (decimal)q.ExecuteAggregate("oid", AggregateType.Sum); |
195 | Assert. That( sum == newsum, "Summe stimmt nicht: ") ; |
196 | ················decimal newcount = (decimal)q.ExecuteAggregate("oid", AggregateType.Count); |
197 | Assert. That( 3 == newcount, "Summe stimmt nicht: ") ; |
198 | ············} |
199 | ········} |
200 | |
201 | ········[Test] |
202 | ········public void TestOnSavingEvent() |
203 | ········{ |
204 | // Debug. WriteLine( "TestOnSavingEvent") ; |
205 | var pm = PmFactory. NewPersistenceManager( ) ; |
206 | r. AddKostenpunkt( kp) ; |
207 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
208 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
209 | ············pm.MakePersistent(r); |
210 | ············pm.OnSavingEvent += new OnSavingHandler(this.OnSavingListener); |
211 | ············pm.Save(); |
212 | Assert. That( this. onSavingCollection != null, "onSavingCollection is null") ; |
213 | ········} |
214 | |
215 | ········private void OnSavingListener(ICollection c) |
216 | ········{ |
217 | ············this.onSavingCollection = c; |
218 | ········} |
219 | |
220 | |
221 | |
222 | ········[Ignore("Future Feature")] |
223 | ········[Test] |
224 | ········public void TestPolymorphicQueryWithSql() |
225 | ········{ |
226 | var pm = PmFactory. NewPersistenceManager( ) ; |
227 | r. AddKostenpunkt( kp) ; |
228 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
229 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
230 | pm. MakePersistent( r) ; |
231 | ············pm.Save(); |
232 | ············pm.UnloadCache(); |
233 | |
234 | ············string sql = @"SELECT DISTINCT Reise.ID FROM Reise, relBelegKostenpunkt, PKWFahrt, Beleg WHERE ((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 4) AND PKWFahrt.ID != 0 ) OR··((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 3) AND Beleg.ID != 0)"; |
235 | ············//string sql = "select distinct Reise.ID from Reise"; |
236 | ············//string sql = "select * from Reise"; |
237 | |
238 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, sql, true, QueryLanguage.Sql); |
239 | ············//System.Diagnostics.Debug.WriteLine(q.GeneratedQuery); |
240 | |
241 | ············IList l = q.Execute(); |
242 | Assert. That( 1 == l. Count, "Anzahl Reisen: ") ; |
243 | ········} |
244 | |
245 | ········ |
246 | ········[Test] |
247 | ········public void TestAddObjectSave() { |
248 | var pm = PmFactory. NewPersistenceManager( ) ; |
249 | pm. MakePersistent( r) ; |
250 | ············pm.Save(); |
251 | r. AddKostenpunkt( kp) ; |
252 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state") ; |
253 | ············pm.Save(); |
254 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
255 | kp = ( Kostenpunkt) pm. FindObject( kp. NDOObjectId) ; |
256 | Assert. That( r != null, "1. Reise not found") ; |
257 | Assert. That( kp != null, "2. Beleg not found") ; |
258 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "3. Wrong state") ; |
259 | Assert. That( DateTime. Now. Date == kp. Datum, "Wrong data") ; |
260 | ········} |
261 | ············ |
262 | ········[Test] |
263 | public void TestAddObjectAbort( ) { |
264 | var pm = PmFactory. NewPersistenceManager( ) ; |
265 | pm. MakePersistent( r) ; |
266 | ············pm.Save(); |
267 | r. AddKostenpunkt( kp) ; |
268 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state") ; |
269 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
270 | ············pm.Abort(); |
271 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
272 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects") ; |
273 | ········} |
274 | ········[Test] |
275 | public void TestRemoveObjectSave( ) { |
276 | var pm = PmFactory. NewPersistenceManager( ) ; |
277 | pm. MakePersistent( r) ; |
278 | r. AddKostenpunkt( kp) ; |
279 | ············pm.Save(); |
280 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
281 | r. Löschen( kp) ; |
282 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state") ; |
283 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects") ; |
284 | ············pm.Save(); |
285 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
286 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
287 | ········} |
288 | ············ |
289 | ········[Test] |
290 | public void TestRemoveObjectAbort( ) { |
291 | var pm = PmFactory. NewPersistenceManager( ) ; |
292 | pm. MakePersistent( r) ; |
293 | r. AddKostenpunkt( kp) ; |
294 | ············pm.Save(); |
295 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
296 | r. Löschen( kp) ; |
297 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state") ; |
298 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects") ; |
299 | ············pm.Abort(); |
300 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
301 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state") ; |
302 | ········} |
303 | |
304 | ········[Test] |
305 | public void TestDeleteSave( ) { |
306 | var pm = PmFactory. NewPersistenceManager( ) ; |
307 | pm. MakePersistent( r) ; |
308 | r. AddKostenpunkt( kp) ; |
309 | ············pm.Save(); |
310 | pm. Delete( r) ; |
311 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state") ; |
312 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state") ; |
313 | ············pm.Save(); |
314 | Assert. That( NDOObjectState. Transient == r. NDOObjectState, "1. Wrong state") ; |
315 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
316 | ········} |
317 | |
318 | |
319 | |
320 | ········[Test] |
321 | public void TestDeleteAbort( ) { |
322 | var pm = PmFactory. NewPersistenceManager( ) ; |
323 | pm. MakePersistent( r) ; |
324 | r. AddKostenpunkt( kp) ; |
325 | ············pm.Save(); |
326 | pm. Delete( r) ; |
327 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state") ; |
328 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state") ; |
329 | ············pm.Abort(); |
330 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1. Wrong state") ; |
331 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state") ; |
332 | ········} |
333 | |
334 | ········[Test] |
335 | public void TestAddRemoveSave( ) { |
336 | var pm = PmFactory. NewPersistenceManager( ) ; |
337 | pm. MakePersistent( r) ; |
338 | ············pm.Save(); |
339 | r. AddKostenpunkt( kp) ; |
340 | r. Löschen( kp) ; |
341 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state") ; |
342 | ············pm.Save(); |
343 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
344 | ········} |
345 | |
346 | ········[Test] |
347 | public void TestAddRemoveAbort( ) { |
348 | var pm = PmFactory. NewPersistenceManager( ) ; |
349 | pm. MakePersistent( r) ; |
350 | ············pm.Save(); |
351 | r. AddKostenpunkt( kp) ; |
352 | r. Löschen( kp) ; |
353 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state") ; |
354 | ············pm.Abort(); |
355 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
356 | ········} |
357 | |
358 | ········[Test] |
359 | public void TestClearRelatedObjectsSave( ) { |
360 | var pm = PmFactory. NewPersistenceManager( ) ; |
361 | for ( int i = 0; i < 10; i++) { |
362 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
363 | ············} |
364 | pm. MakePersistent( r) ; |
365 | ············pm.Save(); |
366 | ············IList rr = r.Kostenpunkte.ToList(); |
367 | ············r.LöscheKostenpunkte(); |
368 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
369 | for( int i = 0; i < 10; i++) { |
370 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
371 | ············} |
372 | ············pm.Save(); |
373 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
374 | for( int i = 0; i < 10; i++) { |
375 | Assert. That( NDOObjectState. Transient == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
376 | ············} |
377 | ········} |
378 | |
379 | ········[Test] |
380 | public void TestClearRelatedObjectsAbort( ) { |
381 | ············for(int i = 0; i < 10; i++) { |
382 | ················r.AddKostenpunkt(CreateBeleg(i*10+100)); |
383 | ············} |
384 | var pm = PmFactory. NewPersistenceManager( ) ; |
385 | pm. MakePersistent( r) ; |
386 | ············pm.Save(); |
387 | ············IList rr = r.Kostenpunkte.ToList(); |
388 | ············r.LöscheKostenpunkte(); |
389 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
390 | for( int i = 0; i < 10; i++) { |
391 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
392 | ············} |
393 | ············pm.Abort(); |
394 | Assert. That( 10 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
395 | for( int i = 0; i < 10; i++) { |
396 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
397 | ············} |
398 | ········} |
399 | |
400 | ········[Test] |
401 | public void TestAssignRelatedObjectsNullSave( ) { |
402 | for( int i = 0; i < 3; i++) { |
403 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
404 | ············} |
405 | var pm = PmFactory. NewPersistenceManager( ) ; |
406 | pm. MakePersistent( r) ; |
407 | ············pm.Save(); |
408 | ············IList rr = r.Kostenpunkte.ToList(); |
409 | ············r.ErsetzeKostenpunkte(); |
410 | Assert. That( r. Kostenpunkte == null, "No objects should be there") ; |
411 | for( int i = 0; i < 3; i++) { |
412 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
413 | ············} |
414 | ············pm.Save(); |
415 | Assert. That( r. Kostenpunkte == null, "No objects should be there") ; |
416 | for( int i = 0; i < 3; i++) { |
417 | Assert. That( NDOObjectState. Transient == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
418 | ············} |
419 | ········} |
420 | |
421 | ········[Test] |
422 | public void TestAssignRelatedObjectsNullAbort( ) { |
423 | for( int i = 0; i < 3; i++) { |
424 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
425 | ············} |
426 | var pm = PmFactory. NewPersistenceManager( ) ; |
427 | pm. MakePersistent( r) ; |
428 | ············pm.Save(); |
429 | ············IList rr = r.Kostenpunkte.ToList(); |
430 | ············r.ErsetzeKostenpunkte(); |
431 | Assert. That( r. Kostenpunkte == null, "No objects should be there") ; |
432 | for( int i = 0; i < 3; i++) { |
433 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
434 | ············} |
435 | ············pm.Abort(); |
436 | Assert. That( 3 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
437 | for( int i = 0; i < 3; i++) { |
438 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
439 | ············} |
440 | ········} |
441 | |
442 | ········[Test] |
443 | public void TestAssignRelatedObjectsSave( ) { |
444 | for( int i = 0; i < 3; i++) { |
445 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
446 | ············} |
447 | var pm = PmFactory. NewPersistenceManager( ) ; |
448 | pm. MakePersistent( r) ; |
449 | ············pm.Save(); |
450 | ············List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
451 | ············Kostenpunkt nr = CreateBeleg(50); |
452 | neueKostenpunkte. Add( nr) ; |
453 | |
454 | ············IList rr = r.Kostenpunkte.ToList(); |
455 | r. ErsetzeKostenpunkte( neueKostenpunkte) ; |
456 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
457 | for( int i = 0; i < 3; i++) { |
458 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
459 | ············} |
460 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state") ; |
461 | |
462 | ············pm.Save(); |
463 | Assert. That( 1 == r. Kostenpunkte. Count, "4. Wrong number of objects") ; |
464 | for( int i = 0; i < 3; i++) { |
465 | Assert. That( NDOObjectState. Transient == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "5. Wrong state") ; |
466 | ············} |
467 | ············Assert.That(NDOObjectState.Persistent ==··nr.NDOObjectState, "6. Wrong state"); |
468 | ········} |
469 | |
470 | ········[Test] |
471 | public void TestAssignRelatedObjectsAbort( ) { |
472 | for( int i = 0; i < 3; i++) { |
473 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
474 | ············} |
475 | var pm = PmFactory. NewPersistenceManager( ) ; |
476 | pm. MakePersistent( r) ; |
477 | ············pm.Save(); |
478 | ············List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
479 | ············Kostenpunkt nr = CreateBeleg(200); |
480 | neueKostenpunkte. Add( nr) ; |
481 | |
482 | ············IList rr = r.Kostenpunkte.ToList(); |
483 | r. ErsetzeKostenpunkte( neueKostenpunkte) ; |
484 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
485 | for( int i = 0; i < 3; i++) { |
486 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
487 | ············} |
488 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state") ; |
489 | |
490 | ············pm.Abort(); |
491 | Assert. That( 3 == r. Kostenpunkte. Count, "4. Wrong number of objects") ; |
492 | for( int i = 0; i < 3; i++) { |
493 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "5. Wrong state") ; |
494 | ············} |
495 | ············Assert.That(NDOObjectState.Transient ==··nr.NDOObjectState, "6. Wrong state"); |
496 | ········} |
497 | |
498 | |
499 | ········[Test] |
500 | public void TestHollow( ) { |
501 | r. AddKostenpunkt( kp) ; |
502 | var pm = PmFactory. NewPersistenceManager( ) ; |
503 | pm. MakePersistent( r) ; |
504 | ············pm.Save(); |
505 | pm. MakeHollow( r) ; |
506 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow") ; |
507 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "1: Kostenpunkt should be persistent") ; |
508 | ············var kostenpunkte = r.Kostenpunkte; |
509 | |
510 | pm. MakeHollow( r, true) ; |
511 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "2: Reise should be hollow") ; |
512 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "2: Kostenpunkt should be hollow") ; |
513 | |
514 | ············kostenpunkte = r.Kostenpunkte; |
515 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "3: Reise should be persistent") ; |
516 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "3: Kostenpunkt should be hollow") ; |
517 | Assert. That( 200 == kp. Kosten, "3: Kostenpunkt should have correct Kosten") ; |
518 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "4: Kostenpunkt should be persistent") ; |
519 | ········} |
520 | |
521 | ········[Test] |
522 | public void TestMakeAllHollow( ) { |
523 | r. AddKostenpunkt( kp) ; |
524 | var pm = PmFactory. NewPersistenceManager( ) ; |
525 | pm. MakePersistent( r) ; |
526 | ············pm.Save(); |
527 | ············pm.MakeAllHollow(); |
528 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow") ; |
529 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "1: Kostenpunkt should be hollow") ; |
530 | ········} |
531 | |
532 | ········[Test] |
533 | public void TestMakeAllHollowUnsaved( ) { |
534 | var pm = PmFactory. NewPersistenceManager( ) ; |
535 | r. AddKostenpunkt( kp) ; |
536 | pm. MakePersistent( r) ; |
537 | ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects |
538 | Assert. That( NDOObjectState. Created == r. NDOObjectState, "1: Reise should be created") ; |
539 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1: Kostenpunkt should be created") ; |
540 | ········} |
541 | |
542 | ········[Test] |
543 | public void TestLoadRelatedObjects( ) { |
544 | for( int i = 0; i < 10; i++) { |
545 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
546 | ············} |
547 | var pm = PmFactory. NewPersistenceManager( ) ; |
548 | pm. MakePersistent( r) ; |
549 | ············pm.Save(); |
550 | pm. MakeHollow( r, true) ; |
551 | |
552 | ············var kpunkte = r.Kostenpunkte.ToList(); |
553 | Assert. That( 10 == kpunkte. Count, "Array size should be 10") ; |
554 | |
555 | for( int i = 0; i < 10; i++) { |
556 | ················Kostenpunkt rr = (Kostenpunkt)kpunkte[i]; |
557 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow") ; |
558 | #if !ORACLE && !MYSQL && !FIREBIRD |
559 | Assert. That( i*10+100 == rr. Kosten, "2: Kostenpunkt should be in right order") ; |
560 | #endif |
561 | ············} |
562 | |
563 | |
564 | ············pm.MakeAllHollow(); |
565 | ············pm.UnloadCache(); |
566 | ············var kpunkte2 = r.Kostenpunkte.ToList(); |
567 | for( int i = 0; i < 10; i++) { |
568 | ················Kostenpunkt r1 = (Kostenpunkt)kpunkte[i]; |
569 | ················Kostenpunkt r2 = (Kostenpunkt)kpunkte2[i]; |
570 | #if !ORACLE && !MYSQL && !FIREBIRD |
571 | Assert. That( i*10+100 == r1. Kosten, "3: Kostenpunkt should be in right order") ; |
572 | #endif |
573 | Assert. That( r1 != r2, "Objects should be different") ; |
574 | ············} |
575 | ········} |
576 | |
577 | ········[Test] |
578 | public void TestLoadRelatedObjectsSave( ) { |
579 | var pm = PmFactory. NewPersistenceManager( ) ; |
580 | pm. MakePersistent( r) ; |
581 | ············pm.Save(); |
582 | for( int i = 0; i < 10; i++) { |
583 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
584 | ············} |
585 | ············pm.Save(); |
586 | pm. MakeHollow( r, true) ; |
587 | |
588 | ············IList reisen = r.Kostenpunkte.ToList(); |
589 | |
590 | for( int i = 0; i < 10; i++) { |
591 | ················Kostenpunkt rr = (Kostenpunkt)reisen[i]; |
592 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow") ; |
593 | #if !ORACLE && !MYSQL && !FIREBIRD |
594 | Assert. That( i*10+100 == rr. Kosten, "2: Kostenpunkt should be in right order") ; |
595 | #endif |
596 | ············} |
597 | |
598 | |
599 | ············pm.MakeAllHollow(); |
600 | ············pm.UnloadCache(); |
601 | ············IList reisen2 = r.Kostenpunkte.ToList(); |
602 | for( int i = 0; i < 10; i++) { |
603 | ················Kostenpunkt r1 = (Kostenpunkt)reisen[i]; |
604 | ················Kostenpunkt r2 = (Kostenpunkt)reisen2[i]; |
605 | #if !ORACLE && !MYSQL && !FIREBIRD |
606 | Assert. That( i*10+100 == r1. Kosten, "3: Kostenpunkt should be in right order") ; |
607 | #endif |
608 | Assert. That( r1 != r2, "Objects should be different") ; |
609 | ············} |
610 | ········} |
611 | |
612 | ········[Test] |
613 | public void TestExtentRelatedObjects( ) { |
614 | r. AddKostenpunkt( kp) ; |
615 | var pm = PmFactory. NewPersistenceManager( ) ; |
616 | pm. MakePersistent( r) ; |
617 | ············pm.Save(); |
618 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "0: Reise should be persistent") ; |
619 | ············IList liste = pm.GetClassExtent(typeof(Reise)); |
620 | r = ( Reise) liste[0]; |
621 | Assert. That( 1 == liste. Count, "1: Number of Reise objects is wrong") ; |
622 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1: Reise should be persistent") ; |
623 | Assert. That( r. Kostenpunkte != null, "2. Relation is missing") ; |
624 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
625 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) r. Kostenpunkte[0]) . NDOObjectState, "4. : Kostenpunkt should be hollow") ; |
626 | |
627 | ············pm.UnloadCache(); |
628 | liste = pm. GetClassExtent( typeof( Reise) ) ; |
629 | r = ( Reise) liste[0]; |
630 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "5: Reise should be hollow") ; |
631 | Assert. That( r. Kostenpunkte != null, "6. Relation is missing") ; |
632 | Assert. That( 1 == r. Kostenpunkte. Count, "7. Wrong number of objects") ; |
633 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0]) . NDOObjectState, "8. : Kostenpunkt should be hollow") ; |
634 | |
635 | ············pm.UnloadCache(); |
636 | liste = pm. GetClassExtent( typeof( Reise) , false) ; |
637 | r = ( Reise) liste[0]; |
638 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "9: Reise should be persistent") ; |
639 | Assert. That( r. Kostenpunkte != null, "10. Relation is missing") ; |
640 | Assert. That( 1 == r. Kostenpunkte. Count, "11. Wrong number of objects") ; |
641 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0]) . NDOObjectState, "12. : Kostenpunkt should be hollow") ; |
642 | ········} |
643 | |
644 | ········[Test] |
645 | ········public void TestJoinQuery() |
646 | ········{ |
647 | ············var pm = PmFactory.NewPersistenceManager(); |
648 | |
649 | ············Person p = new Person(); |
650 | ············p.FirstName = "Mirko"; |
651 | ············p.LastName = "Matytschak"; |
652 | ············p.Moniker = "Hallo"; |
653 | ············Adresse a1 = new Adresse(); |
654 | ············a1.Lkz = "D"; |
655 | ············a1.Plz = "83646"; |
656 | ············a1.Straße = "Nockhergasse 7"; |
657 | ············a1.Ort = "Bad Tölz"; |
658 | |
659 | ············Adresse a2 = new Adresse(); |
660 | ············a2.Ort = "Mönchen"; |
661 | ············a2.Plz = "80331"; |
662 | ············a2.Straße = "Isartorplatz 5"; |
663 | ············a2.Lkz = "D"; |
664 | |
665 | ············Institution i = new Institution(); |
666 | ············i.FirstName = "Schnulli"; |
667 | ············i.LastName = "Wauwau"; |
668 | ············i.Hausmeister = "Möller"; |
669 | |
670 | pm. MakePersistent( a1) ; |
671 | pm. MakePersistent( a2) ; |
672 | pm. MakePersistent( p) ; |
673 | pm. MakePersistent( i) ; |
674 | i. AddAdresse( a1) ; |
675 | p. AddAdresse( a1) ; |
676 | p. AddAdresse( a2) ; |
677 | ············pm.Save(); |
678 | ············pm.UnloadCache(); |
679 | |
680 | ············IQuery q = new NDOQuery<Contact>(pm, $"addresses.plz = '{a2.Plz}'"); |
681 | ············IList l = q.Execute(); |
682 | Assert. That( 1 == l. Count, "Wrong number of contacts") ; |
683 | ········} |
684 | |
685 | ········[Test] |
686 | ········public void TestPolymorphicCondition() |
687 | ········{ |
688 | r. AddKostenpunkt( kp) ; |
689 | var pm = PmFactory. NewPersistenceManager( ) ; |
690 | pm. MakePersistent( r) ; |
691 | ············pm.Save(); |
692 | |
693 | ············pm.UnloadCache(); |
694 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
695 | q. Parameters. Add( DateTime. Now. Date) ; |
696 | r = ( Reise) q. ExecuteSingle( true) ; |
697 | Assert. That( r != null, "Reise not found") ; |
698 | Assert. That( r. Kostenpunkte. Count > 0, "No Beleg" ) ; |
699 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
700 | ········} |
701 | |
702 | ········[Test] |
703 | ········public void TestSortedQueryAsc() |
704 | ········{ |
705 | var pm = PmFactory. NewPersistenceManager( ) ; |
706 | |
707 | r. AddKostenpunkt( kp) ; |
708 | ············DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
709 | ············kp.Datum = yesterday; |
710 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
711 | ············kp.Datum = DateTime.Today; |
712 | pm. MakePersistent( r) ; |
713 | ············pm.Save(); |
714 | |
715 | ············pm.UnloadCache(); |
716 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
717 | q. Orderings. Add( new AscendingOrder( "datum") ) ; |
718 | ············IList l = q.Execute(); |
719 | Assert. That( 2 == l. Count, "Count wrong") ; |
720 | Assert. That( yesterday == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
721 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
722 | ········} |
723 | |
724 | ········[Test] |
725 | ········public void TestSortedQueryDesc() |
726 | ········{ |
727 | var pm = PmFactory. NewPersistenceManager( ) ; |
728 | |
729 | ············r.AddKostenpunkt(kp); |
730 | ············DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
731 | ············kp.Datum = yesterday; |
732 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
733 | ············kp.Datum = DateTime.Today; |
734 | pm. MakePersistent( r) ; |
735 | ············pm.Save(); |
736 | |
737 | ············pm.UnloadCache(); |
738 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
739 | q. Orderings. Add( new DescendingOrder( "datum") ) ; |
740 | ············IList l = q.Execute(); |
741 | //pm. VerboseMode = false; |
742 | Assert. That( 2 == l. Count, "Count wrong") ; |
743 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
744 | Assert. That( yesterday == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
745 | ········} |
746 | |
747 | ········[Test] |
748 | ········public void TestSortedQueryAscOneNull() |
749 | ········{ |
750 | ············var pm = PmFactory.NewPersistenceManager(); |
751 | |
752 | r. AddKostenpunkt( kp) ; |
753 | ············kp.Datum = DateTime.MinValue;··// DbNull |
754 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
755 | ············kp.Datum = DateTime.Today; |
756 | pm. MakePersistent( r) ; |
757 | ············pm.Save(); |
758 | |
759 | ············pm.UnloadCache(); |
760 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
761 | q. Orderings. Add( new AscendingOrder( "datum") ) ; |
762 | ············IList l = q.Execute(); |
763 | ············//pm.VerboseMode = false; |
764 | Assert. That( 2 == l. Count, "Count wrong") ; |
765 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
766 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
767 | ········} |
768 | |
769 | ········[Test] |
770 | ········public void TestSortedQueryBothNull() |
771 | ········{ |
772 | var pm = PmFactory. NewPersistenceManager( ) ; |
773 | |
774 | r. AddKostenpunkt( kp) ; |
775 | ············kp.Datum = DateTime.MinValue;··// DbNull |
776 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
777 | ············kp.Datum = DateTime.MinValue;··// DbNull |
778 | pm. MakePersistent( r) ; |
779 | ············pm.Save(); |
780 | |
781 | ············pm.UnloadCache(); |
782 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
783 | q. Orderings. Add( new AscendingOrder( "datum") ) ; |
784 | ············IList l = q.Execute(); |
785 | ············//pm.VerboseMode = false; |
786 | Assert. That( 2 == l. Count, "Count wrong") ; |
787 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0]) . Datum, "Wrong Date #1") ; |
788 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1]) . Datum, "Wrong Date #2") ; |
789 | ········} |
790 | |
791 | ········[Test] |
792 | ········public void TestSortedQueryDescOneNull() |
793 | ········{ |
794 | var pm = PmFactory. NewPersistenceManager( ) ; |
795 | ············r.AddKostenpunkt(kp); |
796 | ············kp.Datum = DateTime.MinValue; |
797 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
798 | ············kp.Datum = DateTime.Today; |
799 | pm. MakePersistent( r) ; |
800 | ············pm.Save(); |
801 | |
802 | ············pm.UnloadCache(); |
803 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
804 | q. Orderings. Add( new DescendingOrder( "datum") ) ; |
805 | ············IList l = q.Execute(); |
806 | ············//pm.VerboseMode = false; |
807 | Assert. That( 2 == l. Count, "Count wrong") ; |
808 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
809 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
810 | ········} |
811 | |
812 | |
813 | ········[Test] |
814 | ········public void TestQueryForSingleObject() |
815 | ········{ |
816 | var pm = PmFactory. NewPersistenceManager( ) ; |
817 | ············Kostenpunkt kp2 = CreatePkw(100); |
818 | r. AddKostenpunkt( kp) ; |
819 | r. AddKostenpunkt( kp2) ; |
820 | pm. MakePersistent( r) ; |
821 | ············pm.Save(); |
822 | ············pm.UnloadCache(); |
823 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
824 | q. Parameters. Add( DateTime. Now. Date) ; |
825 | ············IList l = q.Execute(); |
826 | Assert. That( 1 == l. Count, "Count wrong") ; |
827 | ········} |
828 | |
829 | |
830 | ········[Test] |
831 | ········public void TestPolyDelete() |
832 | ········{ |
833 | var pm = PmFactory. NewPersistenceManager( ) ; |
834 | ············Kostenpunkt kp2 = CreatePkw(100); |
835 | r. AddKostenpunkt( kp) ; |
836 | r. AddKostenpunkt( kp2) ; |
837 | pm. MakePersistent( r) ; |
838 | ············pm.Save(); |
839 | ············pm.UnloadCache(); |
840 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
841 | q. Parameters. Add( DateTime. Now. Date) ; |
842 | ············IList l = q.Execute(); |
843 | Assert. That( 1 == l. Count, "Count wrong") ; |
844 | ············r = (Reise) l[0]; |
845 | pm. Delete( r) ; |
846 | ············pm.Save(); |
847 | ········} |
848 | |
849 | |
850 | ········[Test] |
851 | ········public void RelationTest() |
852 | ········{ |
853 | ············var pm = PmFactory.NewPersistenceManager(); |
854 | ············NDOMapping mapping = pm.NDOMapping; |
855 | ············Class reiseClass = mapping.FindClass(typeof(Reise)); |
856 | ············Class pkwClass = mapping.FindClass(typeof(PKWFahrt)); |
857 | Assert. That( reiseClass != null, "Mapping for Reise not found") ; |
858 | Assert. That( pkwClass != null, "Mapping for pkw not found") ; |
859 | ············Relation r1 = reiseClass.FindRelation("belege"); |
860 | Assert. That( r1 != null, "Relation not found #1") ; |
861 | Assert. That( r1. ForeignRelation != null, "ForeignRelation of Reise not found") ; |
862 | ············Relation r2 = pkwClass.FindRelation("reise"); |
863 | Assert. That( r2 != null, "Relation not found #2") ; |
864 | Assert. That( r2. ForeignRelation != null, "ForeignRelation of PKWFahrt not found") ; |
865 | Assert. That( r1 == r2. ForeignRelation, "Back relation wrong") ; |
866 | //············Debug.WriteLine(r1.Parent.FullName + "->" + r1.ReferencedTypeName); |
867 | //············Debug.WriteLine(r1.ForeignRelation.Parent.FullName + "->" + r1.ForeignRelation.ReferencedTypeName); |
868 | //············Debug.WriteLine(r2.Parent.FullName + "->" + r2.ReferencedTypeName); |
869 | //············Debug.WriteLine(r2.ForeignRelation.Parent.FullName + "->" + r2.ForeignRelation.ReferencedTypeName); |
870 | ········} |
871 | |
872 | |
873 | ········private Kostenpunkt CreateBeleg(double betrag) |
874 | ········{ |
875 | ············return new Beleg("Taxi", betrag); |
876 | ········} |
877 | |
878 | ········private Kostenpunkt CreateBeleg() { |
879 | ············return new Beleg("Flug", 200); |
880 | ········} |
881 | |
882 | ········private Kostenpunkt CreatePkw() { |
883 | ············return CreatePkw(100); |
884 | ········} |
885 | |
886 | ········private Kostenpunkt CreatePkw(double km) { |
887 | ············return new PKWFahrt(km); |
888 | ········} |
889 | |
890 | ········private Reise CreateReise(string zweck) { |
891 | ············Reise r = new Reise(); |
892 | ············r.Zweck = zweck; |
893 | ············return r; |
894 | ········} |
895 | ····} |
896 | } |
897 |
New Commit (60aa080)
1 | // |
2 | // Copyright ( c) 2002-2025 Mirko Matytschak |
3 | // (www.netdataobjects.de) |
4 | // |
5 | // Author: Mirko Matytschak |
6 | // |
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated |
8 | // documentation files (the "Software"), to deal in the Software without restriction, including without limitation |
9 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the |
10 | // Software, and to permit persons to whom the Software is furnished to do so, subject to the following |
11 | // conditions: |
12 | |
13 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions |
14 | // of the Software. |
15 | // |
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED |
17 | // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
19 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. |
21 | |
22 | |
23 | using System; |
24 | using System.Diagnostics; |
25 | using System.Collections; |
26 | using NUnit.Framework; |
27 | using NDO; |
28 | using NDO.Mapping; |
29 | using Reisekosten; |
30 | using Reisekosten.Personal; |
31 | using PureBusinessClasses; |
32 | using NDO.Query; |
33 | using System.Linq; |
34 | using System.Collections.Generic; |
35 | |
36 | namespace NdoUnitTests { |
37 | ····/// <summary> |
38 | ····/// Polymorphic tests. |
39 | ····/// </summary> |
40 | ····[TestFixture] |
41 | ····public class PolymorphicWTable : NDOTest |
42 | ····{ |
43 | ········public PolymorphicWTable() { |
44 | ········} |
45 | |
46 | ········private Reise r; |
47 | ········private Kostenpunkt kp; |
48 | ········private ICollection onSavingCollection = null; |
49 | |
50 | ········[SetUp] |
51 | ········public void Setup() { |
52 | ············r = CreateReise("ADC"); |
53 | ············kp = CreateBeleg(); |
54 | ········} |
55 | |
56 | ········[TearDown] |
57 | ········public void TearDown() { |
58 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
59 | ············{ |
60 | ················pm.TransactionMode = TransactionMode.None; |
61 | |
62 | ················//pm.UnloadCache(); |
63 | ················IList reiseliste = pm.GetClassExtent(typeof(Reise), true); |
64 | pm. Delete( reiseliste ) ; |
65 | ················pm.Save(); |
66 | ················pm.UnloadCache(); |
67 | ················IQuery q; |
68 | ················IList liste; |
69 | |
70 | ················// We can't delete orphan Beleg object with NDO, so use direct Sql statements |
71 | ················using (var handler = pm.GetSqlPassThroughHandler()) |
72 | ················{ |
73 | ····················var sql = "DELETE FROM " + pm.NDOMapping.FindClass( typeof( Beleg ) ).TableName; |
74 | ····················handler.Execute( sql ); |
75 | ················} |
76 | |
77 | q = new NDOQuery<Contact>( pm ) ; |
78 | ················liste = q.Execute(); |
79 | pm. Delete( liste ) ; |
80 | ················pm.Save(); |
81 | q = new NDOQuery<Adresse>( pm ) ; |
82 | ················liste = q.Execute(); |
83 | pm. Delete( liste ) ; |
84 | ················pm.Save(); |
85 | } |
86 | ········} |
87 | |
88 | ········[Test] |
89 | public void TestCreateObjects( ) |
90 | { |
91 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
92 | { |
93 | pm. MakePersistent( r ) ; |
94 | ················r.AddKostenpunkt( kp ); |
95 | ················Assert.That( NDOObjectState.Created == kp.NDOObjectState, "Beleg should be Created: " ); |
96 | ············} |
97 | ········} |
98 | |
99 | |
100 | ········[Test] |
101 | public void TestCreateObjects2( ) |
102 | { |
103 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
104 | { |
105 | r. AddKostenpunkt( kp ) ; |
106 | ················pm.MakePersistent( r ); |
107 | ················Assert.That( NDOObjectState.Created == kp.NDOObjectState, "Beleg should be Created: " ); |
108 | ············} |
109 | ········} |
110 | |
111 | ········[Test] |
112 | public void TestCreateObjectsSave( ) |
113 | { |
114 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
115 | { |
116 | ················r.AddKostenpunkt( kp ); |
117 | ················pm.MakePersistent( r ); |
118 | ················pm.Save(); |
119 | |
120 | ················pm.UnloadCache(); |
121 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
122 | Assert. That( r != null, "Reise not found" ) ; |
123 | Assert. That( 1 == r. Kostenpunkte. Count ) ; |
124 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
125 | ············} |
126 | ········} |
127 | |
128 | ········[Test] |
129 | public void TestCreateManyObjectsSave( ) |
130 | { |
131 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
132 | { |
133 | ················r.AddKostenpunkt( kp ); |
134 | ················pm.MakePersistent( r ); |
135 | ················pm.Save(); |
136 | |
137 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
138 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
139 | ················pm.Save(); |
140 | ················pm.UnloadCache(); |
141 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
142 | Assert. That( r != null, "Reise not found" ) ; |
143 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: " ) ; |
144 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
145 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: " ) ; |
146 | ············} |
147 | ········} |
148 | |
149 | ········[Test] |
150 | public void TestCreatePolymorphicObjectsSave( ) |
151 | { |
152 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
153 | { |
154 | ················r.AddKostenpunkt( kp ); |
155 | ················pm.MakePersistent( r ); |
156 | ················pm.Save(); |
157 | |
158 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
159 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
160 | ················pm.Save(); |
161 | ················pm.UnloadCache(); |
162 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
163 | Assert. That( r != null, "Reise not found" ) ; |
164 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
165 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: " ) ; |
166 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: " ) ; |
167 | Assert. That( typeof( Beleg ) == r. Kostenpunkte[0]. GetType( ) , "Type" ) ; |
168 | Assert. That( typeof( PKWFahrt ) == r. Kostenpunkte[1]. GetType( ) , "Type" ) ; |
169 | Assert. That( typeof( Beleg ) == r. Kostenpunkte[2]. GetType( ) , "Type" ) ; |
170 | } |
171 | ········} |
172 | |
173 | ········[Test] |
174 | ········public void TestPolymorphicQuery() |
175 | ········{ |
176 | ············using (var pm = PmFactory.NewPersistenceManager()) |
177 | ············{ |
178 | r. AddKostenpunkt( kp ) ; |
179 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
180 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
181 | pm. MakePersistent( r ) ; |
182 | ················pm.Save(); |
183 | ················pm.UnloadCache(); |
184 | |
185 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
186 | ················IList l = q.Execute(); |
187 | Assert. That( 3 == l. Count, "Anzahl Belege: " ) ; |
188 | ············} |
189 | ········} |
190 | |
191 | |
192 | ········[Test] |
193 | ········public void TestPolymorphicAggregateQuery() |
194 | ········{ |
195 | ············using (var pm = PmFactory.NewPersistenceManager()) |
196 | ············{ |
197 | r. AddKostenpunkt( kp ) ; |
198 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
199 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
200 | pm. MakePersistent( r ) ; |
201 | ················if (r.NDOObjectId.Id[0] is Int32) |
202 | ················{ |
203 | ····················pm.Save(); |
204 | ····················decimal sum = 0m; |
205 | foreach ( Kostenpunkt kp2 in r. Kostenpunkte) |
206 | ····················{ |
207 | sum += ( Int32) kp2. NDOObjectId. Id[0]; |
208 | ····················} |
209 | |
210 | ····················IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
211 | ····················decimal newsum = (decimal)q.ExecuteAggregate("oid", AggregateType.Sum); |
212 | Assert. That( sum == newsum, "Summe stimmt nicht: " ) ; |
213 | ····················decimal newcount = (decimal)q.ExecuteAggregate("oid", AggregateType.Count); |
214 | Assert. That( 3 == newcount, "Summe stimmt nicht: " ) ; |
215 | ················} |
216 | ············} |
217 | ········} |
218 | |
219 | ········[Test] |
220 | ········public void TestOnSavingEvent() |
221 | ········{ |
222 | ············using (var pm = PmFactory.NewPersistenceManager()) |
223 | ············{ |
224 | r. AddKostenpunkt( kp ) ; |
225 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
226 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
227 | pm. MakePersistent( r ) ; |
228 | pm. OnSavingEvent += new OnSavingHandler( this. OnSavingListener ) ; |
229 | ················pm.Save(); |
230 | Assert. That( this. onSavingCollection != null, "onSavingCollection is null" ) ; |
231 | ············} |
232 | ········} |
233 | |
234 | ········private void OnSavingListener(ICollection c) |
235 | ········{ |
236 | ············this.onSavingCollection = c; |
237 | ········} |
238 | |
239 | |
240 | |
241 | ········[Ignore("Future Feature")] |
242 | ········[Test] |
243 | ········public void TestPolymorphicQueryWithSql() |
244 | ········{ |
245 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
246 | { |
247 | r. AddKostenpunkt( kp ) ; |
248 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
249 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
250 | ················pm.MakePersistent( r ); |
251 | ················pm.Save(); |
252 | ················pm.UnloadCache(); |
253 | |
254 | ················string sql = @"SELECT DISTINCT Reise.ID FROM Reise, relBelegKostenpunkt, PKWFahrt, Beleg WHERE ((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 4) AND PKWFahrt.ID != 0 ) OR··((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 3) AND Beleg.ID != 0)"; |
255 | ················//string sql = "select distinct Reise.ID from Reise"; |
256 | ················//string sql = "select * from Reise"; |
257 | |
258 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, sql, true, QueryLanguage.Sql); |
259 | ················//System.Diagnostics.Debug.WriteLine(q.GeneratedQuery); |
260 | |
261 | ················IList l = q.Execute(); |
262 | Assert. That( 1 == l. Count, "Anzahl Reisen: " ) ; |
263 | ············} |
264 | ········} |
265 | |
266 | ········ |
267 | ········[Test] |
268 | ········public void TestAddObjectSave() { |
269 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
270 | { |
271 | ················pm.MakePersistent( r ); |
272 | ················pm.Save(); |
273 | r. AddKostenpunkt( kp ) ; |
274 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state" ) ; |
275 | ················pm.Save(); |
276 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
277 | kp = ( Kostenpunkt) pm. FindObject( kp. NDOObjectId ) ; |
278 | Assert. That( r != null, "1. Reise not found" ) ; |
279 | Assert. That( kp != null, "2. Beleg not found" ) ; |
280 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "3. Wrong state" ) ; |
281 | Assert. That( DateTime. Now. Date == kp. Datum, "Wrong data" ) ; |
282 | ············} |
283 | ········} |
284 | ············ |
285 | ········[Test] |
286 | public void TestAddObjectAbort( ) |
287 | { |
288 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
289 | ············{ |
290 | ················pm.MakePersistent( r ); |
291 | ················pm.Save(); |
292 | r. AddKostenpunkt( kp ) ; |
293 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state" ) ; |
294 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
295 | ················pm.Abort(); |
296 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
297 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects" ) ; |
298 | ············} |
299 | ········} |
300 | |
301 | ········[Test] |
302 | public void TestRemoveObjectSave( ) |
303 | { |
304 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
305 | { |
306 | ················pm.MakePersistent( r ); |
307 | ················r.AddKostenpunkt( kp ); |
308 | ················pm.Save(); |
309 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
310 | r. Löschen( kp ) ; |
311 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state" ) ; |
312 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects" ) ; |
313 | ················pm.Save(); |
314 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
315 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
316 | ············} |
317 | ········} |
318 | ············ |
319 | ········[Test] |
320 | public void TestRemoveObjectAbort( ) |
321 | { |
322 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
323 | { |
324 | ················pm.MakePersistent( r ); |
325 | ················r.AddKostenpunkt( kp ); |
326 | ················pm.Save(); |
327 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
328 | r. Löschen( kp ) ; |
329 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state" ) ; |
330 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects" ) ; |
331 | ················pm.Abort(); |
332 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
333 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state" ) ; |
334 | ············} |
335 | ········} |
336 | |
337 | ········[Test] |
338 | public void TestDeleteSave( ) |
339 | { |
340 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
341 | { |
342 | ················pm.MakePersistent( r ); |
343 | ················r.AddKostenpunkt( kp ); |
344 | ················pm.Save(); |
345 | pm. Delete( r ) ; |
346 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state" ) ; |
347 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state" ) ; |
348 | ················pm.Save(); |
349 | Assert. That( NDOObjectState. Transient == r. NDOObjectState, "1. Wrong state" ) ; |
350 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
351 | ············} |
352 | ········} |
353 | |
354 | |
355 | |
356 | ········[Test] |
357 | public void TestDeleteAbort( ) |
358 | { |
359 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
360 | { |
361 | ················pm.MakePersistent( r ); |
362 | ················r.AddKostenpunkt( kp ); |
363 | ················pm.Save(); |
364 | pm. Delete( r ) ; |
365 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state" ) ; |
366 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state" ) ; |
367 | ················pm.Abort(); |
368 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1. Wrong state" ) ; |
369 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state" ) ; |
370 | ············} |
371 | ········} |
372 | |
373 | ········[Test] |
374 | public void TestAddRemoveSave( ) |
375 | { |
376 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
377 | ············{ |
378 | ················pm.MakePersistent( r ); |
379 | ················pm.Save(); |
380 | r. AddKostenpunkt( kp ) ; |
381 | r. Löschen( kp ) ; |
382 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state" ) ; |
383 | ················pm.Save(); |
384 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
385 | ············} |
386 | ········} |
387 | |
388 | ········[Test] |
389 | public void TestAddRemoveAbort( ) |
390 | { |
391 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
392 | ············{ |
393 | ················pm.MakePersistent( r ); |
394 | ················pm.Save(); |
395 | r. AddKostenpunkt( kp ) ; |
396 | r. Löschen( kp ) ; |
397 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state" ) ; |
398 | ················pm.Abort(); |
399 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
400 | ············} |
401 | ········} |
402 | |
403 | ········[Test] |
404 | public void TestClearRelatedObjectsSave( ) |
405 | { |
406 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
407 | { |
408 | ················for (int i = 0; i < 10; i++) |
409 | ················{ |
410 | ····················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
411 | ················} |
412 | pm. MakePersistent( r ) ; |
413 | ················pm.Save(); |
414 | ················IList rr = r.Kostenpunkte.ToList(); |
415 | ················r.LöscheKostenpunkte(); |
416 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
417 | for ( int i = 0; i < 10; i++) |
418 | { |
419 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
420 | ················} |
421 | ················pm.Save(); |
422 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
423 | for ( int i = 0; i < 10; i++) |
424 | { |
425 | ····················Assert.That( NDOObjectState.Transient == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
426 | ················} |
427 | ············} |
428 | ········} |
429 | |
430 | ········[Test] |
431 | public void TestClearRelatedObjectsAbort( ) |
432 | ········{ |
433 | ············for(int i = 0; i < 10; i++) { |
434 | ················r.AddKostenpunkt(CreateBeleg(i*10+100)); |
435 | ············} |
436 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
437 | { |
438 | ················pm.MakePersistent( r ); |
439 | ················pm.Save(); |
440 | ················IList rr = r.Kostenpunkte.ToList(); |
441 | ················r.LöscheKostenpunkte(); |
442 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
443 | for ( int i = 0; i < 10; i++) |
444 | { |
445 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
446 | ················} |
447 | ················pm.Abort(); |
448 | Assert. That( 10 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
449 | for ( int i = 0; i < 10; i++) |
450 | { |
451 | ····················Assert.That( NDOObjectState.Persistent == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
452 | ················} |
453 | ············} |
454 | ········} |
455 | |
456 | ········[Test] |
457 | public void TestAssignRelatedObjectsNullSave( ) |
458 | { |
459 | for ( int i = 0; i < 3; i++) |
460 | ············{ |
461 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
462 | ············} |
463 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
464 | { |
465 | ················pm.MakePersistent( r ); |
466 | ················pm.Save(); |
467 | ················IList rr = r.Kostenpunkte.ToList(); |
468 | ················r.ErsetzeKostenpunkte(); |
469 | Assert. That( r. Kostenpunkte == null, "No objects should be there" ) ; |
470 | for ( int i = 0; i < 3; i++) |
471 | { |
472 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
473 | ················} |
474 | ················pm.Save(); |
475 | Assert. That( r. Kostenpunkte == null, "No objects should be there" ) ; |
476 | for ( int i = 0; i < 3; i++) |
477 | { |
478 | ····················Assert.That( NDOObjectState.Transient == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
479 | ················} |
480 | ············} |
481 | ········} |
482 | |
483 | ········[Test] |
484 | public void TestAssignRelatedObjectsNullAbort( ) |
485 | { |
486 | for ( int i = 0; i < 3; i++) |
487 | ············{ |
488 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
489 | ············} |
490 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
491 | { |
492 | ················pm.MakePersistent( r ); |
493 | ················pm.Save(); |
494 | ················IList rr = r.Kostenpunkte.ToList(); |
495 | ················r.ErsetzeKostenpunkte(); |
496 | Assert. That( r. Kostenpunkte == null, "No objects should be there" ) ; |
497 | for ( int i = 0; i < 3; i++) |
498 | { |
499 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
500 | ················} |
501 | ················pm.Abort(); |
502 | Assert. That( 3 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
503 | for ( int i = 0; i < 3; i++) |
504 | { |
505 | ····················Assert.That( NDOObjectState.Persistent == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
506 | ················} |
507 | ············} |
508 | ········} |
509 | |
510 | ········[Test] |
511 | public void TestAssignRelatedObjectsSave( ) |
512 | { |
513 | for ( int i = 0; i < 3; i++) |
514 | ············{ |
515 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
516 | ············} |
517 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
518 | { |
519 | ················pm.MakePersistent( r ); |
520 | ················pm.Save(); |
521 | ················List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
522 | ················Kostenpunkt nr = CreateBeleg(50); |
523 | neueKostenpunkte. Add( nr ) ; |
524 | |
525 | ················IList rr = r.Kostenpunkte.ToList(); |
526 | r. ErsetzeKostenpunkte( neueKostenpunkte ) ; |
527 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
528 | for ( int i = 0; i < 3; i++) |
529 | { |
530 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
531 | ················} |
532 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state" ) ; |
533 | |
534 | ················pm.Save(); |
535 | Assert. That( 1 == r. Kostenpunkte. Count, "4. Wrong number of objects" ) ; |
536 | for ( int i = 0; i < 3; i++) |
537 | { |
538 | ····················Assert.That( NDOObjectState.Transient == ( (Kostenpunkt) rr[i] ).NDOObjectState, "5. Wrong state" ); |
539 | ················} |
540 | ················Assert.That( NDOObjectState.Persistent == nr.NDOObjectState, "6. Wrong state" ); |
541 | ············} |
542 | ········} |
543 | |
544 | ········[Test] |
545 | public void TestAssignRelatedObjectsAbort( ) |
546 | { |
547 | for ( int i = 0; i < 3; i++) |
548 | ············{ |
549 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
550 | ············} |
551 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
552 | { |
553 | ················pm.MakePersistent( r ); |
554 | ················pm.Save(); |
555 | ················List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
556 | ················Kostenpunkt nr = CreateBeleg(200); |
557 | neueKostenpunkte. Add( nr ) ; |
558 | |
559 | ················IList rr = r.Kostenpunkte.ToList(); |
560 | r. ErsetzeKostenpunkte( neueKostenpunkte ) ; |
561 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
562 | for ( int i = 0; i < 3; i++) |
563 | { |
564 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
565 | ················} |
566 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state" ) ; |
567 | |
568 | ················pm.Abort(); |
569 | Assert. That( 3 == r. Kostenpunkte. Count, "4. Wrong number of objects" ) ; |
570 | for ( int i = 0; i < 3; i++) |
571 | { |
572 | ····················Assert.That( NDOObjectState.Persistent == ( (Kostenpunkt) rr[i] ).NDOObjectState, "5. Wrong state" ); |
573 | ················} |
574 | ················Assert.That( NDOObjectState.Transient == nr.NDOObjectState, "6. Wrong state" ); |
575 | ············} |
576 | ········} |
577 | |
578 | |
579 | ········[Test] |
580 | public void TestHollow( ) |
581 | { |
582 | r. AddKostenpunkt( kp ) ; |
583 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
584 | ············{ |
585 | ················pm.MakePersistent( r ); |
586 | ················pm.Save(); |
587 | pm. MakeHollow( r ) ; |
588 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow" ) ; |
589 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "1: Kostenpunkt should be persistent" ) ; |
590 | ················var kostenpunkte = r.Kostenpunkte; |
591 | |
592 | pm. MakeHollow( r, true ) ; |
593 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "2: Reise should be hollow" ) ; |
594 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "2: Kostenpunkt should be hollow" ) ; |
595 | |
596 | ················kostenpunkte = r.Kostenpunkte; |
597 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "3: Reise should be persistent" ) ; |
598 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "3: Kostenpunkt should be hollow" ) ; |
599 | Assert. That( 200 == kp. Kosten, "3: Kostenpunkt should have correct Kosten" ) ; |
600 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "4: Kostenpunkt should be persistent" ) ; |
601 | ············} |
602 | ········} |
603 | |
604 | ········[Test] |
605 | public void TestMakeAllHollow( ) |
606 | { |
607 | r. AddKostenpunkt( kp ) ; |
608 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
609 | ············{ |
610 | ················pm.MakePersistent( r ); |
611 | ················pm.Save(); |
612 | ················pm.MakeAllHollow(); |
613 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow" ) ; |
614 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "1: Kostenpunkt should be hollow" ) ; |
615 | ············} |
616 | ········} |
617 | |
618 | |
619 | ········[Test] |
620 | public void TestMakeAllHollowUnsaved( ) |
621 | { |
622 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
623 | { |
624 | ················r.AddKostenpunkt( kp ); |
625 | ················pm.MakePersistent( r ); |
626 | ················pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects |
627 | Assert. That( NDOObjectState. Created == r. NDOObjectState, "1: Reise should be created" ) ; |
628 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1: Kostenpunkt should be created" ) ; |
629 | ············} |
630 | ········} |
631 | |
632 | ········[Test] |
633 | public void TestLoadRelatedObjects( ) |
634 | { |
635 | for ( int i = 0; i < 10; i++) |
636 | ············{ |
637 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
638 | ············} |
639 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
640 | { |
641 | ················pm.MakePersistent( r ); |
642 | ················pm.Save(); |
643 | pm. MakeHollow( r, true ) ; |
644 | |
645 | ················var kpunkte = r.Kostenpunkte.ToList(); |
646 | Assert. That( 10 == kpunkte. Count, "Array size should be 10" ) ; |
647 | |
648 | for ( int i = 0; i < 10; i++) |
649 | ················{ |
650 | ····················Kostenpunkt rr = (Kostenpunkt)kpunkte[i]; |
651 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow" ) ; |
652 | #if !ORACLE && !MYSQL |
653 | Assert. That( i * 10 + 100 == rr. Kosten, "2: Kostenpunkt should be in right order" ) ; |
654 | #endif |
655 | ················} |
656 | |
657 | |
658 | |
659 | ················pm.MakeAllHollow(); |
660 | ················pm.UnloadCache(); |
661 | ················var kpunkte2 = r.Kostenpunkte.ToList(); |
662 | for ( int i = 0; i < 10; i++) |
663 | ················{ |
664 | ····················Kostenpunkt r1 = (Kostenpunkt)kpunkte[i]; |
665 | ····················Kostenpunkt r2 = (Kostenpunkt)kpunkte2[i]; |
666 | #if !ORACLE && !MYSQL |
667 | Assert. That( i * 10 + 100 == r1. Kosten, "3: Kostenpunkt should be in right order" ) ; |
668 | #endif |
669 | Assert. That( r1 != r2, "Objects should be different" ) ; |
670 | ················} |
671 | ············} |
672 | ········} |
673 | |
674 | ········[Test] |
675 | public void TestLoadRelatedObjectsSave( ) |
676 | { |
677 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
678 | ············{ |
679 | ················pm.MakePersistent( r ); |
680 | ················pm.Save(); |
681 | for ( int i = 0; i < 10; i++) |
682 | { |
683 | ····················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
684 | ················} |
685 | ················pm.Save(); |
686 | pm. MakeHollow( r, true ) ; |
687 | |
688 | ················IList reisen = r.Kostenpunkte.ToList(); |
689 | |
690 | for ( int i = 0; i < 10; i++) |
691 | ················{ |
692 | ····················Kostenpunkt rr = (Kostenpunkt)reisen[i]; |
693 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow" ) ; |
694 | #if !ORACLE && !MYSQL |
695 | Assert. That( i * 10 + 100 == rr. Kosten, "2: Kostenpunkt should be in right order" ) ; |
696 | #endif |
697 | ················} |
698 | |
699 | ················pm.MakeAllHollow(); |
700 | ················pm.UnloadCache(); |
701 | ················IList reisen2 = r.Kostenpunkte.ToList(); |
702 | for ( int i = 0; i < 10; i++) |
703 | ················{ |
704 | ····················Kostenpunkt r1 = (Kostenpunkt)reisen[i]; |
705 | ····················Kostenpunkt r2 = (Kostenpunkt)reisen2[i]; |
706 | #if !ORACLE && !MYSQL |
707 | Assert. That( i * 10 + 100 == r1. Kosten, "3: Kostenpunkt should be in right order" ) ; |
708 | #endif |
709 | Assert. That( r1 != r2, "Objects should be different" ) ; |
710 | ················} |
711 | ············} |
712 | ········} |
713 | |
714 | ········[Test] |
715 | public void TestExtentRelatedObjects( ) |
716 | { |
717 | r. AddKostenpunkt( kp ) ; |
718 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
719 | ············{ |
720 | ················pm.MakePersistent( r ); |
721 | ················pm.Save(); |
722 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "0: Reise should be persistent" ) ; |
723 | ················IList liste = pm.GetClassExtent(typeof(Reise)); |
724 | r = ( Reise) liste[0]; |
725 | Assert. That( 1 == liste. Count, "1: Number of Reise objects is wrong" ) ; |
726 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1: Reise should be persistent" ) ; |
727 | Assert. That( r. Kostenpunkte != null, "2. Relation is missing" ) ; |
728 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
729 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) r. Kostenpunkte[0] ) . NDOObjectState, "4. : Kostenpunkt should be hollow" ) ; |
730 | |
731 | ················pm.UnloadCache(); |
732 | liste = pm. GetClassExtent( typeof( Reise ) ) ; |
733 | r = ( Reise) liste[0]; |
734 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "5: Reise should be hollow" ) ; |
735 | Assert. That( r. Kostenpunkte != null, "6. Relation is missing" ) ; |
736 | Assert. That( 1 == r. Kostenpunkte. Count, "7. Wrong number of objects" ) ; |
737 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0] ) . NDOObjectState, "8. : Kostenpunkt should be hollow" ) ; |
738 | |
739 | ················pm.UnloadCache(); |
740 | liste = pm. GetClassExtent( typeof( Reise ) , false ) ; |
741 | r = ( Reise) liste[0]; |
742 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "9: Reise should be persistent" ) ; |
743 | Assert. That( r. Kostenpunkte != null, "10. Relation is missing" ) ; |
744 | Assert. That( 1 == r. Kostenpunkte. Count, "11. Wrong number of objects" ) ; |
745 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0] ) . NDOObjectState, "12. : Kostenpunkt should be hollow" ) ; |
746 | ············} |
747 | ········} |
748 | |
749 | ········[Test] |
750 | ········public void TestJoinQuery() |
751 | ········{ |
752 | ············using (var pm = PmFactory.NewPersistenceManager()) |
753 | ············{ |
754 | |
755 | ················Person p = new Person(); |
756 | ················p.FirstName = "Mirko"; |
757 | ················p.LastName = "Matytschak"; |
758 | ················p.Moniker = "Hallo"; |
759 | ················Adresse a1 = new Adresse(); |
760 | ················a1.Lkz = "D"; |
761 | ················a1.Plz = "83646"; |
762 | ················a1.Straße = "Nockhergasse 7"; |
763 | ················a1.Ort = "Bad Tölz"; |
764 | |
765 | ················Adresse a2 = new Adresse(); |
766 | ················a2.Ort = "Mönchen"; |
767 | ················a2.Plz = "80331"; |
768 | ················a2.Straße = "Isartorplatz 5"; |
769 | ················a2.Lkz = "D"; |
770 | |
771 | ················Institution i = new Institution(); |
772 | ················i.FirstName = "Schnulli"; |
773 | ················i.LastName = "Wauwau"; |
774 | ················i.Hausmeister = "Möller"; |
775 | |
776 | pm. MakePersistent( a1 ) ; |
777 | pm. MakePersistent( a2 ) ; |
778 | pm. MakePersistent( p ) ; |
779 | pm. MakePersistent( i ) ; |
780 | i. AddAdresse( a1 ) ; |
781 | p. AddAdresse( a1 ) ; |
782 | p. AddAdresse( a2 ) ; |
783 | ················pm.Save(); |
784 | ················pm.UnloadCache(); |
785 | |
786 | ················IQuery q = new NDOQuery<Contact>(pm, $"addresses.plz = '{a2.Plz}'"); |
787 | ················IList l = q.Execute(); |
788 | Assert. That( 1 == l. Count, "Wrong number of contacts" ) ; |
789 | ············} |
790 | ········} |
791 | |
792 | ········[Test] |
793 | ········public void TestPolymorphicCondition() |
794 | ········{ |
795 | r. AddKostenpunkt( kp ) ; |
796 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
797 | { |
798 | ················pm.MakePersistent( r ); |
799 | ················pm.Save(); |
800 | |
801 | ················pm.UnloadCache(); |
802 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
803 | q. Parameters. Add( DateTime. Now. Date ) ; |
804 | r = ( Reise) q. ExecuteSingle( true ) ; |
805 | Assert. That( r != null, "Reise not found" ) ; |
806 | Assert. That( r. Kostenpunkte. Count > 0, "No Beleg" ) ; |
807 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
808 | ············} |
809 | ········} |
810 | |
811 | ········[Test] |
812 | ········public void TestSortedQueryAsc() |
813 | ········{ |
814 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
815 | ············{ |
816 | |
817 | r. AddKostenpunkt( kp ) ; |
818 | ················DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
819 | ················kp.Datum = yesterday; |
820 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
821 | ················kp.Datum = DateTime.Today; |
822 | pm. MakePersistent( r ) ; |
823 | ················pm.Save(); |
824 | |
825 | ················pm.UnloadCache(); |
826 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
827 | q. Orderings. Add( new AscendingOrder( "datum" ) ) ; |
828 | ················IList l = q.Execute(); |
829 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
830 | Assert. That( yesterday == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
831 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
832 | ············} |
833 | ········} |
834 | |
835 | ········[Test] |
836 | ········public void TestSortedQueryDesc() |
837 | ········{ |
838 | ············using (var pm = PmFactory.NewPersistenceManager()) |
839 | ············{ |
840 | r. AddKostenpunkt( kp ) ; |
841 | ················DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
842 | ················kp.Datum = yesterday; |
843 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
844 | ················kp.Datum = DateTime.Today; |
845 | pm. MakePersistent( r ) ; |
846 | ················pm.Save(); |
847 | |
848 | ················pm.UnloadCache(); |
849 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
850 | q. Orderings. Add( new DescendingOrder( "datum" ) ) ; |
851 | ················IList l = q.Execute(); |
852 | |
853 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
854 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
855 | Assert. That( yesterday == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
856 | ············} |
857 | ········} |
858 | |
859 | ········[Test] |
860 | ········public void TestSortedQueryAscOneNull() |
861 | ········{ |
862 | ············using (var pm = PmFactory.NewPersistenceManager()) |
863 | ············{ |
864 | |
865 | r. AddKostenpunkt( kp ) ; |
866 | ················kp.Datum = DateTime.MinValue;··// DbNull |
867 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
868 | ················kp.Datum = DateTime.Today; |
869 | pm. MakePersistent( r ) ; |
870 | ················pm.Save(); |
871 | |
872 | ················pm.UnloadCache(); |
873 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
874 | q. Orderings. Add( new AscendingOrder( "datum" ) ) ; |
875 | ················IList l = q.Execute(); |
876 | ················//pm.VerboseMode = false; |
877 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
878 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
879 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
880 | ············} |
881 | ········} |
882 | |
883 | ········[Test] |
884 | ········public void TestSortedQueryBothNull() |
885 | ········{ |
886 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
887 | ············{ |
888 | |
889 | r. AddKostenpunkt( kp ) ; |
890 | ················kp.Datum = DateTime.MinValue;··// DbNull |
891 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
892 | ················kp.Datum = DateTime.MinValue;··// DbNull |
893 | pm. MakePersistent( r ) ; |
894 | ················pm.Save(); |
895 | |
896 | ················pm.UnloadCache(); |
897 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
898 | q. Orderings. Add( new AscendingOrder( "datum" ) ) ; |
899 | ················IList l = q.Execute(); |
900 | ················//pm.VerboseMode = false; |
901 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
902 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0] ) . Datum, "Wrong Date #1" ) ; |
903 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong Date #2" ) ; |
904 | ············} |
905 | ········} |
906 | |
907 | ········[Test] |
908 | ········public void TestSortedQueryDescOneNull() |
909 | ········{ |
910 | ············using (var pm = PmFactory.NewPersistenceManager()) |
911 | ············{ |
912 | r. AddKostenpunkt( kp ) ; |
913 | ················kp.Datum = DateTime.MinValue; |
914 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
915 | ················kp.Datum = DateTime.Today; |
916 | pm. MakePersistent( r ) ; |
917 | ················pm.Save(); |
918 | |
919 | ················pm.UnloadCache(); |
920 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
921 | q. Orderings. Add( new DescendingOrder( "datum" ) ) ; |
922 | ················IList l = q.Execute(); |
923 | ················//pm.VerboseMode = false; |
924 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
925 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
926 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
927 | ············} |
928 | ········} |
929 | |
930 | |
931 | ········[Test] |
932 | ········public void TestQueryForSingleObject() |
933 | ········{ |
934 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
935 | ············{ |
936 | ················Kostenpunkt kp2 = CreatePkw(100); |
937 | r. AddKostenpunkt( kp ) ; |
938 | r. AddKostenpunkt( kp2 ) ; |
939 | pm. MakePersistent( r ) ; |
940 | ················pm.Save(); |
941 | ················pm.UnloadCache(); |
942 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
943 | q. Parameters. Add( DateTime. Now. Date ) ; |
944 | ················IList l = q.Execute(); |
945 | Assert. That( 1 == l. Count, "Count wrong" ) ; |
946 | ············} |
947 | ········} |
948 | |
949 | |
950 | ········[Test] |
951 | ········public void TestPolyDelete() |
952 | ········{ |
953 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
954 | ············{ |
955 | ················Kostenpunkt kp2 = CreatePkw(100); |
956 | r. AddKostenpunkt( kp ) ; |
957 | r. AddKostenpunkt( kp2 ) ; |
958 | pm. MakePersistent( r ) ; |
959 | ················pm.Save(); |
960 | ················pm.UnloadCache(); |
961 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
962 | q. Parameters. Add( DateTime. Now. Date ) ; |
963 | ················IList l = q.Execute(); |
964 | Assert. That( 1 == l. Count, "Count wrong" ) ; |
965 | ················r = (Reise) l[0]; |
966 | pm. Delete( r ) ; |
967 | ················pm.Save(); |
968 | ············} |
969 | ········} |
970 | |
971 | |
972 | ········[Test] |
973 | ········public void RelationTest() |
974 | ········{ |
975 | ············using (var pm = PmFactory.NewPersistenceManager()) |
976 | ············{ |
977 | ················NDOMapping mapping = pm.NDOMapping; |
978 | ················Class reiseClass = mapping.FindClass(typeof(Reise)); |
979 | ················Class pkwClass = mapping.FindClass(typeof(PKWFahrt)); |
980 | Assert. That( reiseClass != null, "Mapping for Reise not found" ) ; |
981 | Assert. That( pkwClass != null, "Mapping for pkw not found" ) ; |
982 | ················Relation r1 = reiseClass.FindRelation("belege"); |
983 | Assert. That( r1 != null, "Relation not found #1" ) ; |
984 | Assert. That( r1. ForeignRelation != null, "ForeignRelation of Reise not found" ) ; |
985 | ················Relation r2 = pkwClass.FindRelation("reise"); |
986 | Assert. That( r2 != null, "Relation not found #2" ) ; |
987 | Assert. That( r2. ForeignRelation != null, "ForeignRelation of PKWFahrt not found" ) ; |
988 | Assert. That( r1 == r2. ForeignRelation, "Back relation wrong" ) ; |
989 | ················//············Debug.WriteLine(r1.Parent.FullName + "->" + r1.ReferencedTypeName); |
990 | ················//············Debug.WriteLine(r1.ForeignRelation.Parent.FullName + "->" + r1.ForeignRelation.ReferencedTypeName); |
991 | ················//············Debug.WriteLine(r2.Parent.FullName + "->" + r2.ReferencedTypeName); |
992 | ················//············Debug.WriteLine(r2.ForeignRelation.Parent.FullName + "->" + r2.ForeignRelation.ReferencedTypeName); |
993 | ············} |
994 | ········} |
995 | |
996 | |
997 | ········private Kostenpunkt CreateBeleg(double betrag) |
998 | ········{ |
999 | ············return new Beleg("Taxi", betrag); |
1000 | ········} |
1001 | |
1002 | ········private Kostenpunkt CreateBeleg() { |
1003 | ············return new Beleg("Flug", 200); |
1004 | ········} |
1005 | |
1006 | ········private Kostenpunkt CreatePkw() { |
1007 | ············return CreatePkw(100); |
1008 | ········} |
1009 | |
1010 | ········private Kostenpunkt CreatePkw(double km) { |
1011 | ············return new PKWFahrt(km); |
1012 | ········} |
1013 | |
1014 | ········private Reise CreateReise(string zweck) { |
1015 | ············Reise r = new Reise(); |
1016 | ············r.Zweck = zweck; |
1017 | ············return r; |
1018 | ········} |
1019 | ····} |
1020 | } |
1021 |