Datei: IntegrationTests/IntegrationTests/Rel1to1Directed.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 NDO;
29 using NDO.Query;
30 using NDO.Linq;
31
32 namespace NdoUnitTests
33 {
34 ····/// <summary>
35 ····/// All tests for directed 1:1-Relations. Composition and Assoziation
36 ····/// </summary>
37
38
39 ····[TestFixture]
40 ····public class Rel1to1Directed : NDOTest
41 ····{
42 ········public Rel1to1Directed()
43 ········{
44 ········}
45
46 ········private PersistenceManager pm;
47 ········private Mitarbeiter m;
48 ········private Adresse a;
49 ········private Buero b;
50
51 ········[SetUp]
52 ········public void Setup()
53 ········{
54 ············pm = PmFactory.NewPersistenceManager();
55 ············m = CreateMitarbeiter( "Mirko", "Matytschak" );
56 ············a = CreateAdresse( "D", "83646", "Nockhergasse 7", "Bad Tölz" );
57 ············b = CreateBuero( "3-0815" );
58 ········}
59
60 ········[TearDown]
61 ········public void TearDown()
62 ········{
63
64 ············pm.Abort();
65 ············IList mitarbeiterListe = pm.GetClassExtent( typeof( Mitarbeiter ), true );
66 ············pm.Delete( mitarbeiterListe );
67 ············IList bueroListe = pm.GetClassExtent( typeof( Buero ), true );
68 ············pm.Delete( bueroListe );
69 ············IList adressListe = pm.GetClassExtent( typeof( Adresse ), true );
70 ············pm.Delete( adressListe );
71 ············pm.Save();
 
72
73 pm. Close( ) ;
74 pm = null;
 
 
75 ········}
76
77
78 ········[Test]
79 ········public void TestCreateObjects()
80 ········{
81 ············pm.MakePersistent( m );
82 ············pm.MakePersistent( a );
83 ············pm.MakePersistent( b );
84 ············if (!pm.HasOwnerCreatedIds)
85 ············{
86 ················if (m.NDOObjectId.Id[0] is Int32)
87 ····················Assert.That(-1 == (int) m.NDOObjectId.Id[0], "Mitarbeiter key wrong" );
88 ················if (a.NDOObjectId.Id[0] is Int32)
89 ····················Assert.That(-1 == (int) a.NDOObjectId.Id[0], "Adresse key wrong" );
90 ················if (b.NDOObjectId.Id[0] is Int32)
91 ····················Assert.That(-1 == (int) b.NDOObjectId.Id[0], "Büro key wrong" );
92 ············}
93 ············Assert.That( !m.NDOObjectId.Equals( a.NDOObjectId ), "Ids should be different m-a" );
94 ············Assert.That( !m.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different m-b" );
95 ············Assert.That( !a.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different a-b" );
96 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
97 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
98 ············b = (Buero)pm.FindObject( b.NDOObjectId );
99 ········}
100
101 ········#region Composition Tests
102
103 ········[Test]
104 ········public void CompTestCreateObjectsSave()
105 ········{
106 ············m.Adresse = a;
107 ············pm.MakePersistent( m );
108 ············pm.Save();
109 ············Assert.That( !m.NDOObjectId.Equals( a.NDOObjectId ), "Ids should be different" );
110 ············m = pm.Objects<Mitarbeiter>().Where(e=>e.Oid() == m.NDOObjectId.Id.Value ).SingleOrDefault();
111 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
112 ············Assert.That(m != null, "1. Mitarbeiter not found" );
113 ············Assert.That(a != null, "1. Adresse not found" );
114 ············ObjectId moid = m.NDOObjectId;
115 ············ObjectId aoid = a.NDOObjectId;
116 ············m = null;
117 ············a = null;
118
119 ············pm.UnloadCache();
120 ············m = pm.Objects<Mitarbeiter>().Where( e=>e.NDOObjectId == moid ).SingleOrDefault();
121 ············Adresse a2 = m.Adresse;
122 ············a = pm.Objects<Adresse>().Where( x=>x.NDOObjectId == aoid ).SingleOrDefault();
123 ············Assert.That(m != null, "2. Mitarbeiter not found" );
124 ············Assert.That(a != null, "2. Adresse not found" );
125 ············Assert.That(Object.ReferenceEquals(a, a2), "Address should match" );
126 ········}
127
128 ········[Test]
129 ········public void CompTestAddObjectSave()
130 ········{
131 ············pm.MakePersistent( m );
132 ············pm.Save();
133 ············m.Adresse = a;
134 ············Assert.That(NDOObjectState.Created ==··a.NDOObjectState, "1. Wrong state" );
135 ············pm.Save();
136 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
137 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
138 ············Assert.That(m != null, "1. Mitarbeiter not found" );
139 ············Assert.That(a != null, "1. Adresse not found" );
140 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2. Wrong state" );
141 ········}
142
143 ········[Test]
144 ········public void CompTestAddObjectAbort()
145 ········{
146 ············pm.MakePersistent( m );
147 ············pm.Save();
148 ············m.Adresse = a;
149 ············Assert.That(NDOObjectState.Created ==··a.NDOObjectState, "1. Wrong state" );
150 ············Assert.That(m.Adresse != null, "1. Adress not found" );
151 ············pm.Abort();
152 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
153 ············Assert.That(m.Adresse == null, "1. Adress should be null" );
154 ········}
155
156 ········[Test]
157 ········public void CompTestRemoveObjectSave()
158 ········{
159 ············pm.MakePersistent( m );
160 ············m.Adresse = a;
161 ············pm.Save();
162 ············Assert.That(m.Adresse != null, "1. Adress not found" );
163 ············m.Adresse = null;
164 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "1. Wrong state" );
165 ············Assert.That(m.Adresse == null, "1. Adress should be null" );
166 ············pm.Save();
167 ············Assert.That(m.Adresse == null, "2. Adress should be null" );
168 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
169 ············ObjectId moid = m.NDOObjectId;
170 ············pm.UnloadCache();
171 ············m = (Mitarbeiter)pm.FindObject( moid );
172 ············Assert.That(m != null, "3. Mitarbeiter not found" );
173 ············Assert.That(m.Adresse == null, "3. Adresse should be null" );
174 ········}
175
176 ········[Test]
177 ········public void CompTestRemoveObjectAbort()
178 ········{
179 ············pm.MakePersistent( m );
180 ············m.Adresse = a;
181 ············pm.Save();
182 ············Assert.That(m.Adresse != null, "1. Adress not found" );
183 ············m.Adresse = null;
184 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "1. Wrong state" );
185 ············Assert.That(m.Adresse == null, "2. Adress should be null" );
186 ············pm.Abort();
187 ············Assert.That(m.Adresse != null, "2. Adress not found" );
188 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2. Wrong state" );
189 ········}
190
191 ········[Test]
192 ········public void CompTestDeleteSave()
193 ········{
194 ············pm.MakePersistent( m );
195 ············m.Adresse = a;
196 ············pm.Save();
197 ············pm.Delete( m );
198 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
199 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "2. Wrong state" );
200 ············pm.Save();
201 ············Assert.That(NDOObjectState.Transient ==··m.NDOObjectState, "1. Wrong state" );
202 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
203 ········}
204
205
206
207 ········[Test]
208 ········public void CompTestDeleteAbort()
209 ········{
210 ············pm.MakePersistent( m );
211 ············m.Adresse = a;
212 ············pm.Save();
213 ············pm.Delete( m );
214 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
215 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "2. Wrong state" );
216 ············pm.Abort();
217 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1. Wrong state" );
218 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2. Wrong state" );
219 ········}
220
221 ········[Test]
222 ········public void CompTestAddRemoveSave()
223 ········{
224 ············pm.MakePersistent( m );
225 ············pm.Save();
226 ············m.Adresse = a;
227 ············m.Adresse = null;
228 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "1. Wrong state" );
229 ············pm.Save();
230 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
231 ········}
232
233 ········[Test]
234 ········public void CompTestAddRemoveAbort()
235 ········{
236 ············pm.MakePersistent( m );
237 ············pm.Save();
238 ············m.Adresse = a;
239 ············m.Adresse = null;
240 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "1. Wrong state" );
241 ············pm.Abort();
242 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
243 ········}
244
245
246
247 ········[Test]
248 ········public void CompTestHollow()
249 ········{
250 ············m.Adresse = a;
251 ············pm.MakePersistent( m );
252 ············pm.Save();
253 ············pm.MakeHollow( m ); // setzt m.adresse auf null
254
255 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
256 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "1: Adresse should be persistent" );
257
258 ············a = m.Adresse; // ruft LoadData för m auf. m.adresse liegt auf dem Cache und ist Persistent
259 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
260 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2: Adresse should be persistent" );
261 ············ObjectId id = m.NDOObjectId;
262 ············pm.Close();
263 ············pm = PmFactory.NewPersistenceManager();
264 ············m = (Mitarbeiter)pm.FindObject( id );
265 ············Assert.That(m != null, "Mitarbeiter not found" );
266 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "2: Mitarbeiter should be hollow" );
267 ············a = m.Adresse;
268 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "2: Mitarbeiter should be persistent" );
269 ············Assert.That(a != null, "Adress not found" );
270 ············Assert.That(NDOObjectState.Hollow ==··a.NDOObjectState, "1: Adresse should be hollow" );
271 ········}
272
273
274 ········[Test]
275 ········public void CompTestMakeAllHollow()
276 ········{
277 ············m.Adresse = a;
278 ············pm.MakePersistent( m );
279 ············pm.Save();
280 ············pm.MakeAllHollow();
281 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
282 ············Assert.That(NDOObjectState.Hollow ==··a.NDOObjectState, "1: Adresse should be hollow" );
283 ········}
284
285 ········[Test]
286 ········public void CompTestMakeAllHollowUnsaved()
287 ········{
288 ············m.Adresse = a;
289 ············pm.MakePersistent( m );
290 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
291 ············Assert.That(NDOObjectState.Created ==··m.NDOObjectState, "1: Mitarbeiter should be created" );
292 ············Assert.That(NDOObjectState.Created ==··a.NDOObjectState, "1: Adresse should be created" );
293 ········}
294
295
296 ········[Test]
297 ········public void CompTestExtentRelatedObjects()
298 ········{
299 ············m.Adresse = a;
300 ············pm.MakePersistent( m );
301 ············pm.Save();
302 ············IList liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
303 ············m = (Mitarbeiter)liste[0];
304 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
305 ············Assert.That(m.Adresse != null, "2. Relation is missing" );
306 ············Assert.That(NDOObjectState.Persistent ==··m.Adresse.NDOObjectState, "4.: Adresse should be hollow" );
307
308 ············pm.UnloadCache();
309 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
310 ············m = (Mitarbeiter)liste[0];
311 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "5: Mitarbeiter should be hollow" );
312 ············Assert.That(m.Adresse != null, "6. Relation is missing" );
313 ············Assert.That(NDOObjectState.Hollow ==··m.Adresse.NDOObjectState, "8.: Adresse should be hollow" );
314
315 ············pm.UnloadCache();
316 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ), false );
317 ············m = (Mitarbeiter)liste[0];
318 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "9: Mitarbeiter should be persistent" );
319 ············Assert.That(m.Adresse != null, "10. Relation is missing" );
320 ············Assert.That(NDOObjectState.Hollow ==··m.Adresse.NDOObjectState, "12.: Adresse should be hollow" );
321 ········}
322
323 ········#endregion
324
325 ········#region Assoziation Tests
326
327 ········[Test]
328 ········public void AssoTestCreateObjectsTransient()
329 ········{
330 ············m.Zimmer = b;
331 ············var thrown = false;
332 ············try
333 ············{
334 ················pm.MakePersistent( m );
335 ············}
336 ············catch (NDOException)
337 ············{
338 ················thrown = true;
339 ············}
340 ············Assert.That(true ==··thrown );
341 ········}
342
343 ········[Test]
344 ········public void AssoTestCreateObjectsTransient2()
345 ········{
346 ············pm.MakePersistent( m );
347 ············var thrown = false;
348 ············try
349 ············{
350 ················m.Zimmer = b;
351 ············}
352 ············catch (NDOException)
353 ············{
354 ················thrown = true;
355 ············}
356 ············Assert.That(true ==··thrown );
357 ········}
358
359 ········[Test]
360 ········public void AssoTestCreateObjectsSave()
361 ········{
362 ············pm.MakePersistent( b );
363 ············m.Zimmer = b;
364 ············pm.MakePersistent( m );
365 ············pm.Save();
366 ············Assert.That( !m.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different" );
367 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
368 ············b = (Buero)pm.FindObject( b.NDOObjectId );
369 ············Assert.That(m != null, "1. Mitarbeiter not found" );
370 ············Assert.That(b != null, "1. Büro not found" );
371 ············ObjectId moid = m.NDOObjectId;
372 ············ObjectId boid = b.NDOObjectId;
373 ············m = null;
374 ············b = null;
375
376 ············pm.UnloadCache();
377 ············m = (Mitarbeiter)pm.FindObject( moid );
378 ············Buero b2 = m.Zimmer;
379 ············b = (Buero)pm.FindObject( boid );
380 ············Assert.That(m != null, "2. Mitarbeiter not found" );
381 ············Assert.That(b != null, "2. Adresse not found" );
382 ············Assert.That(Object.ReferenceEquals(b, b2), "Büro should match" );
383 ········}
384
385 ········[Test]
386 ········public void AssoTestCreateObjectsSave2()
387 ········{
388 ············pm.MakePersistent( b );
389 ············pm.Save();
390 ············m.Zimmer = b;
391 ············pm.MakePersistent( m );
392 ············pm.Save();
393 ············Assert.That( !m.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different" );
394 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
395 ············b = (Buero)pm.FindObject( b.NDOObjectId );
396 ········}
397
398 ········[Test]
399 ········public void AssoTestAddObjectSave()
400 ········{
401 ············pm.MakePersistent( b );
402 ············pm.MakePersistent( m );
403 ············pm.Save();
404 ············m.Zimmer = b;
405 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
406 ············Assert.That(NDOObjectState.PersistentDirty ==··m.NDOObjectState, "2. Wrong state" );
407 ············pm.Save();
408 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
409 ············b = (Buero)pm.FindObject( b.NDOObjectId );
410 ············Assert.That(m != null, "1. Mitarbeiter not found" );
411 ············Assert.That(b != null, "1. Büro not found" );
412 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "2. Wrong state" );
413 ········}
414
415
416
417 ········[Test]
418 ········public void AssoTestAggregateFunction()
419 ········{
420 ············pm.MakePersistent( b );
421 ············pm.MakePersistent( m );
422 ············m.Zimmer = b;
423 ············pm.Save();
424 ············ObjectId oid = b.NDOObjectId;
425 ············pm.UnloadCache();
426 ············NDOQuery<Mitarbeiter> q = new NDOQuery<Mitarbeiter>( pm, "meinBuero.oid" + " = " + "{0}" );
427 ············q.Parameters.Add( oid.Id[0] );
428 ············decimal count = (decimal)q.ExecuteAggregate( m => m.Nachname, AggregateType.Count );
429 ············Assert.That( count > 0m, "Count should be > 0" );
430 ············m.Zimmer = null;
431 ············pm.Save();
432 ············pm.UnloadCache();
433 ············count = (decimal)q.ExecuteAggregate( m => m.Nachname, AggregateType.Count );
434 ············Assert.That(0m ==··count, "Count should be 0" );
435 ········}
436
437 ········[Test]
438 ········public void AssoTestAddObjectAbort()
439 ········{
440 ············pm.MakePersistent( b );
441 ············pm.MakePersistent( m );
442 ············pm.Save();
443 ············m.Zimmer = b;
444 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
445 ············Assert.That(m.Zimmer != null, "1. Büro not found" );
446 ············pm.Abort();
447 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
448 ············Assert.That(m.Zimmer == null, "1. Büro should be null" );
449 ········}
450
451 ········[Test]
452 ········public void AssoTestRemoveObjectSave()
453 ········{
454 ············pm.MakePersistent( b );
455 ············pm.MakePersistent( m );
456 ············m.Zimmer = b;
457 ············pm.Save();
458 ············Assert.That(m.Zimmer != null, "1. Büro not found" );
459 ············m.Zimmer = null;
460 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
461 ············Assert.That(m.Zimmer == null, "1. Büro should be null" );
462 ············pm.Save();
463 ············Assert.That(m.Zimmer == null, "2. Büro should be null" );
464 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
465 ············ObjectId moid = m.NDOObjectId;
466 ············ObjectId boid = b.NDOObjectId;
467 ············pm.UnloadCache();
468 ············m = (Mitarbeiter)pm.FindObject( moid );
469 ············Assert.That(m != null, "3. Mitarbeiter not found" );
470 ············Assert.That(m.Zimmer == null, "3. Büro should be null" );
471 ············b = (Buero)pm.FindObject( boid );
472 ············Assert.That(b != null, "3. Buero not found" );
473 ········}
474
475 ········[Test]
476 ········public void AssoTestRemoveObjectAbort()
477 ········{
478 ············pm.MakePersistent( b );
479 ············pm.MakePersistent( m );
480 ············m.Zimmer = b;
481 ············pm.Save();
482 ············Assert.That(m.Zimmer != null, "1. Büro not found" );
483 ············m.Zimmer = null;
484 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
485 ············Assert.That(m.Zimmer == null, "2. Büro should be null" );
486 ············pm.Abort();
487 ············Assert.That(m.Zimmer != null, "2. Büro not found" );
488 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
489 ········}
490
491 ········[Test]
492 ········public void AssoTestDeleteSave()
493 ········{
494 ············pm.MakePersistent( b );
495 ············pm.MakePersistent( m );
496 ············m.Zimmer = b;
497 ············pm.Save();
498 ············pm.Delete( m );
499 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
500 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
501 ············pm.Save();
502 ············Assert.That(NDOObjectState.Transient ==··m.NDOObjectState, "1. Wrong state" );
503 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
504 ········}
505
506
507
508 ········[Test]
509 ········public void AssoTestDeleteAbort()
510 ········{
511 ············pm.MakePersistent( b );
512 ············pm.MakePersistent( m );
513 ············m.Zimmer = b;
514 ············pm.Save();
515 ············pm.Delete( m );
516 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
517 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
518 ············pm.Abort();
519 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1. Wrong state" );
520 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
521 ········}
522
523 ········[Test]
524 ········public void AssoTestAddRemoveSave()
525 ········{
526 ············pm.MakePersistent( b );
527 ············pm.MakePersistent( m );
528 ············pm.Save();
529 ············m.Zimmer = b;
530 ············m.Zimmer = null;
531 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
532 ············pm.Save();
533 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
534 ········}
535
536 ········[Test]
537 ········public void AssoTestAddRemoveAbort()
538 ········{
539 ············pm.MakePersistent( b );
540 ············pm.MakePersistent( m );
541 ············pm.Save();
542 ············m.Zimmer = b;
543 ············m.Zimmer = null;
544 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
545 ············pm.Abort();
546 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
547 ········}
548
549
550
551 ········[Test]
552 ········public void AssoTestHollow()
553 ········{
554 ············pm.MakePersistent( b );
555 ············m.Zimmer = b;
556 ············pm.MakePersistent( m );
557 ············pm.Save();
558 ············pm.MakeHollow( m ); // setzt m.Zimmer auf null
559
560 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
561 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1: Büro should be persistent" );
562
563 ············b = m.Zimmer; // ruft LoadData för m auf. m.Zimmer liegt im Cache und ist Persistent
564 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
565 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2: Adresse should be persistent" );
566 ············ObjectId id = m.NDOObjectId;
567 ············pm.Close();
568 ············pm = PmFactory.NewPersistenceManager();
569 ············m = (Mitarbeiter)pm.FindObject( id );
570 ············Assert.That(m != null, "Mitarbeiter not found" );
571 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "2: Mitarbeiter should be hollow" );
572 ············b = m.Zimmer;
573 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "2: Mitarbeiter should be persistent" );
574 ············Assert.That(b != null, "Büro not found" );
575 ············Assert.That(NDOObjectState.Hollow ==··b.NDOObjectState, "1: Büro should be hollow" );
576 ········}
577
578
579 ········[Test]
580 ········public void AssoTestMakeAllHollow()
581 ········{
582 ············pm.MakePersistent( b );
583 ············m.Zimmer = b;
584 ············pm.MakePersistent( m );
585 ············pm.Save();
586 ············pm.MakeAllHollow();
587 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
588 ············Assert.That(NDOObjectState.Hollow ==··b.NDOObjectState, "1: Büro should be hollow" );
589 ········}
590
591 ········[Test]
592 ········public void AssoTestMakeAllHollowUnsaved()
593 ········{
594 ············pm.MakePersistent( b );
595 ············m.Zimmer = b;
596 ············pm.MakePersistent( m );
597 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
598 ············Assert.That(NDOObjectState.Created ==··m.NDOObjectState, "1: Mitarbeiter should be created" );
599 ············Assert.That(NDOObjectState.Created ==··b.NDOObjectState, "1: Büro should be created" );
600 ········}
601
602 ········[Test]
603 ········public void AssoTestMakeAllHollowUnsaved2()
604 ········{
605 ············pm.MakePersistent( b );
606 ············pm.Save();
607 ············m.Zimmer = b;
608 ············pm.MakePersistent( m );
609 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
610 ············Assert.That(NDOObjectState.Created ==··m.NDOObjectState, "1: Mitarbeiter should be created" );
611 ············Assert.That(NDOObjectState.Hollow ==··b.NDOObjectState, "1: Büro should be hollow" );
612 ········}
613
614 ········[Test]
615 ········public void AssoTestExtentRelatedObjects()
616 ········{
617 ············pm.MakePersistent( b );
618 ············m.Zimmer = b;
619 ············pm.MakePersistent( m );
620 ············pm.Save();
621 ············IList liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
622 ············m = (Mitarbeiter)liste[0];
623 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
624 ············Assert.That(m.Zimmer != null, "2. Relation is missing" );
625 ············Assert.That(NDOObjectState.Persistent ==··m.Zimmer.NDOObjectState, "4.: Büro should be hollow" );
626
627 ············pm.UnloadCache();
628 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
629 ············m = (Mitarbeiter)liste[0];
630 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "5: Mitarbeiter should be hollow" );
631 ············Assert.That(m.Zimmer != null, "6. Relation is missing" );
632 ············Assert.That(NDOObjectState.Hollow ==··m.Zimmer.NDOObjectState, "8.: Büro should be hollow" );
633
634 ············pm.UnloadCache();
635 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ), false );
636 ············m = (Mitarbeiter)liste[0];
637 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "9: Mitarbeiter should be persistent" );
638 ············Assert.That(m.Zimmer != null, "10. Relation is missing" );
639 ············Assert.That(NDOObjectState.Hollow ==··m.Zimmer.NDOObjectState, "12.: Büro should be hollow" );
640 ········}
641 ········#endregion
642
643 ········#region Combined Tests
644 ········[Test]
645 ········public void CombinedTestCreateObjectsSave()
646 ········{
647 ············pm.MakePersistent( b );
648 ············m.Adresse = a;
649 ············m.Zimmer = b;
650 ············pm.MakePersistent( m );
651 ············pm.Save();
652 ············Assert.That( !m.NDOObjectId.Equals( a.NDOObjectId ), "Ids should be different" );
653 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
654 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
655 ············b = (Buero)pm.FindObject( b.NDOObjectId );
656 ············Assert.That(m != null, "1. Mitarbeiter not found" );
657 ············Assert.That(a != null, "1. Adresse not found" );
658 ············Assert.That(b != null, "1. Büro not found" );
659 ············ObjectId moid = m.NDOObjectId;
660 ············ObjectId aoid = a.NDOObjectId;
661 ············ObjectId boid = b.NDOObjectId;
662 ············m = null;
663 ············a = null;
664 ············b = null;
665
666 ············pm.UnloadCache();
667 ············m = (Mitarbeiter)pm.FindObject( moid );
668 ············Assert.That(m != null, "2. Mitarbeiter not found" );
669 ············Assert.That(m.Adresse != null, "2. Adresse not found" );
670 ············Assert.That(m.Zimmer != null, "2. Büro not found" );
671 ········}
672 ········[Test]
673 ········public void TestForeignKeyConstraint()
674 ········{
675 ············pm.MakePersistent( b );
676 ············pm.Save();
677 ············pm.MakePersistent( m );
678 ············m.Zimmer = b;
679 ············pm.Save();
680 ········}
681
682 ········[Test]
683 ········public void CombinedTestAddAdresse()
684 ········{
685 ············pm.MakePersistent( b );
686 ············m.Zimmer = b;
687 ············pm.MakePersistent( m );
688 ············pm.Save();
689 ············m.Adresse = a;
690 ············pm.Save();
691 ············ObjectId moid = m.NDOObjectId;
692 ············m = null;
693 ············a = null;
694 ············b = null;
695
696 ············pm.UnloadCache();
697 ············m = (Mitarbeiter)pm.FindObject( moid );
698 ············Assert.That(m != null, "2. Mitarbeiter not found" );
699 ············Assert.That(m.Adresse != null, "2. Adresse not found" );
700 ············Assert.That(m.Zimmer != null, "2. Büro not found" );
701 ········}
702
703 ········[Test]
704 ········public void CombinedTestAddAdresseRemoveBüro()
705 ········{
706 ············pm.MakePersistent( b );
707 ············m.Zimmer = b;
708 ············pm.MakePersistent( m );
709 ············pm.Save();
710 ············m.Adresse = a;
711 ············m.Zimmer = null;
712 ············pm.Save();
713 ············ObjectId moid = m.NDOObjectId;
714 ············ObjectId boid = b.NDOObjectId;
715 ············m = null;
716 ············a = null;
717 ············b = null;
718
719 ············pm.UnloadCache();
720 ············m = (Mitarbeiter)pm.FindObject( moid );
721 ············Assert.That(m != null, "Mitarbeiter not found" );
722 ············Assert.That(m.Adresse != null, "Adresse not found" );
723 ············Assert.That(m.Zimmer == null, "Unexpected Büro" );
724 ············b = (Buero)pm.FindObject( boid );
725 ············Assert.That(b != null, "Büro not found" );
726 ········}
727
728 ········[Test]
729 ········public void CombinedTestAddBüroRemoveAdresse()
730 ········{
731 ············pm.MakePersistent( b );
732 ············m.Adresse = a;
733 ············pm.MakePersistent( m );
734 ············pm.Save();
735 ············Adresse adr = a;
736 ············m.Zimmer = b;
737 ············m.Adresse = null;
738 ············pm.Save();
739 ············ObjectId moid = m.NDOObjectId;
740 ············m = null;
741 ············a = null;
742 ············b = null;
743
744 ············pm.UnloadCache();
745 ············m = (Mitarbeiter)pm.FindObject( moid );
746 ············Assert.That(m != null, "Mitarbeiter not found" );
747 ············Assert.That(m.Zimmer != null, "Büro not found" );
748 ············Assert.That(m.Adresse == null, "Unexpected Adresse" );
749 ············Assert.That( adr.NDOObjectState == NDOObjectState.Transient, "Adresse should be deleted" );
750 ········}
751
752 ········[Test]
753 ········public void CombinedTestCreateAddRemoveAdresse()
754 ········{
755 ············pm.MakePersistent( b );
756 ············m.Adresse = a;
757 ············m.Zimmer = b;
758 ············m.Adresse = null;
759 ············pm.MakePersistent( m );
760 ············pm.Save();
761 ············ObjectId moid = m.NDOObjectId;
762 ············m = null;
763 ············a = null;
764 ············b = null;
765
766 ············pm.UnloadCache();
767 ············m = (Mitarbeiter)pm.FindObject( moid );
768 ············Assert.That(m != null, "Mitarbeiter not found" );
769 ············Assert.That(m.Zimmer != null, "Büro not found" );
770 ············Assert.That(m.Adresse == null, "Unexpected Adresse" );
771 ········}
772
773 ········[Test]
774 ········public void CombinedTestCreateAddRemoveBüro()
775 ········{
776 ············pm.MakePersistent( b );
777 ············m.Zimmer = b;
778 ············m.Adresse = a;
779 ············m.Zimmer = null;
780 ············pm.MakePersistent( m );
781 ············pm.Save();
782 ············ObjectId moid = m.NDOObjectId;
783 ············m = null;
784 ············a = null;
785 ············b = null;
786
787 ············pm.UnloadCache();
788 ············m = (Mitarbeiter)pm.FindObject( moid );
789 ············Assert.That(m != null, "Mitarbeiter not found" );
790 ············Assert.That(m.Adresse != null, "Adresse not found" );
791 ············Assert.That(m.Zimmer == null, "Unexpected Büro" );
792 ········}
793
794 ········[Test]
795 ········public void CombinedTestAddRemoveBüro()
796 ········{
797 ············pm.MakePersistent( b );
798 ············m.Adresse = a;
799 ············m.Zimmer = null;
800 ············pm.MakePersistent( m );
801 ············pm.Save();
802 ············m.Zimmer = b;
803 ············m.Zimmer = null;
804 ············pm.Save();
805 ············ObjectId moid = m.NDOObjectId;
806 ············m = null;
807 ············a = null;
808 ············b = null;
809
810 ············pm.UnloadCache();
811 ············m = (Mitarbeiter)pm.FindObject( moid );
812 ············Assert.That(m != null, "Mitarbeiter not found" );
813 ············Assert.That(m.Adresse != null, "Adresse not found" );
814 ············Assert.That(m.Zimmer == null, "Unexpected Büro" );
815 ········}
816
817 ········[Test]
818 ········public void CombinedTestAddBüroRemoveAdresseAbort()
819 ········{
820 ············pm.MakePersistent( b );
821 ············m.Adresse = a;
822 ············pm.MakePersistent( m );
823 ············pm.Save();
824 ············ObjectId aoid = a.NDOObjectId;
825 ············m.Zimmer = b;
826 ············m.Adresse = null;
827 ············pm.Abort();
828 ············Assert.That(m != null, "1. Mitarbeiter not found" );
829 ············Assert.That(m.Adresse != null, "1. Adresse not found" );
830 ············Assert.That(m.Zimmer == null, "1. Unexpected Büro" );
831
832
833 ············ObjectId moid = m.NDOObjectId;
834 ············m = null;
835 ············a = null;
836 ············b = null;
837
838 ············pm.UnloadCache();
839 ············m = (Mitarbeiter)pm.FindObject( moid );
840 ············Assert.That(m != null, "2. Mitarbeiter not found" );
841 ············Assert.That(m.Adresse != null, "2. Adresse not found" );
842 ············Assert.That(m.Zimmer == null, "2. Unexpected Büro" );
843 ········}
844 ········#endregion
845
846 ········private Mitarbeiter CreateMitarbeiter( string vorname, string nachname )
847 ········{
848 ············Mitarbeiter m = new Mitarbeiter();
849 ············m.Vorname = vorname;
850 ············m.Nachname = nachname;
851 ············return m;
852 ········}
853
854 ········private Adresse CreateAdresse( string lkz, string plz, string straße, string ort )
855 ········{
856 ············Adresse a = new Adresse();
857 ············a.Lkz = lkz;
858 ············a.Plz = plz;
859 ············a.Straße = straße;
860 ············a.Ort = ort;
861 ············return a;
862 ········}
863
864 ········private Buero CreateBuero( string zimmer )
865 ········{
866 ············return new Buero( zimmer );
867 ········}
868 ····}
869 }
870
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 NDO;
29 using NDO.Query;
30 using NDO.Linq;
31
32 namespace NdoUnitTests
33 {
34 ····/// <summary>
35 ····/// All tests for directed 1:1-Relations. Composition and Assoziation
36 ····/// </summary>
37
38
39 ····[TestFixture]
40 ····public class Rel1to1Directed : NDOTest
41 ····{
42 ········public Rel1to1Directed()
43 ········{
44 ········}
45
46 ········private PersistenceManager pm;
47 ········private Mitarbeiter m;
48 ········private Adresse a;
49 ········private Buero b;
50
51 ········[SetUp]
52 ········public void Setup()
53 ········{
54 ············pm = PmFactory.NewPersistenceManager();
55 ············m = CreateMitarbeiter( "Mirko", "Matytschak" );
56 ············a = CreateAdresse( "D", "83646", "Nockhergasse 7", "Bad Tölz" );
57 ············b = CreateBuero( "3-0815" );
58 ········}
59
60 ········[TearDown]
61 ········public void TearDown()
62 ········{
 
63 ············pm.Abort();
64 ············IList mitarbeiterListe = pm.GetClassExtent( typeof( Mitarbeiter ), true );
65 ············pm.Delete( mitarbeiterListe );
66 ············IList bueroListe = pm.GetClassExtent( typeof( Buero ), true );
67 ············pm.Delete( bueroListe );
68 ············IList adressListe = pm.GetClassExtent( typeof( Adresse ), true );
69 ············pm.Delete( adressListe );
70 ············pm.Save();
71 ········}
72
73 [OneTimeTearDown]
74 public void OneTimeTearDown( )
75 ········{
76 ············pm.Dispose();
77 ········}
78
79
80 ········[Test]
81 ········public void TestCreateObjects()
82 ········{
83 ············pm.MakePersistent( m );
84 ············pm.MakePersistent( a );
85 ············pm.MakePersistent( b );
86 ············if (!pm.HasOwnerCreatedIds)
87 ············{
88 ················if (m.NDOObjectId.Id[0] is Int32)
89 ····················Assert.That(-1 == (int) m.NDOObjectId.Id[0], "Mitarbeiter key wrong" );
90 ················if (a.NDOObjectId.Id[0] is Int32)
91 ····················Assert.That(-1 == (int) a.NDOObjectId.Id[0], "Adresse key wrong" );
92 ················if (b.NDOObjectId.Id[0] is Int32)
93 ····················Assert.That(-1 == (int) b.NDOObjectId.Id[0], "Büro key wrong" );
94 ············}
95 ············Assert.That( !m.NDOObjectId.Equals( a.NDOObjectId ), "Ids should be different m-a" );
96 ············Assert.That( !m.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different m-b" );
97 ············Assert.That( !a.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different a-b" );
98 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
99 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
100 ············b = (Buero)pm.FindObject( b.NDOObjectId );
101 ········}
102
103 ········#region Composition Tests
104
105 ········[Test]
106 ········public void CompTestCreateObjectsSave()
107 ········{
108 ············m.Adresse = a;
109 ············pm.MakePersistent( m );
110 ············pm.Save();
111 ············Assert.That( !m.NDOObjectId.Equals( a.NDOObjectId ), "Ids should be different" );
112 ············m = pm.Objects<Mitarbeiter>().Where(e=>e.Oid() == m.NDOObjectId.Id.Value ).SingleOrDefault();
113 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
114 ············Assert.That(m != null, "1. Mitarbeiter not found" );
115 ············Assert.That(a != null, "1. Adresse not found" );
116 ············ObjectId moid = m.NDOObjectId;
117 ············ObjectId aoid = a.NDOObjectId;
118 ············m = null;
119 ············a = null;
120
121 ············pm.UnloadCache();
122 ············m = pm.Objects<Mitarbeiter>().Where( e=>e.NDOObjectId == moid ).SingleOrDefault();
123 ············Adresse a2 = m.Adresse;
124 ············a = pm.Objects<Adresse>().Where( x=>x.NDOObjectId == aoid ).SingleOrDefault();
125 ············Assert.That(m != null, "2. Mitarbeiter not found" );
126 ············Assert.That(a != null, "2. Adresse not found" );
127 ············Assert.That(Object.ReferenceEquals(a, a2), "Address should match" );
128 ········}
129
130 ········[Test]
131 ········public void CompTestAddObjectSave()
132 ········{
133 ············pm.MakePersistent( m );
134 ············pm.Save();
135 ············m.Adresse = a;
136 ············Assert.That(NDOObjectState.Created ==··a.NDOObjectState, "1. Wrong state" );
137 ············pm.Save();
138 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
139 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
140 ············Assert.That(m != null, "1. Mitarbeiter not found" );
141 ············Assert.That(a != null, "1. Adresse not found" );
142 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2. Wrong state" );
143 ········}
144
145 ········[Test]
146 ········public void CompTestAddObjectAbort()
147 ········{
148 ············pm.MakePersistent( m );
149 ············pm.Save();
150 ············m.Adresse = a;
151 ············Assert.That(NDOObjectState.Created ==··a.NDOObjectState, "1. Wrong state" );
152 ············Assert.That(m.Adresse != null, "1. Adress not found" );
153 ············pm.Abort();
154 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
155 ············Assert.That(m.Adresse == null, "1. Adress should be null" );
156 ········}
157
158 ········[Test]
159 ········public void CompTestRemoveObjectSave()
160 ········{
161 ············pm.MakePersistent( m );
162 ············m.Adresse = a;
163 ············pm.Save();
164 ············Assert.That(m.Adresse != null, "1. Adress not found" );
165 ············m.Adresse = null;
166 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "1. Wrong state" );
167 ············Assert.That(m.Adresse == null, "1. Adress should be null" );
168 ············pm.Save();
169 ············Assert.That(m.Adresse == null, "2. Adress should be null" );
170 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
171 ············ObjectId moid = m.NDOObjectId;
172 ············pm.UnloadCache();
173 ············m = (Mitarbeiter)pm.FindObject( moid );
174 ············Assert.That(m != null, "3. Mitarbeiter not found" );
175 ············Assert.That(m.Adresse == null, "3. Adresse should be null" );
176 ········}
177
178 ········[Test]
179 ········public void CompTestRemoveObjectAbort()
180 ········{
181 ············pm.MakePersistent( m );
182 ············m.Adresse = a;
183 ············pm.Save();
184 ············Assert.That(m.Adresse != null, "1. Adress not found" );
185 ············m.Adresse = null;
186 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "1. Wrong state" );
187 ············Assert.That(m.Adresse == null, "2. Adress should be null" );
188 ············pm.Abort();
189 ············Assert.That(m.Adresse != null, "2. Adress not found" );
190 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2. Wrong state" );
191 ········}
192
193 ········[Test]
194 ········public void CompTestDeleteSave()
195 ········{
196 ············pm.MakePersistent( m );
197 ············m.Adresse = a;
198 ············pm.Save();
199 ············pm.Delete( m );
200 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
201 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "2. Wrong state" );
202 ············pm.Save();
203 ············Assert.That(NDOObjectState.Transient ==··m.NDOObjectState, "1. Wrong state" );
204 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
205 ········}
206
207
208
209 ········[Test]
210 ········public void CompTestDeleteAbort()
211 ········{
212 ············pm.MakePersistent( m );
213 ············m.Adresse = a;
214 ············pm.Save();
215 ············pm.Delete( m );
216 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
217 ············Assert.That(NDOObjectState.Deleted ==··a.NDOObjectState, "2. Wrong state" );
218 ············pm.Abort();
219 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1. Wrong state" );
220 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2. Wrong state" );
221 ········}
222
223 ········[Test]
224 ········public void CompTestAddRemoveSave()
225 ········{
226 ············pm.MakePersistent( m );
227 ············pm.Save();
228 ············m.Adresse = a;
229 ············m.Adresse = null;
230 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "1. Wrong state" );
231 ············pm.Save();
232 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
233 ········}
234
235 ········[Test]
236 ········public void CompTestAddRemoveAbort()
237 ········{
238 ············pm.MakePersistent( m );
239 ············pm.Save();
240 ············m.Adresse = a;
241 ············m.Adresse = null;
242 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "1. Wrong state" );
243 ············pm.Abort();
244 ············Assert.That(NDOObjectState.Transient ==··a.NDOObjectState, "2. Wrong state" );
245 ········}
246
247
248
249 ········[Test]
250 ········public void CompTestHollow()
251 ········{
252 ············m.Adresse = a;
253 ············pm.MakePersistent( m );
254 ············pm.Save();
255 ············pm.MakeHollow( m ); // setzt m.adresse auf null
256
257 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
258 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "1: Adresse should be persistent" );
259
260 ············a = m.Adresse; // ruft LoadData för m auf. m.adresse liegt auf dem Cache und ist Persistent
261 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
262 ············Assert.That(NDOObjectState.Persistent ==··a.NDOObjectState, "2: Adresse should be persistent" );
263 ············ObjectId id = m.NDOObjectId;
264 ············pm.Close();
265 ············pm = PmFactory.NewPersistenceManager();
266 ············m = (Mitarbeiter)pm.FindObject( id );
267 ············Assert.That(m != null, "Mitarbeiter not found" );
268 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "2: Mitarbeiter should be hollow" );
269 ············a = m.Adresse;
270 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "2: Mitarbeiter should be persistent" );
271 ············Assert.That(a != null, "Adress not found" );
272 ············Assert.That(NDOObjectState.Hollow ==··a.NDOObjectState, "1: Adresse should be hollow" );
273 ········}
274
275
276 ········[Test]
277 ········public void CompTestMakeAllHollow()
278 ········{
279 ············m.Adresse = a;
280 ············pm.MakePersistent( m );
281 ············pm.Save();
282 ············pm.MakeAllHollow();
283 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
284 ············Assert.That(NDOObjectState.Hollow ==··a.NDOObjectState, "1: Adresse should be hollow" );
285 ········}
286
287 ········[Test]
288 ········public void CompTestMakeAllHollowUnsaved()
289 ········{
290 ············m.Adresse = a;
291 ············pm.MakePersistent( m );
292 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
293 ············Assert.That(NDOObjectState.Created ==··m.NDOObjectState, "1: Mitarbeiter should be created" );
294 ············Assert.That(NDOObjectState.Created ==··a.NDOObjectState, "1: Adresse should be created" );
295 ········}
296
297
298 ········[Test]
299 ········public void CompTestExtentRelatedObjects()
300 ········{
301 ············m.Adresse = a;
302 ············pm.MakePersistent( m );
303 ············pm.Save();
304 ············IList liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
305 ············m = (Mitarbeiter)liste[0];
306 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
307 ············Assert.That(m.Adresse != null, "2. Relation is missing" );
308 ············Assert.That(NDOObjectState.Persistent ==··m.Adresse.NDOObjectState, "4.: Adresse should be hollow" );
309
310 ············pm.UnloadCache();
311 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
312 ············m = (Mitarbeiter)liste[0];
313 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "5: Mitarbeiter should be hollow" );
314 ············Assert.That(m.Adresse != null, "6. Relation is missing" );
315 ············Assert.That(NDOObjectState.Hollow ==··m.Adresse.NDOObjectState, "8.: Adresse should be hollow" );
316
317 ············pm.UnloadCache();
318 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ), false );
319 ············m = (Mitarbeiter)liste[0];
320 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "9: Mitarbeiter should be persistent" );
321 ············Assert.That(m.Adresse != null, "10. Relation is missing" );
322 ············Assert.That(NDOObjectState.Hollow ==··m.Adresse.NDOObjectState, "12.: Adresse should be hollow" );
323 ········}
324
325 ········#endregion
326
327 ········#region Assoziation Tests
328
329 ········[Test]
330 ········public void AssoTestCreateObjectsTransient()
331 ········{
332 ············m.Zimmer = b;
333 ············var thrown = false;
334 ············try
335 ············{
336 ················pm.MakePersistent( m );
337 ············}
338 ············catch (NDOException)
339 ············{
340 ················thrown = true;
341 ············}
342 ············Assert.That(true ==··thrown );
343 ········}
344
345 ········[Test]
346 ········public void AssoTestCreateObjectsTransient2()
347 ········{
348 ············pm.MakePersistent( m );
349 ············var thrown = false;
350 ············try
351 ············{
352 ················m.Zimmer = b;
353 ············}
354 ············catch (NDOException)
355 ············{
356 ················thrown = true;
357 ············}
358 ············Assert.That(true ==··thrown );
359 ········}
360
361 ········[Test]
362 ········public void AssoTestCreateObjectsSave()
363 ········{
364 ············pm.MakePersistent( b );
365 ············m.Zimmer = b;
366 ············pm.MakePersistent( m );
367 ············pm.Save();
368 ············Assert.That( !m.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different" );
369 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
370 ············b = (Buero)pm.FindObject( b.NDOObjectId );
371 ············Assert.That(m != null, "1. Mitarbeiter not found" );
372 ············Assert.That(b != null, "1. Büro not found" );
373 ············ObjectId moid = m.NDOObjectId;
374 ············ObjectId boid = b.NDOObjectId;
375 ············m = null;
376 ············b = null;
377
378 ············pm.UnloadCache();
379 ············m = (Mitarbeiter)pm.FindObject( moid );
380 ············Buero b2 = m.Zimmer;
381 ············b = (Buero)pm.FindObject( boid );
382 ············Assert.That(m != null, "2. Mitarbeiter not found" );
383 ············Assert.That(b != null, "2. Adresse not found" );
384 ············Assert.That(Object.ReferenceEquals(b, b2), "Büro should match" );
385 ········}
386
387 ········[Test]
388 ········public void AssoTestCreateObjectsSave2()
389 ········{
390 ············pm.MakePersistent( b );
391 ············pm.Save();
392 ············m.Zimmer = b;
393 ············pm.MakePersistent( m );
394 ············pm.Save();
395 ············Assert.That( !m.NDOObjectId.Equals( b.NDOObjectId ), "Ids should be different" );
396 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
397 ············b = (Buero)pm.FindObject( b.NDOObjectId );
398 ········}
399
400 ········[Test]
401 ········public void AssoTestAddObjectSave()
402 ········{
403 ············pm.MakePersistent( b );
404 ············pm.MakePersistent( m );
405 ············pm.Save();
406 ············m.Zimmer = b;
407 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
408 ············Assert.That(NDOObjectState.PersistentDirty ==··m.NDOObjectState, "2. Wrong state" );
409 ············pm.Save();
410 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
411 ············b = (Buero)pm.FindObject( b.NDOObjectId );
412 ············Assert.That(m != null, "1. Mitarbeiter not found" );
413 ············Assert.That(b != null, "1. Büro not found" );
414 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "2. Wrong state" );
415 ········}
416
417
418
419 ········[Test]
420 ········public void AssoTestAggregateFunction()
421 ········{
422 ············pm.MakePersistent( b );
423 ············pm.MakePersistent( m );
424 ············m.Zimmer = b;
425 ············pm.Save();
426 ············ObjectId oid = b.NDOObjectId;
427 ············pm.UnloadCache();
428 ············NDOQuery<Mitarbeiter> q = new NDOQuery<Mitarbeiter>( pm, "meinBuero.oid" + " = " + "{0}" );
429 ············q.Parameters.Add( oid.Id[0] );
430 ············decimal count = (decimal)q.ExecuteAggregate( m => m.Nachname, AggregateType.Count );
431 ············Assert.That( count > 0m, "Count should be > 0" );
432 ············m.Zimmer = null;
433 ············pm.Save();
434 ············pm.UnloadCache();
435 ············count = (decimal)q.ExecuteAggregate( m => m.Nachname, AggregateType.Count );
436 ············Assert.That(0m ==··count, "Count should be 0" );
437 ········}
438
439 ········[Test]
440 ········public void AssoTestAddObjectAbort()
441 ········{
442 ············pm.MakePersistent( b );
443 ············pm.MakePersistent( m );
444 ············pm.Save();
445 ············m.Zimmer = b;
446 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
447 ············Assert.That(m.Zimmer != null, "1. Büro not found" );
448 ············pm.Abort();
449 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
450 ············Assert.That(m.Zimmer == null, "1. Büro should be null" );
451 ········}
452
453 ········[Test]
454 ········public void AssoTestRemoveObjectSave()
455 ········{
456 ············pm.MakePersistent( b );
457 ············pm.MakePersistent( m );
458 ············m.Zimmer = b;
459 ············pm.Save();
460 ············Assert.That(m.Zimmer != null, "1. Büro not found" );
461 ············m.Zimmer = null;
462 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
463 ············Assert.That(m.Zimmer == null, "1. Büro should be null" );
464 ············pm.Save();
465 ············Assert.That(m.Zimmer == null, "2. Büro should be null" );
466 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
467 ············ObjectId moid = m.NDOObjectId;
468 ············ObjectId boid = b.NDOObjectId;
469 ············pm.UnloadCache();
470 ············m = (Mitarbeiter)pm.FindObject( moid );
471 ············Assert.That(m != null, "3. Mitarbeiter not found" );
472 ············Assert.That(m.Zimmer == null, "3. Büro should be null" );
473 ············b = (Buero)pm.FindObject( boid );
474 ············Assert.That(b != null, "3. Buero not found" );
475 ········}
476
477 ········[Test]
478 ········public void AssoTestRemoveObjectAbort()
479 ········{
480 ············pm.MakePersistent( b );
481 ············pm.MakePersistent( m );
482 ············m.Zimmer = b;
483 ············pm.Save();
484 ············Assert.That(m.Zimmer != null, "1. Büro not found" );
485 ············m.Zimmer = null;
486 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
487 ············Assert.That(m.Zimmer == null, "2. Büro should be null" );
488 ············pm.Abort();
489 ············Assert.That(m.Zimmer != null, "2. Büro not found" );
490 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
491 ········}
492
493 ········[Test]
494 ········public void AssoTestDeleteSave()
495 ········{
496 ············pm.MakePersistent( b );
497 ············pm.MakePersistent( m );
498 ············m.Zimmer = b;
499 ············pm.Save();
500 ············pm.Delete( m );
501 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
502 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
503 ············pm.Save();
504 ············Assert.That(NDOObjectState.Transient ==··m.NDOObjectState, "1. Wrong state" );
505 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
506 ········}
507
508
509
510 ········[Test]
511 ········public void AssoTestDeleteAbort()
512 ········{
513 ············pm.MakePersistent( b );
514 ············pm.MakePersistent( m );
515 ············m.Zimmer = b;
516 ············pm.Save();
517 ············pm.Delete( m );
518 ············Assert.That(NDOObjectState.Deleted ==··m.NDOObjectState, "1. Wrong state" );
519 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
520 ············pm.Abort();
521 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1. Wrong state" );
522 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
523 ········}
524
525 ········[Test]
526 ········public void AssoTestAddRemoveSave()
527 ········{
528 ············pm.MakePersistent( b );
529 ············pm.MakePersistent( m );
530 ············pm.Save();
531 ············m.Zimmer = b;
532 ············m.Zimmer = null;
533 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
534 ············pm.Save();
535 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
536 ········}
537
538 ········[Test]
539 ········public void AssoTestAddRemoveAbort()
540 ········{
541 ············pm.MakePersistent( b );
542 ············pm.MakePersistent( m );
543 ············pm.Save();
544 ············m.Zimmer = b;
545 ············m.Zimmer = null;
546 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1. Wrong state" );
547 ············pm.Abort();
548 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2. Wrong state" );
549 ········}
550
551
552
553 ········[Test]
554 ········public void AssoTestHollow()
555 ········{
556 ············pm.MakePersistent( b );
557 ············m.Zimmer = b;
558 ············pm.MakePersistent( m );
559 ············pm.Save();
560 ············pm.MakeHollow( m ); // setzt m.Zimmer auf null
561
562 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
563 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "1: Büro should be persistent" );
564
565 ············b = m.Zimmer; // ruft LoadData för m auf. m.Zimmer liegt im Cache und ist Persistent
566 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
567 ············Assert.That(NDOObjectState.Persistent ==··b.NDOObjectState, "2: Adresse should be persistent" );
568 ············ObjectId id = m.NDOObjectId;
569 ············pm.Close();
570 ············pm = PmFactory.NewPersistenceManager();
571 ············m = (Mitarbeiter)pm.FindObject( id );
572 ············Assert.That(m != null, "Mitarbeiter not found" );
573 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "2: Mitarbeiter should be hollow" );
574 ············b = m.Zimmer;
575 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "2: Mitarbeiter should be persistent" );
576 ············Assert.That(b != null, "Büro not found" );
577 ············Assert.That(NDOObjectState.Hollow ==··b.NDOObjectState, "1: Büro should be hollow" );
578 ········}
579
580
581 ········[Test]
582 ········public void AssoTestMakeAllHollow()
583 ········{
584 ············pm.MakePersistent( b );
585 ············m.Zimmer = b;
586 ············pm.MakePersistent( m );
587 ············pm.Save();
588 ············pm.MakeAllHollow();
589 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "1: Mitarbeiter should be hollow" );
590 ············Assert.That(NDOObjectState.Hollow ==··b.NDOObjectState, "1: Büro should be hollow" );
591 ········}
592
593 ········[Test]
594 ········public void AssoTestMakeAllHollowUnsaved()
595 ········{
596 ············pm.MakePersistent( b );
597 ············m.Zimmer = b;
598 ············pm.MakePersistent( m );
599 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
600 ············Assert.That(NDOObjectState.Created ==··m.NDOObjectState, "1: Mitarbeiter should be created" );
601 ············Assert.That(NDOObjectState.Created ==··b.NDOObjectState, "1: Büro should be created" );
602 ········}
603
604 ········[Test]
605 ········public void AssoTestMakeAllHollowUnsaved2()
606 ········{
607 ············pm.MakePersistent( b );
608 ············pm.Save();
609 ············m.Zimmer = b;
610 ············pm.MakePersistent( m );
611 ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects
612 ············Assert.That(NDOObjectState.Created ==··m.NDOObjectState, "1: Mitarbeiter should be created" );
613 ············Assert.That(NDOObjectState.Hollow ==··b.NDOObjectState, "1: Büro should be hollow" );
614 ········}
615
616 ········[Test]
617 ········public void AssoTestExtentRelatedObjects()
618 ········{
619 ············pm.MakePersistent( b );
620 ············m.Zimmer = b;
621 ············pm.MakePersistent( m );
622 ············pm.Save();
623 ············IList liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
624 ············m = (Mitarbeiter)liste[0];
625 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "1: Mitarbeiter should be persistent" );
626 ············Assert.That(m.Zimmer != null, "2. Relation is missing" );
627 ············Assert.That(NDOObjectState.Persistent ==··m.Zimmer.NDOObjectState, "4.: Büro should be hollow" );
628
629 ············pm.UnloadCache();
630 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ) );
631 ············m = (Mitarbeiter)liste[0];
632 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState, "5: Mitarbeiter should be hollow" );
633 ············Assert.That(m.Zimmer != null, "6. Relation is missing" );
634 ············Assert.That(NDOObjectState.Hollow ==··m.Zimmer.NDOObjectState, "8.: Büro should be hollow" );
635
636 ············pm.UnloadCache();
637 ············liste = pm.GetClassExtent( typeof( Mitarbeiter ), false );
638 ············m = (Mitarbeiter)liste[0];
639 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState, "9: Mitarbeiter should be persistent" );
640 ············Assert.That(m.Zimmer != null, "10. Relation is missing" );
641 ············Assert.That(NDOObjectState.Hollow ==··m.Zimmer.NDOObjectState, "12.: Büro should be hollow" );
642 ········}
643 ········#endregion
644
645 ········#region Combined Tests
646 ········[Test]
647 ········public void CombinedTestCreateObjectsSave()
648 ········{
649 ············pm.MakePersistent( b );
650 ············m.Adresse = a;
651 ············m.Zimmer = b;
652 ············pm.MakePersistent( m );
653 ············pm.Save();
654 ············Assert.That( !m.NDOObjectId.Equals( a.NDOObjectId ), "Ids should be different" );
655 ············m = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
656 ············a = (Adresse)pm.FindObject( a.NDOObjectId );
657 ············b = (Buero)pm.FindObject( b.NDOObjectId );
658 ············Assert.That(m != null, "1. Mitarbeiter not found" );
659 ············Assert.That(a != null, "1. Adresse not found" );
660 ············Assert.That(b != null, "1. Büro not found" );
661 ············ObjectId moid = m.NDOObjectId;
662 ············ObjectId aoid = a.NDOObjectId;
663 ············ObjectId boid = b.NDOObjectId;
664 ············m = null;
665 ············a = null;
666 ············b = null;
667
668 ············pm.UnloadCache();
669 ············m = (Mitarbeiter)pm.FindObject( moid );
670 ············Assert.That(m != null, "2. Mitarbeiter not found" );
671 ············Assert.That(m.Adresse != null, "2. Adresse not found" );
672 ············Assert.That(m.Zimmer != null, "2. Büro not found" );
673 ········}
674 ········[Test]
675 ········public void TestForeignKeyConstraint()
676 ········{
677 ············pm.MakePersistent( b );
678 ············pm.Save();
679 ············pm.MakePersistent( m );
680 ············m.Zimmer = b;
681 ············pm.Save();
682 ········}
683
684 ········[Test]
685 ········public void CombinedTestAddAdresse()
686 ········{
687 ············pm.MakePersistent( b );
688 ············m.Zimmer = b;
689 ············pm.MakePersistent( m );
690 ············pm.Save();
691 ············m.Adresse = a;
692 ············pm.Save();
693 ············ObjectId moid = m.NDOObjectId;
694 ············m = null;
695 ············a = null;
696 ············b = null;
697
698 ············pm.UnloadCache();
699 ············m = (Mitarbeiter)pm.FindObject( moid );
700 ············Assert.That(m != null, "2. Mitarbeiter not found" );
701 ············Assert.That(m.Adresse != null, "2. Adresse not found" );
702 ············Assert.That(m.Zimmer != null, "2. Büro not found" );
703 ········}
704
705 ········[Test]
706 ········public void CombinedTestAddAdresseRemoveBüro()
707 ········{
708 ············pm.MakePersistent( b );
709 ············m.Zimmer = b;
710 ············pm.MakePersistent( m );
711 ············pm.Save();
712 ············m.Adresse = a;
713 ············m.Zimmer = null;
714 ············pm.Save();
715 ············ObjectId moid = m.NDOObjectId;
716 ············ObjectId boid = b.NDOObjectId;
717 ············m = null;
718 ············a = null;
719 ············b = null;
720
721 ············pm.UnloadCache();
722 ············m = (Mitarbeiter)pm.FindObject( moid );
723 ············Assert.That(m != null, "Mitarbeiter not found" );
724 ············Assert.That(m.Adresse != null, "Adresse not found" );
725 ············Assert.That(m.Zimmer == null, "Unexpected Büro" );
726 ············b = (Buero)pm.FindObject( boid );
727 ············Assert.That(b != null, "Büro not found" );
728 ········}
729
730 ········[Test]
731 ········public void CombinedTestAddBüroRemoveAdresse()
732 ········{
733 ············pm.MakePersistent( b );
734 ············m.Adresse = a;
735 ············pm.MakePersistent( m );
736 ············pm.Save();
737 ············Adresse adr = a;
738 ············m.Zimmer = b;
739 ············m.Adresse = null;
740 ············pm.Save();
741 ············ObjectId moid = m.NDOObjectId;
742 ············m = null;
743 ············a = null;
744 ············b = null;
745
746 ············pm.UnloadCache();
747 ············m = (Mitarbeiter)pm.FindObject( moid );
748 ············Assert.That(m != null, "Mitarbeiter not found" );
749 ············Assert.That(m.Zimmer != null, "Büro not found" );
750 ············Assert.That(m.Adresse == null, "Unexpected Adresse" );
751 ············Assert.That( adr.NDOObjectState == NDOObjectState.Transient, "Adresse should be deleted" );
752 ········}
753
754 ········[Test]
755 ········public void CombinedTestCreateAddRemoveAdresse()
756 ········{
757 ············pm.MakePersistent( b );
758 ············m.Adresse = a;
759 ············m.Zimmer = b;
760 ············m.Adresse = null;
761 ············pm.MakePersistent( m );
762 ············pm.Save();
763 ············ObjectId moid = m.NDOObjectId;
764 ············m = null;
765 ············a = null;
766 ············b = null;
767
768 ············pm.UnloadCache();
769 ············m = (Mitarbeiter)pm.FindObject( moid );
770 ············Assert.That(m != null, "Mitarbeiter not found" );
771 ············Assert.That(m.Zimmer != null, "Büro not found" );
772 ············Assert.That(m.Adresse == null, "Unexpected Adresse" );
773 ········}
774
775 ········[Test]
776 ········public void CombinedTestCreateAddRemoveBüro()
777 ········{
778 ············pm.MakePersistent( b );
779 ············m.Zimmer = b;
780 ············m.Adresse = a;
781 ············m.Zimmer = null;
782 ············pm.MakePersistent( m );
783 ············pm.Save();
784 ············ObjectId moid = m.NDOObjectId;
785 ············m = null;
786 ············a = null;
787 ············b = null;
788
789 ············pm.UnloadCache();
790 ············m = (Mitarbeiter)pm.FindObject( moid );
791 ············Assert.That(m != null, "Mitarbeiter not found" );
792 ············Assert.That(m.Adresse != null, "Adresse not found" );
793 ············Assert.That(m.Zimmer == null, "Unexpected Büro" );
794 ········}
795
796 ········[Test]
797 ········public void CombinedTestAddRemoveBüro()
798 ········{
799 ············pm.MakePersistent( b );
800 ············m.Adresse = a;
801 ············m.Zimmer = null;
802 ············pm.MakePersistent( m );
803 ············pm.Save();
804 ············m.Zimmer = b;
805 ············m.Zimmer = null;
806 ············pm.Save();
807 ············ObjectId moid = m.NDOObjectId;
808 ············m = null;
809 ············a = null;
810 ············b = null;
811
812 ············pm.UnloadCache();
813 ············m = (Mitarbeiter)pm.FindObject( moid );
814 ············Assert.That(m != null, "Mitarbeiter not found" );
815 ············Assert.That(m.Adresse != null, "Adresse not found" );
816 ············Assert.That(m.Zimmer == null, "Unexpected Büro" );
817 ········}
818
819 ········[Test]
820 ········public void CombinedTestAddBüroRemoveAdresseAbort()
821 ········{
822 ············pm.MakePersistent( b );
823 ············m.Adresse = a;
824 ············pm.MakePersistent( m );
825 ············pm.Save();
826 ············ObjectId aoid = a.NDOObjectId;
827 ············m.Zimmer = b;
828 ············m.Adresse = null;
829 ············pm.Abort();
830 ············Assert.That(m != null, "1. Mitarbeiter not found" );
831 ············Assert.That(m.Adresse != null, "1. Adresse not found" );
832 ············Assert.That(m.Zimmer == null, "1. Unexpected Büro" );
833
834
835 ············ObjectId moid = m.NDOObjectId;
836 ············m = null;
837 ············a = null;
838 ············b = null;
839
840 ············pm.UnloadCache();
841 ············m = (Mitarbeiter)pm.FindObject( moid );
842 ············Assert.That(m != null, "2. Mitarbeiter not found" );
843 ············Assert.That(m.Adresse != null, "2. Adresse not found" );
844 ············Assert.That(m.Zimmer == null, "2. Unexpected Büro" );
845 ········}
846 ········#endregion
847
848 ········private Mitarbeiter CreateMitarbeiter( string vorname, string nachname )
849 ········{
850 ············Mitarbeiter m = new Mitarbeiter();
851 ············m.Vorname = vorname;
852 ············m.Nachname = nachname;
853 ············return m;
854 ········}
855
856 ········private Adresse CreateAdresse( string lkz, string plz, string straße, string ort )
857 ········{
858 ············Adresse a = new Adresse();
859 ············a.Lkz = lkz;
860 ············a.Plz = plz;
861 ············a.Straße = straße;
862 ············a.Ort = ort;
863 ············return a;
864 ········}
865
866 ········private Buero CreateBuero( string zimmer )
867 ········{
868 ············return new Buero( zimmer );
869 ········}
870 ····}
871 }
872