Datei: IntegrationTests/IntegrationTests/Rel1to1Bidirectional.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.Collections;
25 using System.IO;
26 using NUnit.Framework;
27 using Reisekosten.Personal;
28 using Reisekosten;
29 using NDO;
30 using NDO.Linq;
31 using System.Linq;
32 using Microsoft.Extensions.Hosting;
33 using Microsoft.Extensions.Logging;
34 using Microsoft.Extensions.DependencyInjection;
35
36 namespace NdoUnitTests
37 {
38 ····/// <summary>
39 ····/// All tests for 1:1-Relations. Bidirectional Composition and Aggregation
40 ····/// </summary>
41
42
43 ····[TestFixture]
44 ····public class Rel1to1Bidirectional : NDOTest
45 ····{
46 ········public Rel1to1Bidirectional()
47 ········{
48 ········}
49
50 ········private static int count = 0;
51 ········private Mitarbeiter m;
52 ········private Sozialversicherungsnummer svn;
53 ········private Email e;
54 ········private Zertifikat z0;
55
56 ········[SetUp]
57 ········public void Setup()
58 ········{
59 ············count++;
60 ············m = CreateMitarbeiter( "Boris", "Becker" );
61 ············svn = new Sozialversicherungsnummer();
62 ············svn.SVN = 4711;
63 ············e = new Email( "hwk@cortex-brainware.de" );
64 ············z0 = new Zertifikat();
65 ············z0.Key = 42; // :-)
66 ········}
67
68 ········public void DeleteAll()
69 ········{
70 ············var pm = PmFactory.NewPersistenceManager();
71 ············IList mitarbeiterListe = pm.GetClassExtent( typeof( Mitarbeiter ), true );
72 ············pm.Delete( mitarbeiterListe );
73 ············pm.Save();
74
75 ············// Delete unbound Soz.V. objects
76 ············IList sozListe = pm.GetClassExtent( typeof( Sozialversicherungsnummer ) );
77 ············pm.Delete( sozListe );
78 ············pm.Save();
79
80 ············IList eListe = pm.GetClassExtent( typeof( Email ) );
81 ············pm.Delete( eListe );
82 ············pm.Save();
83
84 ············IList zListe = pm.GetClassExtent( typeof( Zertifikat ) );
85 ············pm.Delete( zListe );
86 ············pm.Save();
 
87 ········}
88
89 ········[TearDown]
90 ········public void TearDown()
91 ········{
92 ············var pm = PmFactory.NewPersistenceManager();
93 ············DeleteAll();
94 ············pm.Close();
95 ············pm = null;
96 ········}
97
98
99
100 ········#region Composition Tests
101
102 ········[Test]
103 ········public void CompTestCreateObjectsSave()
104 ········{
105 var pm = PmFactory. NewPersistenceManager( ) ;
 
106 ············m.SVN = svn;
107 ············pm.MakePersistent( m );
108 ············pm.Save();
109 ············Assert.That( !m.NDOObjectId.Equals( m.SVN.NDOObjectId ), "Ids should be different" );
110 m = ( Mitarbeiter) pm. FindObject( m. NDOObjectId ) ;
111 svn = ( Sozialversicherungsnummer) pm. FindObject( m. SVN. NDOObjectId ) ;
112 Assert. That( m != null, "1. Mitarbeiter not found" ) ;
113 Assert. That( svn != null, "1. SVN not found" ) ;
114 ············ObjectId moid = m.NDOObjectId;
115 ············ObjectId soid = svn.NDOObjectId;
116 ············m = null;
117 ············svn = null;
118
119 ············pm.UnloadCache();
120 m = ( Mitarbeiter) pm. FindObject( moid ) ;
121 ············Sozialversicherungsnummer s2 = m.SVN;
122 svn = ( Sozialversicherungsnummer) pm. FindObject( soid ) ;
123 Assert. That( m != null, "2. Mitarbeiter not found" ) ;
124 Assert. That( svn != null, "2. SVN not found" ) ;
125 Assert. That( Object. ReferenceEquals( svn, s2) , "SVN should match" ) ;
126 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "Mitarbeiter should match" ) ;
 
127 ········}
128
129 ········[Test]
130 ········public void SimpleObjectSave()
131 ········{
132 var pm = PmFactory. NewPersistenceManager( ) ;
 
133 ············pm.MakePersistent( svn );
134 ············pm.Save();
135 ············pm.UnloadCache();
136 ············IList l = pm.GetClassExtent( typeof( Sozialversicherungsnummer ) );
137 ············Assert.That( l.Count == 1, "Sozialversicherungsnummer sollte gespeichert sein" );
138 ············pm.Delete( l );
139 ············pm.Save();
140 ············pm.UnloadCache();
141 ············l = pm.GetClassExtent( typeof( Sozialversicherungsnummer ) );
142 ············Assert.That( l.Count == 0, "Sozialversicherungsnummer sollte gelöscht sein" );
143 ········}
 
144
145 ········[Test]
146 ········public void CompChildAddFail()
147 ········{
148 var pm = PmFactory. NewPersistenceManager( ) ;
 
149 ············pm.MakePersistent( svn );
150 ············var thrown = false;
151 ············try
152 ············{
153 ················svn.Angestellter = m;
154 ············}
155 ············catch (NDOException)
156 ············{
157 ················thrown = true;
158 ············}
159 Assert. That( true == thrown ) ;
160 ········}
 
161
162 ········[Test]
163 ········public void CompChildAddFail2()
164 ········{
165 var pm = PmFactory. NewPersistenceManager( ) ;
 
166 ············pm.MakePersistent( svn );
167 ············pm.Save();
168 ············var thrown = false;
169 ············try
170 ············{
171 ················svn.Angestellter = m;
172 ············}
173 ············catch (NDOException)
174 ············{
175 ················thrown = true;
176 ············}
177 Assert. That( true == thrown ) ;
178 ········}
 
179
180 ········[Test]
181 ········public void CompChildAdd3()
182 ········{
183 var pm = PmFactory. NewPersistenceManager( ) ;
 
184 ············pm.MakePersistent( m );
185 ············pm.Save();
186 ············m.SVN = svn;
187 ············var thrown = false;
188 ············try
189 ············{
190 ················svn.Angestellter = m;
191 ············}
192 ············catch (NDOException)
193 ············{
194 ················thrown = true;
195 ············}
196 Assert. That( true == thrown ) ;
197 ········}
 
198
199 ········[Test]
200 ········public void CompChildAdd4()
201 ········{
202 var pm = PmFactory. NewPersistenceManager( ) ;
 
203 ············pm.MakePersistent( m );
204 ············pm.Save();
205 ············m.SVN = svn;
206 ············var thrown = false;
207 ············try
208 ············{
209 ················svn.Angestellter = null; // Cannot change relation through child
210 ············}
211 ············catch (NDOException)
212 ············{
213 ················thrown = true;
214 ············}
215 Assert. That( true == thrown ) ;
216 ········}
 
217
218 ········[Test]
219 ········public void CompTestAddObjectSave()
220 ········{
221 var pm = PmFactory. NewPersistenceManager( ) ;
 
222 ············pm.MakePersistent( m );
223 ············pm.Save();
224 ············m.SVN = svn;
225 Assert. That( NDOObjectState. Created == svn. NDOObjectState, "1. Wrong state" ) ;
226 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "1. Backlink wrong" ) ;
227 ············pm.Save();
228 m = ( Mitarbeiter) pm. FindObject( m. NDOObjectId ) ;
229 svn = ( Sozialversicherungsnummer) pm. FindObject( svn. NDOObjectId ) ;
230 Assert. That( m != null, "1. Mitarbeiter not found" ) ;
231 Assert. That( svn != null, "1. SVN not found" ) ;
232 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
233 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "2. Backlink wrong" ) ;
 
234 ········}
235
236 ········[Test]
237 ········public void CompTestAddObjectAbort()
238 ········{
239 var pm = PmFactory. NewPersistenceManager( ) ;
 
240 ············pm.MakePersistent( m );
241 ············pm.Save();
242 ············m.SVN = svn;
243 Assert. That( NDOObjectState. Created == svn. NDOObjectState, "1. Wrong state" ) ;
244 Assert. That( m. SVN != null, "1. SVN not found" ) ;
245 ············pm.Abort();
246 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
247 Assert. That( m. SVN == null, "1. SVN should be null" ) ;
248 Assert. That( svn. Angestellter == null, "1. Mitarbeiter should be null" ) ;
 
249 ········}
250
251
252 ········[Test]
253 ········public void CompTestReplaceChildSave()
 
 
254 ········{
255 ············var pm = PmFactory.NewPersistenceManager();
256 ············pm.MakePersistent( m );
257 ············m.SVN = svn;
258 ············pm.Save();
259 Assert. That( m. SVN != null, "1. SVN not found" ) ;
260 ············Sozialversicherungsnummer svn2 = new Sozialversicherungsnummer();
261 ············svn2.SVN = 0815;
262 ············m.SVN = svn2;
263 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "1. Wrong state" ) ;
264 Assert. That( NDOObjectState. Created == svn2. NDOObjectState, "2. Wrong state" ) ;
265 Assert. That( svn. Angestellter == null, "3. No relation to Mitarbeiter" ) ;
266 Assert. That( Object. ReferenceEquals( svn2. Angestellter, m) , "4. Mitarbeiter should be same" ) ;
267 Assert. That( Object. ReferenceEquals( m. SVN, svn2) , "5. SVN should be same" ) ;
268 ············pm.Save();
269 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "6. Wrong state" ) ;
270 Assert. That( NDOObjectState. Persistent == svn2. NDOObjectState, "7. Wrong state" ) ;
271 Assert. That( svn. Angestellter == null, "8. No relation to Mitarbeiter" ) ;
272 Assert. That( Object. ReferenceEquals( svn2. Angestellter, m) , "9. Mitarbeiter should be same" ) ;
273 Assert. That( Object. ReferenceEquals( m. SVN, svn2) , "10. SVN should be same" ) ;
274 ········}
 
275
276 ········[Test]
277 ········public void CompTestReplaceChildAbort()
278 ········{
279 var pm = PmFactory. NewPersistenceManager( ) ;
 
280 ············pm.MakePersistent( m );
281 ············m.SVN = svn;
282 Assert. That( Object. ReferenceEquals( svn. Angestellter, m) , "1. Mitarbeiter should be same" ) ;
283 ············pm.Save();
284 Assert. That( m. SVN != null, "1. SVN not found" ) ;
285 ············Sozialversicherungsnummer svn2 = new Sozialversicherungsnummer();
286 ············svn2.SVN = 0815;
287 ············m.SVN = svn2;
288 ············pm.Abort();
289 Assert. That( NDOObjectState. Transient == svn2. NDOObjectState, "1. Wrong state" ) ;
290 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
291 Assert. That( svn2. Angestellter == null, "3. No relation to Mitarbeiter" ) ;
292 Assert. That( Object. ReferenceEquals( svn. Angestellter, m) , "4. Mitarbeiter should be same" ) ;
293 Assert. That( Object. ReferenceEquals( m. SVN, svn) , "5. SVN should be same" ) ;
294 ········}
 
