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