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