295
296 ········[Test]
297 ········public void CompTestReplaceParent()
298 ········{
299 var pm = PmFactory. NewPersistenceManager( ) ;
 
300 ············pm.MakePersistent( m );
301 ············m.SVN = svn;
302 ············pm.Save();
303 Assert. That( m. SVN != null, "1. SVN not found" ) ;
304 ············Mitarbeiter m2 = CreateMitarbeiter( "Andre", "Agassi" );
305 ············var thrown = false;
306 ············try
307 ············{
308 ················svn.Angestellter = m2;
309 ············}
310 ············catch (NDOException)
311 ············{
312 ················thrown = true;
 
 
313 ············}
314 ············Assert.That(true ==··thrown );
315 ········}
316
317
318 ········[Test]
319 ········public void CompTestRemoveObjectSave()
320 ········{
321 var pm = PmFactory. NewPersistenceManager( ) ;
 
322 ············pm.MakePersistent( m );
323 ············m.SVN = svn;
324 ············pm.Save();
325 ············ObjectId moid = m.NDOObjectId;
326 Assert. That( m. SVN != null, "1. SVN not found" ) ;
327 ············m.SVN = null;
328 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "1. Wrong state" ) ;
329 Assert. That( m. SVN == null, "1. SVN should be null" ) ;
330 Assert. That( svn. Angestellter == null, "1. Mitarbeiter should be null" ) ;
331 ············pm.Save();
332 Assert. That( m. SVN == null, "2. SVN should be null" ) ;
333 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
334 ············moid = m.NDOObjectId;
335 ············pm.UnloadCache();
336 m = ( Mitarbeiter) pm. FindObject( moid ) ;
337 Assert. That( m != null, "3. Mitarbeiter not found" ) ;
338 Assert. That( m. SVN == null, "3. SVN should be null" ) ;
 
339 ········}
340
341 ········[Test]
342 ········public void CompTestRemoveObjectAbort()
343 ········{
344 var pm = PmFactory. NewPersistenceManager( ) ;
 
345 ············pm.MakePersistent( m );
346 ············m.SVN = svn;
347 ············pm.Save();
348 Assert. That( m. SVN != null, "1. SVN not found" ) ;
349 ············m.SVN = null;
350 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "1. Wrong state" ) ;
351 Assert. That( m. SVN == null, "2. SVN should be null" ) ;
352 ············pm.Abort();
353 Assert. That( m. SVN != null, "2. SVN not found" ) ;
354 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
355 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "2. Backlink wrong" ) ;
 
356 ········}
357
358 ········[Test]
359 ········public void CompTestRemoveParentSave()
 
 
360 ········{
361 ············var pm = PmFactory.NewPersistenceManager();
362 ············pm.MakePersistent( m );
363 ············m.SVN = svn;
364 ············pm.Save();
365 Assert. That( svn. Angestellter != null, "1. Mitarbeiter not found" ) ;
 
366 ············var thrown = false;
367 ············try
368 ············{
369 ················svn.Angestellter = null;··// Cannot manipulate composition through child object.
370 ············}
371 ············catch (NDOException)
372 ············{
373 ················thrown = true;
374 ············}
375 Assert. That( true == thrown ) ;
 
376 ········}
377
378
379 ········[Test]
380 ········public void CompTestDeleteSave()
381 ········{
382 var pm = PmFactory. NewPersistenceManager( ) ;
 
383 ············pm.MakePersistent( m );
384 ············pm.Save();
385 ············m.SVN = svn;
386 ············pm.Save();
387 ············pm.Delete( m );
388 Assert. That( NDOObjectState. Deleted == m. NDOObjectState, "1. Wrong state" ) ;
389 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "2. Wrong state" ) ;
390 ············pm.Save();
391 Assert. That( NDOObjectState. Transient == m. NDOObjectState, "1. Wrong state" ) ;
392 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
 
393 ············// Objects should retain relations in memory
394 Assert. That( m. SVN != null, "3. SVN shouldn't be null" ) ;
395 Assert. That( svn. Angestellter == null, "3. Mitarbeiter should be null" ) ;
 
396 ········}
397
398 ········[Test]
399 ········public void CompTestDeleteChildSave()
400 ········{
401 var pm = PmFactory. NewPersistenceManager( ) ;
 
402 ············bool thrown = false;
403 ············pm.MakePersistent( m );
404 ············pm.Save();
405 ············m.SVN = svn;
406 ············pm.Save();
407 ············try
408 ············{
409 ················pm.Delete( svn ); // Should throw an Exception
410 ············}
411 ············catch (NDOException e)
412 ············{
413 ················thrown = true;
414 ············}
415 ············Assert.That( thrown, "Exception mösste ausgelöst worden sein" );
 
416 ········}
417
418
419 ········[Test]
420 ········public void CompTestDeleteAbort()
421 ········{
422 var pm = PmFactory. NewPersistenceManager( ) ;
 
423 ············pm.MakePersistent( m );
424 ············pm.Save();
425 ············m.SVN = svn;
426 ············pm.Save();
427 ············pm.Delete( m );
428 Assert. That( NDOObjectState. Deleted == m. NDOObjectState, "1. Wrong state" ) ;
429 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "2. Wrong state" ) ;
430 ············pm.Abort();
431 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "1. Wrong state" ) ;
432 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
433 Assert. That( m. SVN != null, "2. SVN not found" ) ;
434 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "2. Backlink wrong" ) ;
 
435 ········}
436
437 ········[Test]
438 ········public void CompTestCreateDelete()
439 ········{
440 var pm = PmFactory. NewPersistenceManager( ) ;
 
441 ············pm.MakePersistent( m );
442 ············m.SVN = svn;
443 ············pm.Delete( m );
444 Assert. That( NDOObjectState. Transient == m. NDOObjectState, "1. Wrong state" ) ;
445 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
446 ············// Objects should retain relations in memory
447 Assert. That( m. SVN != null, "3. SVN shouldn't be null" ) ;
448 Assert. That( svn. Angestellter == null, "3. Mitarbeiter should be null" ) ;
449 ········}
 
450
451 ········[Test]
452 ········public void CompTestAddRemoveSave()
453 ········{
454 var pm = PmFactory. NewPersistenceManager( ) ;
 
455 ············pm.MakePersistent( m );
456 ············pm.Save();
457 ············m.SVN = svn;
458 ············m.SVN = null;
459 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "1. Wrong state" ) ;
460 Assert. That( m. SVN == null, "1. SVN should be null" ) ;
461 Assert. That( svn. Angestellter == null, "1. Mitarbeiter should be null" ) ;
462 ············pm.Save();
463 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
464 Assert. That( m. SVN == null, "2. SVN should be null" ) ;
465 Assert. That( svn. Angestellter == null, "3. Mitarbeiter should be null" ) ;
 
466 ········}
467
468 ········[Test]
469 ········public void CompTestAddRemoveAbort()
470 ········{
471 var pm = PmFactory. NewPersistenceManager( ) ;
 
472 ············pm.MakePersistent( m );
473 ············pm.Save();
474 ············m.SVN = svn;
475 ············m.SVN = null;
476 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "1. Wrong state" ) ;
477 ············pm.Abort();
 
 
478 ············Assert.That(NDOObjectState.Transient ==··svn.NDOObjectState, "2. Wrong state" );
479 ············Assert.That(m.SVN == null, "2. SVN should be null" );
480 ············Assert.That(svn.Angestellter == null, "3. Mitarbeiter should be null" );
481 ········}
482
483
484
485 ········[Test]
486 ········public void CompTestHollow()
487 ········{
488 var pm = PmFactory. NewPersistenceManager( ) ;
 
 
489 ············m.SVN = svn;
490 ············pm.MakePersistent( m );
491 ············pm.Save();
492 ············pm.MakeHollow( m ); // setzt m.svn auf null
493
494 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "1: Mitarbeiter should be hollow" ) ;
495 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "1: SVN should be persistent" ) ;
496
497 ············svn = m.SVN; // ruft LoadData för m auf. m.svm liegt auf dem Cache und ist Persistent
498 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "1: Mitarbeiter should be persistent" ) ;
499 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2: SVN should be persistent" ) ;
500 ObjectId id = m. NDOObjectId;
501 pm. Close( ) ;
502 pm = PmFactory. NewPersistenceManager( ) ;
503 m = ( Mitarbeiter) pm. FindObject( id ) ;
504 Assert. That( m != null, "Mitarbeiter not found" ) ;
505 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "2: Mitarbeiter should be hollow" ) ;
 
 
506 ············svn = m.SVN;
507 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "2: Mitarbeiter should be persistent" ) ;
508 Assert. That( svn != null, "SVN not found" ) ;
509 Assert. That( NDOObjectState. Hollow == svn. NDOObjectState, "1: SVN should be hollow" ) ;
510 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "2. Backlink wrong" ) ;
 
511 ········}
512
513
514 ········[Test]
515 ········public void CompTestMakeAllHollow()
516 ········{
517 var pm = PmFactory. NewPersistenceManager( ) ;
 
518 ············m.SVN = svn;
519 ············pm.MakePersistent( m );
520 ············pm.Save();
521 ············pm.MakeAllHollow();
522 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "1: Mitarbeiter should be hollow" ) ;
523 Assert. That( NDOObjectState. Hollow == svn. NDOObjectState, "1: SVN should be hollow" ) ;
524 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "2. Backlink wrong" ) ;
 
525 ········}
526
527 ········[Test]
528 ········public void CompTestMakeAllHollowUnsaved()
529 ········{
530 var pm = PmFactory. NewPersistenceManager( ) ;
 
531 ············m.SVN = svn;
532 ············pm.MakePersistent( m );
533 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
534 Assert. That( NDOObjectState. Created == m. NDOObjectState, "1: Mitarbeiter should be created" ) ;
535 Assert. That( NDOObjectState. Created == svn. NDOObjectState, "1: SVN should be created" ) ;
 
536 ········}
537
538 ········[Test]
539 ········public void CompTestLockRelations()
540 ········{
541 var pm = PmFactory. NewPersistenceManager( ) ;
 
542 ············m.SVN = svn;
543 ············pm.MakePersistent( m );
544 ············m.Adresse = new Adresse();
545 ············m.Adresse.Lkz = "Bla";
546 ············pm.Save();
547 ············pm.Delete( m );
548 ············pm.Save();
549 Assert. That( NDOObjectState. Transient == m. NDOObjectState, "1: mitarbeiter should be transient" ) ;
550 Assert. That( NDOObjectState. Transient == m. SVN. NDOObjectState, "1: SVN should be transient" ) ;
551 Assert. That( NDOObjectState. Transient == m. Adresse. NDOObjectState, "1: Adresse should be transient" ) ;
 
552 ········}
553
554 ········[Test]
555 ········public void CompTestExtentRelatedObjects()
556 ········{
557 var pm = PmFactory. NewPersistenceManager( ) ;
 
558 ············m.SVN = svn;
559 ············pm.MakePersistent( m );
560 ············pm.Save();
561 ············IList liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
562 m = ( Mitarbeiter) liste[0];
563 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "1: Mitarbeiter should be persistent" ) ;
564 Assert. That( m. SVN != null, "2. Relation is missing" ) ;
565 Assert. That( NDOObjectState. Persistent == m. SVN. NDOObjectState, "2. : SVN should be hollow" ) ;
566 Assert. That( Object. ReferenceEquals( m, svn. Angestellter) , "2. Backlink wrong" ) ;
567
568 ············pm.UnloadCache();
569 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
570 m = ( Mitarbeiter) liste[0];
571 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "5: Mitarbeiter should be hollow" ) ;
572 Assert. That( m. SVN != null, "6. Relation is missing" ) ;
573 Assert. That( NDOObjectState. Hollow == m. SVN. NDOObjectState, "8. : SVN should be hollow" ) ;
574 ············Assert.That( m != svn.Angestellter, "8a. Should be different objects" );
575 Assert. That( Object. ReferenceEquals( m, m. SVN. Angestellter) , "8b. Mitarbeiter should match" ) ;
576
577 ············pm.UnloadCache();
578 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ), false );
579 m = ( Mitarbeiter) liste[0];
580 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "9: Mitarbeiter should be persistent" ) ;
581 Assert. That( m. SVN != null, "10. Relation is missing" ) ;
582 Assert. That( NDOObjectState. Hollow == m. SVN. NDOObjectState, "12. : SVN should be hollow" ) ;
583 ············Assert.That( m != svn.Angestellter, "12a. Should be different objects" );
584 Assert. That( Object. ReferenceEquals( m, m. SVN. Angestellter) , "12b. Mitarbeiter should match" ) ;
585 ········}
 
586
587 ········#endregion
588
589 ········#region Aggregation Tests
590
591 ········[Test]
592 ········public void AggrTestCreateObjectsTransient()
593 ········{
594 var pm = PmFactory. NewPersistenceManager( ) ;
 
595 ············e.Schlüssel = z0;
596 ············var thrown = false;
597 ············try
598 ············{
599 ················pm.MakePersistent( e );
600 ············}
601 ············catch (NDOException)
602 ············{
603 ················thrown = true;
604 ············}
605 Assert. That( true == thrown ) ;
606 ········}
 
607
608 ········[Test]
609 ········public void AggrTestCreateObjectsTransient2()
 
 
610 ········{
611 ············var pm = PmFactory.NewPersistenceManager();
612 ············pm.MakePersistent( e );
613 ············var thrown = false;
614 ············try
615 ············{
616 ················e.Schlüssel = z0;
617 ············}
618 ············catch (NDOException)
619 ············{
620 ················thrown = true;
621 ············}
622 Assert. That( true == thrown ) ;
623 ········}
 
624
625 ········[Test]
626 ········public void AggrTestCreateObjectsSave()
 
 
627 ········{
628 ············var pm = PmFactory.NewPersistenceManager();
629 ············pm.MakePersistent( z0 );
630 ············e.Schlüssel = z0;
631 ············pm.MakePersistent( e );
632 ············pm.Save();
633 ············Assert.That( !e.NDOObjectId.Equals( e.Schlüssel.NDOObjectId ), "Ids should be different" );
634 e = ( Email) pm. FindObject( e. NDOObjectId ) ;
635 z0 = ( Zertifikat) pm. FindObject( e. Schlüssel. NDOObjectId ) ;
636 Assert. That( e != null, "1. Email not found" ) ;
637 Assert. That( z0 != null, "1. Zertifikat not found" ) ;
638 ············ObjectId moid = e.NDOObjectId;
639 ············ObjectId soid = z0.NDOObjectId;
640 ············e = null;
641 ············z0 = null;
642
643 ············pm.UnloadCache();
644 e = ( Email) pm. FindObject( moid ) ;
645 ············var z1 = pm.Objects<Zertifikat>().Where(z=>z.Oid() == soid.Id.Value).SingleOrDefault();
646 ············Assert.That( z1 != null );
647 ············Zertifikat z2 = e.Schlüssel;
648 Assert. That( Object. ReferenceEquals( z1, z2) ) ;
649 z0 = ( Zertifikat) pm. FindObject( soid ) ;
650 Assert. That( e != null, "2. Email not found" ) ;
651 Assert. That( z0 != null, "2. Zertifikat not found" ) ;
652 Assert. That( Object. ReferenceEquals( z0, z2) , "Zertifikat should match" ) ;
653 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "Email should match" ) ;
 
654 ········}
655
656 ········[Test]
657 ········public void AggrTestCreateObjectsWithTransaction()
658 ········{
659 var pm = PmFactory. NewPersistenceManager( ) ;
 
660 ············var tm = pm.TransactionMode;
661 ············try
662 ············{
663 ················// See Issue #1145
664 ················// The test would fail, if we didn't alter the update rank
665 ················// according to the actual situation, that e has a valid database id.
666 ················// The test would fail, because the update rank would cause e to be saved first
667 ················// at the 2nd Save() call.
668 ················pm.TransactionMode = TransactionMode.Optimistic;
669 ················pm.MakePersistent( e );
670 ················pm.Save( true );
671 ················pm.MakePersistent( z0 );
672 ················e.Schlüssel = z0;
673 ················pm.Save();
674 ················pm.UnloadCache();
675 ················pm.TransactionMode = TransactionMode.None;
676 ················var email = pm.Objects<Email>().Single();
677 Assert. That( email. Schlüssel != null) ;
678 Assert. That( 42 == email. Schlüssel. Key ) ;
679 ················pm.UnloadCache();
680 ················var zertifikat = pm.Objects<Zertifikat>().Single();
681 Assert. That( zertifikat. Adresse != null) ;
682 ············}
683 ············finally
684 ············{
685 ················pm.TransactionMode = tm;
686 ············}
687 ········}
 
688
689
690 ········[Test]
691 ········public void AggrSimpleObjectSave()
692 ········{
693 var pm = PmFactory. NewPersistenceManager( ) ;
 
694 ············pm.MakePersistent( z0 );
695 ············pm.Save();
 
696 ········}
697
698 ········[Test]
699 ········public void AggrChildAddFail()
700 ········{
701 var pm = PmFactory. NewPersistenceManager( ) ;
 
702 ············pm.MakePersistent( z0 );
703 ············pm.MakePersistent( e );
704 ············z0.Adresse = e;
705 ········}
 
706
707 ········[Test]
708 ········public void AggrChildAddFail2()
709 ········{
710 var pm = PmFactory. NewPersistenceManager( ) ;
 
711 ············pm.MakePersistent( e );
712 ············pm.MakePersistent( z0 );
713 ············pm.Save();
714 ············z0.Adresse = e;
715 ········}
 
716
717 ········[Test]
718 ········public void AggrChildAdd3()
719 ········{
720 var pm = PmFactory. NewPersistenceManager( ) ;
 
721 ············pm.MakePersistent( e );
722 ············pm.MakePersistent( z0 );
723 ············pm.Save();
724 ············e.Schlüssel = z0;
725 ············z0.Adresse = e;
 
726 ········}
727
728 ········[Test]
729 ········public void AggrChildAdd4()
730 ········{
731 var pm = PmFactory. NewPersistenceManager( ) ;
 
732 ············pm.MakePersistent( z0 );
733 ············pm.MakePersistent( e );
734 ············pm.Save();
735 ············e.Schlüssel = z0;
736 ············z0.Adresse = null;
737 ········}
 
738
739 ········[Test]
740 ········public void AggrTestAddObjectSave()
741 ········{
742 var pm = PmFactory. NewPersistenceManager( ) ;
 
743 ············pm.MakePersistent( z0 );
744 ············pm.MakePersistent( e );
745 ············pm.Save();
746 ············e.Schlüssel = z0;
747 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
748 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "1. Backlink wrong" ) ;
749 ············pm.Save();
750 e = ( Email) pm. FindObject( e. NDOObjectId ) ;
751 z0 = ( Zertifikat) pm. FindObject( z0. NDOObjectId ) ;
752 Assert. That( e != null, "1. Email not found" ) ;
753 Assert. That( z0 != null, "1. Zertifikat not found" ) ;
754 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
755 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "2. Backlink wrong" ) ;
 
756 ········}
757
758 ········[Test]
759 ········public void AggrTestAddObjectAbort()
760 ········{
761 var pm = PmFactory. NewPersistenceManager( ) ;
 
762 ············pm.MakePersistent( z0 );
763 ············pm.MakePersistent( e );
764 ············pm.Save();
765 ············e.Schlüssel = z0;
766 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
767 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
768 ············pm.Abort();
769 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
770 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
771 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
 
772 ········}
773
774
775 ········[Test]
776 ········public void AggrTestReplaceChildSave()
777 ········{
778 var pm = PmFactory. NewPersistenceManager( ) ;
 
779 ············pm.MakePersistent( z0 );
780 ············pm.MakePersistent( e );
781 ············e.Schlüssel = z0;
782 ············pm.Save();
783 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
784 ············Zertifikat z2 = new Zertifikat();
785 ············z2.Key = 0815;
786 ············pm.MakePersistent( z2 );
787 ············e.Schlüssel = z2;
788 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
789 Assert. That( NDOObjectState. Created == z2. NDOObjectState, "2. Wrong state" ) ;
790 Assert. That( z0. Adresse == null, "3. No relation to Email" ) ;
791 Assert. That( Object. ReferenceEquals( z2. Adresse, e) , "4. Email should be same" ) ;
792 Assert. That( Object. ReferenceEquals( e. Schlüssel, z2) , "5. Zertifikat should be same" ) ;
793 ············pm.Save();
794 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "6. Wrong state" ) ;
795 Assert. That( NDOObjectState. Persistent == z2. NDOObjectState, "7. Wrong state" ) ;
796 Assert. That( z0. Adresse == null, "8. No relation to Email" ) ;
797 Assert. That( Object. ReferenceEquals( z2. Adresse, e) , "9. Email should be same" ) ;
798 Assert. That( Object. ReferenceEquals( e. Schlüssel, z2) , "10. Zertifikat should be same" ) ;
799 ········}
 
800
801 ········[Test]
802 ········public void AggrTestReplaceChildAbort()
803 ········{
804 var pm = PmFactory. NewPersistenceManager( ) ;
 
805 ············pm.MakePersistent( z0 );
806 ············pm.MakePersistent( e );
807 ············e.Schlüssel = z0;
808 ············pm.Save();
809 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
810 ············Zertifikat z2 = new Zertifikat();
811 ············z2.Key = 0815;
812 ············pm.MakePersistent( z2 );
813 ············e.Schlüssel = z2;
814 ············pm.Abort();
815 Assert. That( NDOObjectState. Transient == z2. NDOObjectState, "1. Wrong state" ) ;
816 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
817 Assert. That( z2. Adresse == null, "3. No relation to Email" ) ;
818 Assert. That( Object. ReferenceEquals( z0. Adresse, e) , "4. Email should be same" ) ;
819 Assert. That( Object. ReferenceEquals( e. Schlüssel, z0) , "5. Zertifikat should be same" ) ;
 
820 ········}
821
822 ········[Test]
823 ········public void AggrTestReplaceParentSave()
824 ········{
825 var pm = PmFactory. NewPersistenceManager( ) ;
 
826 ············pm.MakePersistent( z0 );
827 ············pm.MakePersistent( e );
828 ············e.Schlüssel = z0;
829 ············pm.Save();
830 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
831 ············Email m2 = new Email( "db@cortex-brainware.de" );
832 ············pm.MakePersistent( m2 );
833 ············z0.Adresse = m2;
834 ········}
 
835
836
837 ········[Test]
838 ········public void AggrTestRemoveObjectSave()
839 ········{
840 var pm = PmFactory. NewPersistenceManager( ) ;
 
841 ············pm.MakePersistent( z0 );
842 ············pm.MakePersistent( e );
843 ············e.Schlüssel = z0;
844 ············pm.Save();
845 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
846 ············ObjectId aoid = z0.NDOObjectId;
847 ············e.Schlüssel = null;
848 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
849 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
850 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
851 ············pm.Save();
852 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
853 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
854 ············ObjectId moid = e.NDOObjectId;
855 ············Assert.That( aoid.IsValid(), "Still valid Zertifikat" );
856 ············pm.UnloadCache();
857 e = ( Email) pm. FindObject( moid ) ;
858 Assert. That( e != null, "3. Email not found" ) ;
859 Assert. That( e. Schlüssel == null, "3. Zertifikat should be null" ) ;
 
860 ········}
861
862 ········[Test]
863 ········public void AggrTestRemoveObjectAbort()
864 ········{
865 var pm = PmFactory. NewPersistenceManager( ) ;
 
866 ············pm.MakePersistent( z0 );
867 ············pm.MakePersistent( e );
868 ············e.Schlüssel = z0;
869 ············pm.Save();
870 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
871 ············e.Schlüssel = null;
872 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
873 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
874 ············pm.Abort();
875 Assert. That( e. Schlüssel != null, "2. Zertifikat not found" ) ;
876 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
877 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "2. Backlink wrong" ) ;
 
878 ········}
879
880 ········[Test]
881 ········public void AggrTestRemoveParentSave()
882 ········{
883 var pm = PmFactory. NewPersistenceManager( ) ;
 
884 ············pm.MakePersistent( z0 );
885 ············pm.MakePersistent( e );
886 ············e.Schlüssel = z0;
887 ············pm.Save();
888 Assert. That( z0. Adresse != null, "1. Email not found" ) ;
889 ············ObjectId aoid = z0.NDOObjectId;
890 ············z0.Adresse = null;
891 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
892 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
893 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
894 ············pm.Save();
895 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
896 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
897 ············ObjectId moid = e.NDOObjectId;
898 ············Assert.That( aoid.IsValid(), "Zertifikat still valid" );
899 ············pm.UnloadCache();
900 e = ( Email) pm. FindObject( moid ) ;
901 Assert. That( e != null, "3. Email not found" ) ;
902 Assert. That( e. Schlüssel == null, "3. Zertifikat should be null" ) ;
 
903 ········}
904
905 ········[Test]
906 ········public void AggrTestRemoveParentAbort()
907 ········{
908 var pm = PmFactory. NewPersistenceManager( ) ;
 
909 ············pm.MakePersistent( z0 );
910 ············pm.MakePersistent( e );
911 ············e.Schlüssel = z0;
912 ············pm.Save();
913 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
914 ············z0.Adresse = null;
915 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
916 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
917 ············pm.Abort();
918 Assert. That( e. Schlüssel != null, "2. Zertifikat not found" ) ;
919 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
920 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "2. Backlink wrong" ) ;
921 ········}
922
923 #if false
924 ········[Test]
925 ········[ExpectedException(typeof(NDOException))]
926 ········public void AggrTestDelete () {
927 ············pm.MakePersistent(z);
928 ············pm.MakePersistent(e);
929 ············pm.Save();
930 ············e.Schlüssel = z;
931 ············pm.Save();
932 ············pm.Delete(e);··// Cannot delete object within aggregation
933 ········}
934
935
936 ········[Test]
937 ········[ExpectedException(typeof(NDOException))]
938 ········public void AggrTestCreateDelete() {
939 ············pm.MakePersistent(z);
940 ············pm.MakePersistent(e);
941 ············e.Schlüssel = z;
942 ············pm.Delete(e);··// Cannot delete object within aggregation
943 ········}
944 #endif
945
946 ········[Test]
947 ········public void AggrTestCreateDeleteAllowed()
948 ········{
949 var pm = PmFactory. NewPersistenceManager( ) ;
 
950 ············pm.MakePersistent( z0 );
951 ············pm.MakePersistent( e );
952 ············e.Schlüssel = z0;
953 ············e.Schlüssel = null;
954 ············pm.Delete( e );
955 Assert. That( NDOObjectState. Created == z0. NDOObjectState, "1. Wrong state" ) ;
956 Assert. That( NDOObjectState. Transient == e. NDOObjectState, "2. Wrong state" ) ;
957 Assert. That( e. Schlüssel == null, "3. Zertifikat should be null" ) ;
958 Assert. That( z0. Adresse == null, "4. Email should be null" ) ;
 
959 ········}
960
961
962 ········[Test]
963 ········public void AggrTestAddRemoveSave()
964 ········{
965 var pm = PmFactory. NewPersistenceManager( ) ;
 
966 ············pm.MakePersistent( e );
967 ············pm.MakePersistent( z0 );
968 ············pm.Save();
969 ············e.Schlüssel = z0;
970 ············e.Schlüssel = null;
971 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
972 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
973 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
974 ············pm.Save();
975 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
976 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
977 Assert. That( z0. Adresse == null, "3. Email should be null" ) ;
 
978 ········}
979
980 ········[Test]
981 ········public void AggrTestAddRemoveAbort()
982 ········{
983 var pm = PmFactory. NewPersistenceManager( ) ;
 
984 ············pm.MakePersistent( e );
985 ············pm.MakePersistent( z0 );
986 ············pm.Save();
987 ············e.Schlüssel = z0;
988 ············e.Schlüssel = null;
989 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
990 ············pm.Abort();
991 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
992 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
993 Assert. That( z0. Adresse == null, "3. Email should be null" ) ;
 
994 ········}
995
996
997
998 ········[Test]
999 ········public void AggrTestHollow()
1000 ········{
1001 var pm = PmFactory. NewPersistenceManager( ) ;
 
 
1002 ············pm.MakePersistent( z0 );
1003 ············e.Schlüssel = z0;
1004 ············pm.MakePersistent( e );
1005 ············pm.Save();
1006 ············pm.MakeHollow( e ); // setzt e.z auf null
1007
1008 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "1: Email should be hollow" ) ;
1009 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "1: Zertifikat should be persistent" ) ;
1010
1011 ············z0 = e.Schlüssel; // ruft LoadData för e auf. e.svm liegt auf dem Cache und ist Persistent
1012 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "1: Email should be persistent" ) ;
1013 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2: Zertifikat should be persistent" ) ;
1014 ObjectId id = e. NDOObjectId;
1015 pm. Close( ) ;
1016 pm = PmFactory. NewPersistenceManager( ) ;
1017 e = ( Email) pm. FindObject( id ) ;
1018 Assert. That( e != null, "Email not found" ) ;
1019 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "2: Email should be hollow" ) ;
 
1020 ············z0 = e.Schlüssel;
1021 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "2: Email should be persistent" ) ;
1022 Assert. That( z0 != null, "Zertifikat not found" ) ;
1023 Assert. That( NDOObjectState. Hollow == z0. NDOObjectState, "1: Zertifikat should be hollow" ) ;
1024 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "2. Backlink wrong" ) ;
 
1025 ········}
1026
1027
1028 ········[Test]
1029 ········public void AggrTestMakeAllHollowDelete()
1030 ········{
1031 var pm = PmFactory. NewPersistenceManager( ) ;
 
1032 ············pm.MakePersistent( z0 );
1033 ············e.Schlüssel = z0;
1034 ············pm.MakePersistent( e );
1035 ············pm.Save();
1036 ············pm.MakeAllHollow();
1037 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "1: Email should be hollow" ) ;
1038 Assert. That( NDOObjectState. Hollow == z0. NDOObjectState, "1: Zertifikat should be hollow" ) ;
1039 ············Zertifikat zz = e.Schlüssel;··// Das lödt das Objekt, deshalb geht es hier!
1040 ············e.Schlüssel = null;
1041 Assert. That( NDOObjectState. PersistentDirty == e. NDOObjectState, "2: Email should be persistent dirty" ) ;
1042 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "2: Zertifikat should be persistent dirty" ) ;
1043 Assert. That( e. Schlüssel == null, "3. Email should have no Zertifikat" ) ;
1044 Assert. That( z0. Adresse == null, "3. Zertifikat should have no Email" ) ;
1045 ············pm.Delete( e );
1046 ········}
 
1047
1048 ········[Test]
1049 ········public void AggrTestMakeAllHollow()
1050 ········{
1051 var pm = PmFactory. NewPersistenceManager( ) ;
 
1052 ············pm.MakePersistent( z0 );
1053 ············e.Schlüssel = z0;
1054 ············pm.MakePersistent( e );
1055 ············pm.Save();
1056 ············pm.MakeAllHollow();
1057 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "1: Email should be hollow" ) ;
1058 Assert. That( NDOObjectState. Hollow == z0. NDOObjectState, "1: Zertifikat should be hollow" ) ;
1059 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "2. Backlink wrong" ) ;
 
1060 ········}
1061
1062 ········[Test]
1063 ········public void AggrTestMakeAllHollowUnsaved()
1064 ········{
1065 var pm = PmFactory. NewPersistenceManager( ) ;
 
1066 ············pm.MakePersistent( z0 );
1067 ············e.Schlüssel = z0;
1068 ············pm.MakePersistent( e );
1069 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
1070 Assert. That( NDOObjectState. Created == e. NDOObjectState, "1: Email should be created" ) ;
1071 Assert. That( NDOObjectState. Created == z0. NDOObjectState, "1: Zertifikat should be created" ) ;
 
1072 ········}
1073
1074
1075 ········[Test]
1076 ········public void AggrTestExtentRelatedObjects()
1077 ········{
1078 var pm = PmFactory. NewPersistenceManager( ) ;
 
1079 ············pm.MakePersistent( z0 );
1080 ············e.Schlüssel = z0;
1081 ············pm.MakePersistent( e );
1082 ············pm.Save();
1083 ············IList liste = pm.GetClassExtent( typeof( Email ) );
1084 e = ( Email) liste[0];
1085 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "1: Email should be persistent" ) ;
1086 Assert. That( e. Schlüssel != null, "2. Relation is missing" ) ;
1087 Assert. That( NDOObjectState. Persistent == e. Schlüssel. NDOObjectState, "2. : Zertifikat should be hollow" ) ;
1088 Assert. That( Object. ReferenceEquals( e, z0. Adresse) , "2. Backlink wrong" ) ;
1089
1090 ············pm.UnloadCache();
1091 ············liste = pm.GetClassExtent( typeof( Email ) );
1092 e = ( Email) liste[0];
1093 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "5: Email should be hollow" ) ;
1094 Assert. That( e. Schlüssel != null, "6. Relation is missing" ) ;
1095 Assert. That( NDOObjectState. Hollow == e. Schlüssel. NDOObjectState, "8. : Zertifikat should be hollow" ) ;
1096 ············Assert.That( e != z0.Adresse, "8a. Should be different objects" );
1097 Assert. That( Object. ReferenceEquals( e, e. Schlüssel. Adresse) , "8b. Email should match" ) ;
1098
1099 ············pm.UnloadCache();
1100 ············liste = pm.GetClassExtent( typeof( Email ), false );
1101 e = ( Email) liste[0];
1102 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "9: Email should be persistent" ) ;
1103 Assert. That( e. Schlüssel != null, "10. Relation is missing" ) ;
1104 Assert. That( NDOObjectState. Hollow == e. Schlüssel. NDOObjectState, "12. : Zertifikat should be hollow" ) ;
1105 ············Assert.That( e != z0.Adresse, "12a. Should be different objects" );
1106 Assert. That( Object. ReferenceEquals( e, e. Schlüssel. Adresse) , "12b. Email should match" ) ;
 
1107 ········}
1108
1109 ········[Test]
1110 ········public void BiTest()
 
 
1111 ········{
1112 ············var pm = PmFactory.NewPersistenceManager();
1113 ············pm.MakePersistent( e );
1114 ············pm.MakePersistent( z0 );
1115 ············//············System.Diagnostics.Debug.WriteLine("e:" + e.NDOObjectId.ExpressionString);
1116 ············//············System.Diagnostics.Debug.WriteLine("z:" + z.NDOObjectId.ExpressionString);
1117 ············e.Schlüssel = this.z0;
1118 ············pm.Save();
1119 ············//············System.Diagnostics.Debug.WriteLine("e:" + e.NDOObjectId.ExpressionString);
1120 ············//············System.Diagnostics.Debug.WriteLine("z:" + z.NDOObjectId.ExpressionString);
1121
 
1122 ········}
1123
1124
1125 ········#endregion
1126
1127 ········private void SetupEmail()
1128 ········{
1129 ············var pm = PmFactory.NewPersistenceManager();
1130 ············pm.MakePersistent( e );
1131 ············pm.Save();
1132 ········}
1133
1134 ········private Mitarbeiter CreateMitarbeiter( string vorname, string nachname )
1135 ········{
1136 ············Mitarbeiter m = new Mitarbeiter();
1137 ············m.Vorname = vorname;
1138 ············m.Nachname = nachname;
1139 ············return m;
1140 ········}
1141 ····}
1142 }
1143
New Commit (60aa080)
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.Collections;
25 using System.IO;
26 using NUnit.Framework;
27 using Reisekosten.Personal;
28 using Reisekosten;
29 using NDO;
30 using NDO.Linq;
 
 
 
 
31
32 namespace NdoUnitTests
33 {
34 ····/// <summary>
35 ····/// All tests for 1:1-Relations. Bidirectional Composition and Aggregation
36 ····/// </summary>
37
38
39 ····[TestFixture]
40 ····public class Rel1to1Bidirectional : NDOTest
41 ····{
42 ········public Rel1to1Bidirectional()
43 ········{
44 ········}
45
46 ········private static int count = 0;
47 ········private Mitarbeiter m;
48 ········private Sozialversicherungsnummer svn;
49 ········private Email e;
50 ········private Zertifikat z0;
51
52 ········[SetUp]
53 ········public void Setup()
54 ········{
55 ············count++;
56 ············m = CreateMitarbeiter( "Boris", "Becker" );
57 ············svn = new Sozialversicherungsnummer();
58 ············svn.SVN = 4711;
59 ············e = new Email( "hwk@cortex-brainware.de" );
60 ············z0 = new Zertifikat();
61 ············z0.Key = 42; // :-)
62 ········}
63
64 ········public void DeleteAll()
65 ········{
66 ············var pm = PmFactory.NewPersistenceManager();
67 ············IList mitarbeiterListe = pm.GetClassExtent( typeof( Mitarbeiter ), true );
68 ············pm.Delete( mitarbeiterListe );
69 ············pm.Save();
70
71 ············// Delete unbound Soz.V. objects
72 ············IList sozListe = pm.GetClassExtent( typeof( Sozialversicherungsnummer ) );
73 ············pm.Delete( sozListe );
74 ············pm.Save();
75
76 ············IList eListe = pm.GetClassExtent( typeof( Email ) );
77 ············pm.Delete( eListe );
78 ············pm.Save();
79
80 ············IList zListe = pm.GetClassExtent( typeof( Zertifikat ) );
81 ············pm.Delete( zListe );
82 ············pm.Save();
83 ············pm.Close();
84 ········}
85
86 ········[TearDown]
87 ········public void TearDown()
88 ········{
 
89 ············DeleteAll();
 
 
90 ········}
91
92
93
94 ········#region Composition Tests
95
96 ········[Test]
97 ········public void CompTestCreateObjectsSave()
98 ········{
99 using ( var pm = PmFactory. NewPersistenceManager( ) )
100 ············{
101 ················m.SVN = svn;
102 ················pm.MakePersistent( m );
103 ················pm.Save();
104 ················Assert.That( !m.NDOObjectId.Equals( m.SVN.NDOObjectId ), "Ids should be different" );
105 m = ( Mitarbeiter) pm. FindObject( m. NDOObjectId ) ;
106 svn = ( Sozialversicherungsnummer) pm. FindObject( m. SVN. NDOObjectId ) ;
107 Assert. That( m != null, "1. Mitarbeiter not found" ) ;
108 Assert. That( svn != null, "1. SVN not found" ) ;
109 ················ObjectId moid = m.NDOObjectId;
110 ················ObjectId soid = svn.NDOObjectId;
111 ················m = null;
112 ················svn = null;
113
114 ················pm.UnloadCache();
115 m = ( Mitarbeiter) pm. FindObject( moid ) ;
116 ················Sozialversicherungsnummer s2 = m.SVN;
117 svn = ( Sozialversicherungsnummer) pm. FindObject( soid ) ;
118 Assert. That( m != null, "2. Mitarbeiter not found" ) ;
119 Assert. That( svn != null, "2. SVN not found" ) ;
120 Assert. That( Object. ReferenceEquals( svn, s2 ) , "SVN should match" ) ;
121 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "Mitarbeiter should match" ) ;
122 ············}
123 ········}
124
125 ········[Test]
126 ········public void SimpleObjectSave()
127 ········{
128 using ( var pm = PmFactory. NewPersistenceManager( ) )
129 ············{
130 ················pm.MakePersistent( svn );
131 ················pm.Save();
132 ················pm.UnloadCache();
133 ················IList l = pm.GetClassExtent( typeof( Sozialversicherungsnummer ) );
134 ················Assert.That( l.Count == 1, "Sozialversicherungsnummer sollte gespeichert sein" );
135 ················pm.Delete( l );
136 ················pm.Save();
137 ················pm.UnloadCache();
138 ················l = pm.GetClassExtent( typeof( Sozialversicherungsnummer ) );
139 ················Assert.That( l.Count == 0, "Sozialversicherungsnummer sollte gelöscht sein" );
140 ············}
141 ········}
142
143 ········[Test]
144 ········public void CompChildAddFail()
145 ········{
146 using ( var pm = PmFactory. NewPersistenceManager( ) )
147 ············{
148 ················pm.MakePersistent( svn );
149 ················var thrown = false;
150 ················try
151 ················{
152 ····················svn.Angestellter = m;
153 ················}
154 ················catch (NDOException)
155 ················{
156 ····················thrown = true;
157 ················}
158 Assert. That( true == thrown ) ;
159 ············}
160 ········}
161
162 ········[Test]
163 ········public void CompChildAddFail2()
164 ········{
165 using ( var pm = PmFactory. NewPersistenceManager( ) )
166 ············{
167 ················pm.MakePersistent( svn );
168 ················pm.Save();
169 ················var thrown = false;
170 ················try
171 ················{
172 ····················svn.Angestellter = m;
173 ················}
174 ················catch (NDOException)
175 ················{
176 ····················thrown = true;
177 ················}
178 Assert. That( true == thrown ) ;
179 ············}
180 ········}
181
182 ········[Test]
183 ········public void CompChildAdd3()
184 ········{
185 using ( var pm = PmFactory. NewPersistenceManager( ) )
186 ············{
187 ················pm.MakePersistent( m );
188 ················pm.Save();
189 ················m.SVN = svn;
190 ················var thrown = false;
191 ················try
192 ················{
193 ····················svn.Angestellter = m;
194 ················}
195 ················catch (NDOException)
196 ················{
197 ····················thrown = true;
198 ················}
199 Assert. That( true == thrown ) ;
200 ············}
201 ········}
202
203 ········[Test]
204 ········public void CompChildAdd4()
205 ········{
206 using ( var pm = PmFactory. NewPersistenceManager( ) )
207 ············{
208 ················pm.MakePersistent( m );
209 ················pm.Save();
210 ················m.SVN = svn;
211 ················var thrown = false;
212 ················try
213 ················{
214 ····················svn.Angestellter = null; // Cannot change relation through child
215 ················}
216 ················catch (NDOException)
217 ················{
218 ····················thrown = true;
219 ················}
220 Assert. That( true == thrown ) ;
221 ············}
222 ········}
223
224 ········[Test]
225 ········public void CompTestAddObjectSave()
226 ········{
227 using ( var pm = PmFactory. NewPersistenceManager( ) )
228 ············{
229 ················pm.MakePersistent( m );
230 ················pm.Save();
231 ················m.SVN = svn;
232 Assert. That( NDOObjectState. Created == svn. NDOObjectState, "1. Wrong state" ) ;
233 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "1. Backlink wrong" ) ;
234 ················pm.Save();
235 m = ( Mitarbeiter) pm. FindObject( m. NDOObjectId ) ;
236 svn = ( Sozialversicherungsnummer) pm. FindObject( svn. NDOObjectId ) ;
237 Assert. That( m != null, "1. Mitarbeiter not found" ) ;
238 Assert. That( svn != null, "1. SVN not found" ) ;
239 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
240 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "2. Backlink wrong" ) ;
241 ············}
242 ········}
243
244 ········[Test]
245 ········public void CompTestAddObjectAbort()
246 ········{
247 using ( var pm = PmFactory. NewPersistenceManager( ) )
248 ············{
249 ················pm.MakePersistent( m );
250 ················pm.Save();
251 ················m.SVN = svn;
252 Assert. That( NDOObjectState. Created == svn. NDOObjectState, "1. Wrong state" ) ;
253 Assert. That( m. SVN != null, "1. SVN not found" ) ;
254 ················pm.Abort();
255 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
256 Assert. That( m. SVN == null, "1. SVN should be null" ) ;
257 Assert. That( svn. Angestellter == null, "1. Mitarbeiter should be null" ) ;
258 ············}
259 ········}
260
261
262 ········[Test]
263 ········public void CompTestReplaceChildSave()
264 ········{
265 ············using (var pm = PmFactory.NewPersistenceManager())
266 ············{
 
267 ················pm.MakePersistent( m );
268 ················m.SVN = svn;
269 ················pm.Save();
270 Assert. That( m. SVN != null, "1. SVN not found" ) ;
271 ················Sozialversicherungsnummer svn2 = new Sozialversicherungsnummer();
272 ················svn2.SVN = 0815;
273 ················m.SVN = svn2;
274 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "1. Wrong state" ) ;
275 Assert. That( NDOObjectState. Created == svn2. NDOObjectState, "2. Wrong state" ) ;
276 Assert. That( svn. Angestellter == null, "3. No relation to Mitarbeiter" ) ;
277 Assert. That( Object. ReferenceEquals( svn2. Angestellter, m ) , "4. Mitarbeiter should be same" ) ;
278 Assert. That( Object. ReferenceEquals( m. SVN, svn2 ) , "5. SVN should be same" ) ;
279 ················pm.Save();
280 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "6. Wrong state" ) ;
281 Assert. That( NDOObjectState. Persistent == svn2. NDOObjectState, "7. Wrong state" ) ;
282 Assert. That( svn. Angestellter == null, "8. No relation to Mitarbeiter" ) ;
283 Assert. That( Object. ReferenceEquals( svn2. Angestellter, m ) , "9. Mitarbeiter should be same" ) ;
284 Assert. That( Object. ReferenceEquals( m. SVN, svn2 ) , "10. SVN should be same" ) ;
285 ············}
286 ········}
287
288 ········[Test]
289 ········public void CompTestReplaceChildAbort()
290 ········{
291 using ( var pm = PmFactory. NewPersistenceManager( ) )
292 ············{
293 ················pm.MakePersistent( m );
294 ················m.SVN = svn;
295 Assert. That( Object. ReferenceEquals( svn. Angestellter, m ) , "1. Mitarbeiter should be same" ) ;
296 ················pm.Save();
297 Assert. That( m. SVN != null, "1. SVN not found" ) ;
298 ················Sozialversicherungsnummer svn2 = new Sozialversicherungsnummer();
299 ················svn2.SVN = 0815;
300 ················m.SVN = svn2;
301 ················pm.Abort();
302 Assert. That( NDOObjectState. Transient == svn2. NDOObjectState, "1. Wrong state" ) ;
303 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
304 Assert. That( svn2. Angestellter == null, "3. No relation to Mitarbeiter" ) ;
305 Assert. That( Object. ReferenceEquals( svn. Angestellter, m ) , "4. Mitarbeiter should be same" ) ;
306 Assert. That( Object. ReferenceEquals( m. SVN, svn ) , "5. SVN should be same" ) ;
307 ············}
308 ········}
309
310 ········[Test]
311 ········public void CompTestReplaceParent()
312 ········{
313 using ( var pm = PmFactory. NewPersistenceManager( ) )
314 ············{
315 ················pm.MakePersistent( m );
316 ················m.SVN = svn;
317 ················pm.Save();
318 Assert. That( m. SVN != null, "1. SVN not found" ) ;
319 ················Mitarbeiter m2 = CreateMitarbeiter( "Andre", "Agassi" );
320 ················var thrown = false;
321 ················try
322 ················{
323 ····················svn.Angestellter = m2;
324 ················}
325 ················catch (NDOException)
326 ················{
327 ····················thrown = true;
328 ················}
329 ················Assert.That( true == thrown );
330 ············}
 
331 ········}
332
333
334 ········[Test]
335 ········public void CompTestRemoveObjectSave()
336 ········{
337 using ( var pm = PmFactory. NewPersistenceManager( ) )
338 ············{
339 ················pm.MakePersistent( m );
340 ················m.SVN = svn;
341 ················pm.Save();
342 ················ObjectId moid = m.NDOObjectId;
343 Assert. That( m. SVN != null, "1. SVN not found" ) ;
344 ················m.SVN = null;
345 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "1. Wrong state" ) ;
346 Assert. That( m. SVN == null, "1. SVN should be null" ) ;
347 Assert. That( svn. Angestellter == null, "1. Mitarbeiter should be null" ) ;
348 ················pm.Save();
349 Assert. That( m. SVN == null, "2. SVN should be null" ) ;
350 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
351 ················moid = m.NDOObjectId;
352 ················pm.UnloadCache();
353 m = ( Mitarbeiter) pm. FindObject( moid ) ;
354 Assert. That( m != null, "3. Mitarbeiter not found" ) ;
355 Assert. That( m. SVN == null, "3. SVN should be null" ) ;
356 ············}
357 ········}
358
359 ········[Test]
360 ········public void CompTestRemoveObjectAbort()
361 ········{
362 using ( var pm = PmFactory. NewPersistenceManager( ) )
363 ············{
364 ················pm.MakePersistent( m );
365 ················m.SVN = svn;
366 ················pm.Save();
367 Assert. That( m. SVN != null, "1. SVN not found" ) ;
368 ················m.SVN = null;
369 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "1. Wrong state" ) ;
370 Assert. That( m. SVN == null, "2. SVN should be null" ) ;
371 ················pm.Abort();
372 Assert. That( m. SVN != null, "2. SVN not found" ) ;
373 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
374 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "2. Backlink wrong" ) ;
375 ············}
376 ········}
377
378 ········[Test]
379 ········public void CompTestRemoveParentSave()
380 ········{
381 ············using (var pm = PmFactory.NewPersistenceManager())
382 ············{
 
383 ················pm.MakePersistent( m );
384 ················m.SVN = svn;
385 ················pm.Save();
386
387 ················Assert.That( svn.Angestellter != null, "1. Mitarbeiter not found" );
388 ················var thrown = false;
389 ················try
390 ················{
391 ····················svn.Angestellter = null;··// Cannot manipulate composition through child object.
392 ················}
393 ················catch (NDOException)
394 ················{
395 ····················thrown = true;
396 ················}
397 Assert. That( true == thrown ) ;
398 ············}
399 ········}
400
401
402 ········[Test]
403 ········public void CompTestDeleteSave()
404 ········{
405 using ( var pm = PmFactory. NewPersistenceManager( ) )
406 ············{
407 ················pm.MakePersistent( m );
408 ················pm.Save();
409 ················m.SVN = svn;
410 ················pm.Save();
411 ················pm.Delete( m );
412 Assert. That( NDOObjectState. Deleted == m. NDOObjectState, "1. Wrong state" ) ;
413 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "2. Wrong state" ) ;
414 ················pm.Save();
415
416 Assert. That( NDOObjectState. Transient == m. NDOObjectState, "1. Wrong state" ) ;
417 ················Assert.That( NDOObjectState.Transient == svn.NDOObjectState, "2. Wrong state" );
418 ················// Objects should retain relations in memory
419 Assert. That( m. SVN != null, "3. SVN shouldn't be null" ) ;
420 Assert. That( svn. Angestellter == null, "3. Mitarbeiter should be null" ) ;
421 ············}
422 ········}
423
424 ········[Test]
425 ········public void CompTestDeleteChildSave()
426 ········{
427 using ( var pm = PmFactory. NewPersistenceManager( ) )
428 ············{
429 ················bool thrown = false;
430 ················pm.MakePersistent( m );
431 ················pm.Save();
432 ················m.SVN = svn;
433 ················pm.Save();
434 ················try
435 ················{
436 ····················pm.Delete( svn ); // Should throw an Exception
437 ················}
438 ················catch (NDOException e)
439 ················{
440 ····················thrown = true;
441 ················}
442 ················Assert.That( thrown, "Exception mösste ausgelöst worden sein" );
443 ············}
444 ········}
445
446
447 ········[Test]
448 ········public void CompTestDeleteAbort()
449 ········{
450 using ( var pm = PmFactory. NewPersistenceManager( ) )
451 ············{
452 ················pm.MakePersistent( m );
453 ················pm.Save();
454 ················m.SVN = svn;
455 ················pm.Save();
456 ················pm.Delete( m );
457 Assert. That( NDOObjectState. Deleted == m. NDOObjectState, "1. Wrong state" ) ;
458 Assert. That( NDOObjectState. Deleted == svn. NDOObjectState, "2. Wrong state" ) ;
459 ················pm.Abort();
460 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "1. Wrong state" ) ;
461 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2. Wrong state" ) ;
462 Assert. That( m. SVN != null, "2. SVN not found" ) ;
463 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "2. Backlink wrong" ) ;
464 ············}
465 ········}
466
467 ········[Test]
468 ········public void CompTestCreateDelete()
469 ········{
470 using ( var pm = PmFactory. NewPersistenceManager( ) )
471 ············{
472 ················pm.MakePersistent( m );
473 ················m.SVN = svn;
474 ················pm.Delete( m );
475 Assert. That( NDOObjectState. Transient == m. NDOObjectState, "1. Wrong state" ) ;
476 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
477 ················// Objects should retain relations in memory
478 Assert. That( m. SVN != null, "3. SVN shouldn't be null" ) ;
479 Assert. That( svn. Angestellter == null, "3. Mitarbeiter should be null" ) ;
480 ············}
481 ········}
482
483 ········[Test]
484 ········public void CompTestAddRemoveSave()
485 ········{
486 using ( var pm = PmFactory. NewPersistenceManager( ) )
487 ············{
488 ················pm.MakePersistent( m );
489 ················pm.Save();
490 ················m.SVN = svn;
491 ················m.SVN = null;
492 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "1. Wrong state" ) ;
493 Assert. That( m. SVN == null, "1. SVN should be null" ) ;
494 Assert. That( svn. Angestellter == null, "1. Mitarbeiter should be null" ) ;
495 ················pm.Save();
496 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "2. Wrong state" ) ;
497 Assert. That( m. SVN == null, "2. SVN should be null" ) ;
498 Assert. That( svn. Angestellter == null, "3. Mitarbeiter should be null" ) ;
499 ············}
500 ········}
501
502 ········[Test]
503 ········public void CompTestAddRemoveAbort()
504 ········{
505 using ( var pm = PmFactory. NewPersistenceManager( ) )
506 ············{
507 ················pm.MakePersistent( m );
508 ················pm.Save();
509 ················m.SVN = svn;
510 ················m.SVN = null;
511 Assert. That( NDOObjectState. Transient == svn. NDOObjectState, "1. Wrong state" ) ;
512 ················pm.Abort();
513 ············}
514
515 ············Assert.That(NDOObjectState.Transient ==··svn.NDOObjectState, "2. Wrong state" );
516 ············Assert.That(m.SVN == null, "2. SVN should be null" );
517 ············Assert.That(svn.Angestellter == null, "3. Mitarbeiter should be null" );
518 ········}
519
520
521
522 ········[Test]
523 ········public void CompTestHollow()
524 ········{
525 ObjectId oid;
526 ············using (var pm = PmFactory.NewPersistenceManager())
527 ············{
528 ················m.SVN = svn;
529 ················pm.MakePersistent( m );
530 ················pm.Save();
531 ················pm.MakeHollow( m ); // setzt m.svn auf null
532
533 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "1: Mitarbeiter should be hollow" ) ;
534 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "1: SVN should be persistent" ) ;
535
536 ················svn = m.SVN; // ruft LoadData för m auf. m.svm liegt auf dem Cache und ist Persistent
537 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "1: Mitarbeiter should be persistent" ) ;
538 Assert. That( NDOObjectState. Persistent == svn. NDOObjectState, "2: SVN should be persistent" ) ;
539 oid = m. NDOObjectId;
540 }
541
542 using ( var pm = PmFactory. NewPersistenceManager( ) )
543 {
544 m = ( Mitarbeiter) pm. FindObject( oid ) ;
545 ················Assert.That( m != null, "Mitarbeiter not found" );
546 ················Assert.That( NDOObjectState.Hollow == m.NDOObjectState, "2: Mitarbeiter should be hollow" );
547 ················svn = m.SVN;
548 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "2: Mitarbeiter should be persistent" ) ;
549 Assert. That( svn != null, "SVN not found" ) ;
550 Assert. That( NDOObjectState. Hollow == svn. NDOObjectState, "1: SVN should be hollow" ) ;
551 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "2. Backlink wrong" ) ;
552 ············}
553 ········}
554
555
556 ········[Test]
557 ········public void CompTestMakeAllHollow()
558 ········{
559 using ( var pm = PmFactory. NewPersistenceManager( ) )
560 ············{
561 ················m.SVN = svn;
562 ················pm.MakePersistent( m );
563 ················pm.Save();
564 ················pm.MakeAllHollow();
565 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "1: Mitarbeiter should be hollow" ) ;
566 Assert. That( NDOObjectState. Hollow == svn. NDOObjectState, "1: SVN should be hollow" ) ;
567 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "2. Backlink wrong" ) ;
568 ············}
569 ········}
570
571 ········[Test]
572 ········public void CompTestMakeAllHollowUnsaved()
573 ········{
574 using ( var pm = PmFactory. NewPersistenceManager( ) )
575 ············{
576 ················m.SVN = svn;
577 ················pm.MakePersistent( m );
578 ················pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
579 Assert. That( NDOObjectState. Created == m. NDOObjectState, "1: Mitarbeiter should be created" ) ;
580 Assert. That( NDOObjectState. Created == svn. NDOObjectState, "1: SVN should be created" ) ;
581 ············}
582 ········}
583
584 ········[Test]
585 ········public void CompTestLockRelations()
586 ········{
587 using ( var pm = PmFactory. NewPersistenceManager( ) )
588 ············{
589 ················m.SVN = svn;
590 ················pm.MakePersistent( m );
591 ················m.Adresse = new Adresse();
592 ················m.Adresse.Lkz = "Bla";
593 ················pm.Save();
594 ················pm.Delete( m );
595 ················pm.Save();
596 Assert. That( NDOObjectState. Transient == m. NDOObjectState, "1: mitarbeiter should be transient" ) ;
597 Assert. That( NDOObjectState. Transient == m. SVN. NDOObjectState, "1: SVN should be transient" ) ;
598 Assert. That( NDOObjectState. Transient == m. Adresse. NDOObjectState, "1: Adresse should be transient" ) ;
599 ············}
600 ········}
601
602 ········[Test]
603 ········public void CompTestExtentRelatedObjects()
604 ········{
605 using ( var pm = PmFactory. NewPersistenceManager( ) )
606 ············{
607 ················m.SVN = svn;
608 ················pm.MakePersistent( m );
609 ················pm.Save();
610 ················IList liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
611 m = ( Mitarbeiter) liste[0];
612 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "1: Mitarbeiter should be persistent" ) ;
613 Assert. That( m. SVN != null, "2. Relation is missing" ) ;
614 Assert. That( NDOObjectState. Persistent == m. SVN. NDOObjectState, "2. : SVN should be hollow" ) ;
615 Assert. That( Object. ReferenceEquals( m, svn. Angestellter ) , "2. Backlink wrong" ) ;
616
617 ················pm.UnloadCache();
618 ················liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
619 m = ( Mitarbeiter) liste[0];
620 Assert. That( NDOObjectState. Hollow == m. NDOObjectState, "5: Mitarbeiter should be hollow" ) ;
621 Assert. That( m. SVN != null, "6. Relation is missing" ) ;
622 Assert. That( NDOObjectState. Hollow == m. SVN. NDOObjectState, "8. : SVN should be hollow" ) ;
623 ················Assert.That( m != svn.Angestellter, "8a. Should be different objects" );
624 Assert. That( Object. ReferenceEquals( m, m. SVN. Angestellter ) , "8b. Mitarbeiter should match" ) ;
625
626 ················pm.UnloadCache();
627 ················liste = pm.GetClassExtent( typeof( Mitarbeiter ), false );
628 m = ( Mitarbeiter) liste[0];
629 Assert. That( NDOObjectState. Persistent == m. NDOObjectState, "9: Mitarbeiter should be persistent" ) ;
630 Assert. That( m. SVN != null, "10. Relation is missing" ) ;
631 Assert. That( NDOObjectState. Hollow == m. SVN. NDOObjectState, "12. : SVN should be hollow" ) ;
632 ················Assert.That( m != svn.Angestellter, "12a. Should be different objects" );
633 Assert. That( Object. ReferenceEquals( m, m. SVN. Angestellter ) , "12b. Mitarbeiter should match" ) ;
634 ············}
635 ········}
636
637 ········#endregion
638
639 ········#region Aggregation Tests
640
641 ········[Test]
642 ········public void AggrTestCreateObjectsTransient()
643 ········{
644 using ( var pm = PmFactory. NewPersistenceManager( ) )
645 ············{
646 ················e.Schlüssel = z0;
647 ················var thrown = false;
648 ················try
649 ················{
650 ····················pm.MakePersistent( e );
651 ················}
652 ················catch (NDOException)
653 ················{
654 ····················thrown = true;
655 ················}
656 Assert. That( true == thrown ) ;
657 ············}
658 ········}
659
660 ········[Test]
661 ········public void AggrTestCreateObjectsTransient2()
662 ········{
663 ············using (var pm = PmFactory.NewPersistenceManager())
664 ············{
 
665 ················pm.MakePersistent( e );
666 ················var thrown = false;
667 ················try
668 ················{
669 ····················e.Schlüssel = z0;
670 ················}
671 ················catch (NDOException)
672 ················{
673 ····················thrown = true;
674 ················}
675 Assert. That( true == thrown ) ;
676 ············}
677 ········}
678
679 ········[Test]
680 ········public void AggrTestCreateObjectsSave()
681 ········{
682 ············using (var pm = PmFactory.NewPersistenceManager())
683 ············{
 
684 ················pm.MakePersistent( z0 );
685 ················e.Schlüssel = z0;
686 ················pm.MakePersistent( e );
687 ················pm.Save();
688 ················Assert.That( !e.NDOObjectId.Equals( e.Schlüssel.NDOObjectId ), "Ids should be different" );
689 e = ( Email) pm. FindObject( e. NDOObjectId ) ;
690 z0 = ( Zertifikat) pm. FindObject( e. Schlüssel. NDOObjectId ) ;
691 Assert. That( e != null, "1. Email not found" ) ;
692 Assert. That( z0 != null, "1. Zertifikat not found" ) ;
693 ················ObjectId moid = e.NDOObjectId;
694 ················ObjectId soid = z0.NDOObjectId;
695 ················e = null;
696 ················z0 = null;
697
698 ················pm.UnloadCache();
699 e = ( Email) pm. FindObject( moid ) ;
700 ················var z1 = pm.Objects<Zertifikat>().Where(z=>z.Oid() == soid.Id.Value).SingleOrDefault();
701 ················Assert.That( z1 != null );
702 ················Zertifikat z2 = e.Schlüssel;
703 Assert. That( Object. ReferenceEquals( z1, z2 ) ) ;
704 z0 = ( Zertifikat) pm. FindObject( soid ) ;
705 Assert. That( e != null, "2. Email not found" ) ;
706 Assert. That( z0 != null, "2. Zertifikat not found" ) ;
707 Assert. That( Object. ReferenceEquals( z0, z2 ) , "Zertifikat should match" ) ;
708 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "Email should match" ) ;
709 ············}
710 ········}
711
712 ········[Test]
713 ········public void AggrTestCreateObjectsWithTransaction()
714 ········{
715 using ( var pm = PmFactory. NewPersistenceManager( ) )
716 ············{
717 ················var tm = pm.TransactionMode;
718 ················try
719 ················{
720 ····················// See Issue #1145
721 ····················// The test would fail, if we didn't alter the update rank
722 ····················// according to the actual situation, that e has a valid database id.
723 ····················// The test would fail, because the update rank would cause e to be saved first
724 ····················// at the 2nd Save() call.
725 ····················pm.TransactionMode = TransactionMode.Optimistic;
726 ····················pm.MakePersistent( e );
727 ····················pm.Save( true );
728 ····················pm.MakePersistent( z0 );
729 ····················e.Schlüssel = z0;
730 ····················pm.Save();
731 ····················pm.UnloadCache();
732 ····················pm.TransactionMode = TransactionMode.None;
733 ····················var email = pm.Objects<Email>().Single();
734 Assert. That( email. Schlüssel != null ) ;
735 Assert. That( 42 == email. Schlüssel. Key ) ;
736 ····················pm.UnloadCache();
737 ····················var zertifikat = pm.Objects<Zertifikat>().Single();
738 Assert. That( zertifikat. Adresse != null ) ;
739 ················}
740 ················finally
741 ················{
742 ····················pm.TransactionMode = tm;
743 ················}
744 ············}
745 ········}
746
747
748 ········[Test]
749 ········public void AggrSimpleObjectSave()
750 ········{
751 using ( var pm = PmFactory. NewPersistenceManager( ) )
752 ············{
753 ················pm.MakePersistent( z0 );
754 ················pm.Save();
755 ············}
756 ········}
757
758 ········[Test]
759 ········public void AggrChildAddFail()
760 ········{
761 using ( var pm = PmFactory. NewPersistenceManager( ) )
762 ············{
763 ················pm.MakePersistent( z0 );
764 ················pm.MakePersistent( e );
765 ················z0.Adresse = e;
766 ············}
767 ········}
768
769 ········[Test]
770 ········public void AggrChildAddFail2()
771 ········{
772 using ( var pm = PmFactory. NewPersistenceManager( ) )
773 ············{
774 ················pm.MakePersistent( e );
775 ················pm.MakePersistent( z0 );
776 ················pm.Save();
777 ················z0.Adresse = e;
778 ············}
779 ········}
780
781 ········[Test]
782 ········public void AggrChildAdd3()
783 ········{
784 using ( var pm = PmFactory. NewPersistenceManager( ) )
785 ············{
786 ················pm.MakePersistent( e );
787 ················pm.MakePersistent( z0 );
788 ················pm.Save();
789 ················e.Schlüssel = z0;
790 ················z0.Adresse = e;
791 ············}
792 ········}
793
794 ········[Test]
795 ········public void AggrChildAdd4()
796 ········{
797 using ( var pm = PmFactory. NewPersistenceManager( ) )
798 ············{
799 ················pm.MakePersistent( z0 );
800 ················pm.MakePersistent( e );
801 ················pm.Save();
802 ················e.Schlüssel = z0;
803 ················z0.Adresse = null;
804 ············}
805 ········}
806
807 ········[Test]
808 ········public void AggrTestAddObjectSave()
809 ········{
810 using ( var pm = PmFactory. NewPersistenceManager( ) )
811 ············{
812 ················pm.MakePersistent( z0 );
813 ················pm.MakePersistent( e );
814 ················pm.Save();
815 ················e.Schlüssel = z0;
816 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
817 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "1. Backlink wrong" ) ;
818 ················pm.Save();
819 e = ( Email) pm. FindObject( e. NDOObjectId ) ;
820 z0 = ( Zertifikat) pm. FindObject( z0. NDOObjectId ) ;
821 Assert. That( e != null, "1. Email not found" ) ;
822 Assert. That( z0 != null, "1. Zertifikat not found" ) ;
823 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
824 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "2. Backlink wrong" ) ;
825 ············}
826 ········}
827
828 ········[Test]
829 ········public void AggrTestAddObjectAbort()
830 ········{
831 using ( var pm = PmFactory. NewPersistenceManager( ) )
832 ············{
833 ················pm.MakePersistent( z0 );
834 ················pm.MakePersistent( e );
835 ················pm.Save();
836 ················e.Schlüssel = z0;
837 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
838 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
839 ················pm.Abort();
840 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
841 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
842 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
843 ············}
844 ········}
845
846
847 ········[Test]
848 ········public void AggrTestReplaceChildSave()
849 ········{
850 using ( var pm = PmFactory. NewPersistenceManager( ) )
851 ············{
852 ················pm.MakePersistent( z0 );
853 ················pm.MakePersistent( e );
854 ················e.Schlüssel = z0;
855 ················pm.Save();
856 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
857 ················Zertifikat z2 = new Zertifikat();
858 ················z2.Key = 0815;
859 ················pm.MakePersistent( z2 );
860 ················e.Schlüssel = z2;
861 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
862 Assert. That( NDOObjectState. Created == z2. NDOObjectState, "2. Wrong state" ) ;
863 Assert. That( z0. Adresse == null, "3. No relation to Email" ) ;
864 Assert. That( Object. ReferenceEquals( z2. Adresse, e ) , "4. Email should be same" ) ;
865 Assert. That( Object. ReferenceEquals( e. Schlüssel, z2 ) , "5. Zertifikat should be same" ) ;
866 ················pm.Save();
867 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "6. Wrong state" ) ;
868 Assert. That( NDOObjectState. Persistent == z2. NDOObjectState, "7. Wrong state" ) ;
869 Assert. That( z0. Adresse == null, "8. No relation to Email" ) ;
870 Assert. That( Object. ReferenceEquals( z2. Adresse, e ) , "9. Email should be same" ) ;
871 Assert. That( Object. ReferenceEquals( e. Schlüssel, z2 ) , "10. Zertifikat should be same" ) ;
872 ············}
873 ········}
874
875 ········[Test]
876 ········public void AggrTestReplaceChildAbort()
877 ········{
878 using ( var pm = PmFactory. NewPersistenceManager( ) )
879 ············{
880 ················pm.MakePersistent( z0 );
881 ················pm.MakePersistent( e );
882 ················e.Schlüssel = z0;
883 ················pm.Save();
884 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
885 ················Zertifikat z2 = new Zertifikat();
886 ················z2.Key = 0815;
887 ················pm.MakePersistent( z2 );
888 ················e.Schlüssel = z2;
889 ················pm.Abort();
890 Assert. That( NDOObjectState. Transient == z2. NDOObjectState, "1. Wrong state" ) ;
891 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
892 Assert. That( z2. Adresse == null, "3. No relation to Email" ) ;
893 Assert. That( Object. ReferenceEquals( z0. Adresse, e ) , "4. Email should be same" ) ;
894 Assert. That( Object. ReferenceEquals( e. Schlüssel, z0 ) , "5. Zertifikat should be same" ) ;
895 ············}
896 ········}
897
898 ········[Test]
899 ········public void AggrTestReplaceParentSave()
900 ········{
901 using ( var pm = PmFactory. NewPersistenceManager( ) )
902 ············{
903 ················pm.MakePersistent( z0 );
904 ················pm.MakePersistent( e );
905 ················e.Schlüssel = z0;
906 ················pm.Save();
907 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
908 ················Email m2 = new Email( "db@cortex-brainware.de" );
909 ················pm.MakePersistent( m2 );
910 ················z0.Adresse = m2;
911 ············}
912 ········}
913
914
915 ········[Test]
916 ········public void AggrTestRemoveObjectSave()
917 ········{
918 using ( var pm = PmFactory. NewPersistenceManager( ) )
919 ············{
920 ················pm.MakePersistent( z0 );
921 ················pm.MakePersistent( e );
922 ················e.Schlüssel = z0;
923 ················pm.Save();
924 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
925 ················ObjectId aoid = z0.NDOObjectId;
926 ················e.Schlüssel = null;
927 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
928 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
929 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
930 ················pm.Save();
931 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
932 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
933 ················ObjectId moid = e.NDOObjectId;
934 ················Assert.That( aoid.IsValid(), "Still valid Zertifikat" );
935 ················pm.UnloadCache();
936 e = ( Email) pm. FindObject( moid ) ;
937 Assert. That( e != null, "3. Email not found" ) ;
938 Assert. That( e. Schlüssel == null, "3. Zertifikat should be null" ) ;
939 ············}
940 ········}
941
942 ········[Test]
943 ········public void AggrTestRemoveObjectAbort()
944 ········{
945 using ( var pm = PmFactory. NewPersistenceManager( ) )
946 ············{
947 ················pm.MakePersistent( z0 );
948 ················pm.MakePersistent( e );
949 ················e.Schlüssel = z0;
950 ················pm.Save();
951 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
952 ················e.Schlüssel = null;
953 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
954 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
955 ················pm.Abort();
956 Assert. That( e. Schlüssel != null, "2. Zertifikat not found" ) ;
957 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
958 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "2. Backlink wrong" ) ;
959 ············}
960 ········}
961
962 ········[Test]
963 ········public void AggrTestRemoveParentSave()
964 ········{
965 using ( var pm = PmFactory. NewPersistenceManager( ) )
966 ············{
967 ················pm.MakePersistent( z0 );
968 ················pm.MakePersistent( e );
969 ················e.Schlüssel = z0;
970 ················pm.Save();
971 Assert. That( z0. Adresse != null, "1. Email not found" ) ;
972 ················ObjectId aoid = z0.NDOObjectId;
973 ················z0.Adresse = null;
974 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
975 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
976 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
977 ················pm.Save();
978 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
979 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
980 ················ObjectId moid = e.NDOObjectId;
981 ················Assert.That( aoid.IsValid(), "Zertifikat still valid" );
982 ················pm.UnloadCache();
983 e = ( Email) pm. FindObject( moid ) ;
984 Assert. That( e != null, "3. Email not found" ) ;
985 Assert. That( e. Schlüssel == null, "3. Zertifikat should be null" ) ;
986 ············}
987 ········}
988
989 ········[Test]
990 ········public void AggrTestRemoveParentAbort()
991 ········{
992 using ( var pm = PmFactory. NewPersistenceManager( ) )
993 ············{
994 ················pm.MakePersistent( z0 );
995 ················pm.MakePersistent( e );
996 ················e.Schlüssel = z0;
997 ················pm.Save();
998 Assert. That( e. Schlüssel != null, "1. Zertifikat not found" ) ;
999 ················z0.Adresse = null;
1000 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
1001 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
1002 ················pm.Abort();
1003 Assert. That( e. Schlüssel != null, "2. Zertifikat not found" ) ;
1004 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
1005 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "2. Backlink wrong" ) ;
1006 ············}
 
 
 
 
 
 
 
 
 
 
 
1007 ········}
 
1008
 
 
 
 
 
 
 
 
 
1009
1010 ········[Test]
1011 ········public void AggrTestCreateDeleteAllowed()
1012 ········{
1013 using ( var pm = PmFactory. NewPersistenceManager( ) )
1014 ············{
1015 ················pm.MakePersistent( z0 );
1016 ················pm.MakePersistent( e );
1017 ················e.Schlüssel = z0;
1018 ················e.Schlüssel = null;
1019 ················pm.Delete( e );
1020 Assert. That( NDOObjectState. Created == z0. NDOObjectState, "1. Wrong state" ) ;
1021 Assert. That( NDOObjectState. Transient == e. NDOObjectState, "2. Wrong state" ) ;
1022 Assert. That( e. Schlüssel == null, "3. Zertifikat should be null" ) ;
1023 Assert. That( z0. Adresse == null, "4. Email should be null" ) ;
1024 ············}
1025 ········}
1026
1027
1028 ········[Test]
1029 ········public void AggrTestAddRemoveSave()
1030 ········{
1031 using ( var pm = PmFactory. NewPersistenceManager( ) )
1032 ············{
1033 ················pm.MakePersistent( e );
1034 ················pm.MakePersistent( z0 );
1035 ················pm.Save();
1036 ················e.Schlüssel = z0;
1037 ················e.Schlüssel = null;
1038 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
1039 Assert. That( e. Schlüssel == null, "1. Zertifikat should be null" ) ;
1040 Assert. That( z0. Adresse == null, "1. Email should be null" ) ;
1041 ················pm.Save();
1042 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
1043 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
1044 Assert. That( z0. Adresse == null, "3. Email should be null" ) ;
1045 ············}
1046 ········}
1047
1048 ········[Test]
1049 ········public void AggrTestAddRemoveAbort()
1050 ········{
1051 using ( var pm = PmFactory. NewPersistenceManager( ) )
1052 ············{
1053 ················pm.MakePersistent( e );
1054 ················pm.MakePersistent( z0 );
1055 ················pm.Save();
1056 ················e.Schlüssel = z0;
1057 ················e.Schlüssel = null;
1058 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "1. Wrong state" ) ;
1059 ················pm.Abort();
1060 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2. Wrong state" ) ;
1061 Assert. That( e. Schlüssel == null, "2. Zertifikat should be null" ) ;
1062 Assert. That( z0. Adresse == null, "3. Email should be null" ) ;
1063 ············}
1064 ········}
1065
1066
 
1067 ········[Test]
1068 ········public void AggrTestHollow()
1069 ········{
1070 ObjectId oid;
1071 ············using (var pm = PmFactory.NewPersistenceManager())
1072 ············{
1073 ················pm.MakePersistent( z0 );
1074 ················e.Schlüssel = z0;
1075 ················pm.MakePersistent( e );
1076 ················pm.Save();
1077 ················pm.MakeHollow( e ); // setzt e.z auf null
1078
1079 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "1: Email should be hollow" ) ;
1080 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "1: Zertifikat should be persistent" ) ;
1081
1082 ················z0 = e.Schlüssel; // ruft LoadData för e auf. e.svm liegt auf dem Cache und ist Persistent
1083 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "1: Email should be persistent" ) ;
1084 Assert. That( NDOObjectState. Persistent == z0. NDOObjectState, "2: Zertifikat should be persistent" ) ;
1085 oid = e. NDOObjectId;
1086 }
1087 using ( var pm = PmFactory. NewPersistenceManager( ) )
1088 {
1089 e = ( Email) pm. FindObject( oid ) ;
1090 Assert. That( e != null, "Email not found" ) ;
1091 ················Assert.That( NDOObjectState.Hollow == e.NDOObjectState, "2: Email should be hollow" );
1092 ················z0 = e.Schlüssel;
1093 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "2: Email should be persistent" ) ;
1094 Assert. That( z0 != null, "Zertifikat not found" ) ;
1095 Assert. That( NDOObjectState. Hollow == z0. NDOObjectState, "1: Zertifikat should be hollow" ) ;
1096 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "2. Backlink wrong" ) ;
1097 ············}
1098 ········}
1099
1100
1101 ········[Test]
1102 ········public void AggrTestMakeAllHollowDelete()
1103 ········{
1104 using ( var pm = PmFactory. NewPersistenceManager( ) )
1105 ············{
1106 ················pm.MakePersistent( z0 );
1107 ················e.Schlüssel = z0;
1108 ················pm.MakePersistent( e );
1109 ················pm.Save();
1110 ················pm.MakeAllHollow();
1111 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "1: Email should be hollow" ) ;
1112 Assert. That( NDOObjectState. Hollow == z0. NDOObjectState, "1: Zertifikat should be hollow" ) ;
1113 ················Zertifikat zz = e.Schlüssel;··// Das lödt das Objekt, deshalb geht es hier!
1114 ················e.Schlüssel = null;
1115 Assert. That( NDOObjectState. PersistentDirty == e. NDOObjectState, "2: Email should be persistent dirty" ) ;
1116 Assert. That( NDOObjectState. PersistentDirty == z0. NDOObjectState, "2: Zertifikat should be persistent dirty" ) ;
1117 Assert. That( e. Schlüssel == null, "3. Email should have no Zertifikat" ) ;
1118 Assert. That( z0. Adresse == null, "3. Zertifikat should have no Email" ) ;
1119 ················pm.Delete( e );
1120 ············}
1121 ········}
1122
1123 ········[Test]
1124 ········public void AggrTestMakeAllHollow()
1125 ········{
1126 using ( var pm = PmFactory. NewPersistenceManager( ) )
1127 ············{
1128 ················pm.MakePersistent( z0 );
1129 ················e.Schlüssel = z0;
1130 ················pm.MakePersistent( e );
1131 ················pm.Save();
1132 ················pm.MakeAllHollow();
1133 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "1: Email should be hollow" ) ;
1134 Assert. That( NDOObjectState. Hollow == z0. NDOObjectState, "1: Zertifikat should be hollow" ) ;
1135 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "2. Backlink wrong" ) ;
1136 ············}
1137 ········}
1138
1139 ········[Test]
1140 ········public void AggrTestMakeAllHollowUnsaved()
1141 ········{
1142 using ( var pm = PmFactory. NewPersistenceManager( ) )
1143 ············{
1144 ················pm.MakePersistent( z0 );
1145 ················e.Schlüssel = z0;
1146 ················pm.MakePersistent( e );
1147 ················pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
1148 Assert. That( NDOObjectState. Created == e. NDOObjectState, "1: Email should be created" ) ;
1149 Assert. That( NDOObjectState. Created == z0. NDOObjectState, "1: Zertifikat should be created" ) ;
1150 ············}
1151 ········}
1152
1153
1154 ········[Test]
1155 ········public void AggrTestExtentRelatedObjects()
1156 ········{
1157 using ( var pm = PmFactory. NewPersistenceManager( ) )
1158 ············{
1159 ················pm.MakePersistent( z0 );
1160 ················e.Schlüssel = z0;
1161 ················pm.MakePersistent( e );
1162 ················pm.Save();
1163 ················IList liste = pm.GetClassExtent( typeof( Email ) );
1164 e = ( Email) liste[0];
1165 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "1: Email should be persistent" ) ;
1166 Assert. That( e. Schlüssel != null, "2. Relation is missing" ) ;
1167 Assert. That( NDOObjectState. Persistent == e. Schlüssel. NDOObjectState, "2. : Zertifikat should be hollow" ) ;
1168 Assert. That( Object. ReferenceEquals( e, z0. Adresse ) , "2. Backlink wrong" ) ;
1169
1170 ················pm.UnloadCache();
1171 ················liste = pm.GetClassExtent( typeof( Email ) );
1172 e = ( Email) liste[0];
1173 Assert. That( NDOObjectState. Hollow == e. NDOObjectState, "5: Email should be hollow" ) ;
1174 Assert. That( e. Schlüssel != null, "6. Relation is missing" ) ;
1175 Assert. That( NDOObjectState. Hollow == e. Schlüssel. NDOObjectState, "8. : Zertifikat should be hollow" ) ;
1176 ················Assert.That( e != z0.Adresse, "8a. Should be different objects" );
1177 Assert. That( Object. ReferenceEquals( e, e. Schlüssel. Adresse ) , "8b. Email should match" ) ;
1178
1179 ················pm.UnloadCache();
1180 ················liste = pm.GetClassExtent( typeof( Email ), false );
1181 e = ( Email) liste[0];
1182 Assert. That( NDOObjectState. Persistent == e. NDOObjectState, "9: Email should be persistent" ) ;
1183 Assert. That( e. Schlüssel != null, "10. Relation is missing" ) ;
1184 Assert. That( NDOObjectState. Hollow == e. Schlüssel. NDOObjectState, "12. : Zertifikat should be hollow" ) ;
1185 ················Assert.That( e != z0.Adresse, "12a. Should be different objects" );
1186 Assert. That( Object. ReferenceEquals( e, e. Schlüssel. Adresse ) , "12b. Email should match" ) ;
1187 ············}
1188 ········}
1189
1190 ········[Test]
1191 ········public void BiTest()
1192 ········{
1193 ············using (var pm = PmFactory.NewPersistenceManager())
1194 ············{
 
1195 ················pm.MakePersistent( e );
1196 ················pm.MakePersistent( z0 );
1197 ················//············System.Diagnostics.Debug.WriteLine("e:" + e.NDOObjectId.ExpressionString);
1198 ················//············System.Diagnostics.Debug.WriteLine("z:" + z.NDOObjectId.ExpressionString);
1199 ················e.Schlüssel = this.z0;
1200 ················pm.Save();
1201 ················//············System.Diagnostics.Debug.WriteLine("e:" + e.NDOObjectId.ExpressionString);
1202 ················//············System.Diagnostics.Debug.WriteLine("z:" + z.NDOObjectId.ExpressionString);
1203
1204 ············}
1205 ········}
1206
 
1207 ········#endregion
 
 
 
 
 
 
 
1208
1209 ········private Mitarbeiter CreateMitarbeiter( string vorname, string nachname )
1210 ········{
1211 ············Mitarbeiter m = new Mitarbeiter();
1212 ············m.Vorname = vorname;
1213 ············m.Nachname = nachname;
1214 ············return m;
1215 ········}
1216 ····}
1217 }
1218