Datei: IntegrationTests/IntegrationTests/ObjectContainerTests.cs

Last Commit (9d1552b)
1 using NDO;
2 using NDOInterfaces;
3 using NUnit.Framework;
4 using Reisekosten;
5 using Reisekosten.Personal;
6 using System;
7
8 namespace NdoUnitTests
9 {
10 ····[TestFixture]
11 public class ObjectContainerTests
12 ····{
13 ········private PersistenceManager pm;
14 ········private Mitarbeiter m;
15
16
17 ········[SetUp]
18 ········public void Setup()
19 ········{
20 ············pm = PmFactory.NewPersistenceManager();
21 ············m = CreateMitarbeiter( "Mirko", "Matytschak" );
22 ············m.Position = new System.Drawing.Point( 12, 34 );
23 ········}
24
25 ········[TearDown]
26 ········public void TearDown()
27 ········{
28 ············if (null != pm)
29 ············{
30 ················var mitarbeiterListe = pm.Objects<Mitarbeiter>().ResultTable;
31 ················if (mitarbeiterListe.Count > 0)
32 ················{
33 ····················pm.Delete( mitarbeiterListe );
34 ····················pm.Save();
35 ················}
36 ················pm.Close();················
37 ············}
38 ········}
39
40 ········private Mitarbeiter CreateMitarbeiter( string vorname, string nachname )
41 ········{
42 ············Mitarbeiter m = new Mitarbeiter();
43 ············m.Vorname = vorname;
44 ············m.Nachname = nachname;
45 ············return m;
46 ········}
47
48 ········[Test]
49 ········public void ObjectContainerContainsCreatedObject()
50 ········{
51 ············pm.MakePersistent( m );
52 ············var oc = pm.GetObjectContainer();
53 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
54 ············pm.Save();
55 ············oc = pm.GetObjectContainer();
56 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
57 ············pm.UnloadCache();
58 ············m = pm.Objects<Mitarbeiter>().Single();
59 ············oc = pm.GetObjectContainer();
60 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
61 ········}
62
63 ········INdoFormatter GetFormatter()
64 ········{
65 ············return new NDO.JsonFormatter.NdoJsonFormatter();
66 ········}
67
68 ········[Test]
69 ········public void ObjectContainerIsSerializable()
70 ········{
71 ············var binaryFormatter = GetFormatter();
72
73 ············pm.MakePersistent( m );
74 ············pm.Save();
75 ············var oc = pm.GetObjectContainer();
76 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
77
78 ············oc.Formatter = binaryFormatter;
79 ············string serialized = oc.MarshalingString;
80
81 ············pm.UnloadCache();
82
83 ············var oc2 = pm.GetObjectContainer();
84 ············Assert.That(0 ==··oc2.RootObjects.Count );
85
86 ············oc = new ObjectContainer();
87 ············oc.Deserialize( serialized, binaryFormatter );
88 ············pm.MergeObjectContainer( oc );
89
90 ············oc2 = pm.GetObjectContainer();
91 ············Assert.That(1 ==··oc2.RootObjects.Count );
92
93 ············m = (Mitarbeiter)oc2.RootObjects[0];
94 ············Assert.That("Mirko" ==··m.Vorname );
95 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState );
96 ········}
97
98 ········[Test]
99 ········public void CompleteTurnaroundWithChangeSetContainer()
100 ········{
101 ············// Create object and serialize it
102 ············var binaryFormatter = GetFormatter();
103
104 ············pm.MakePersistent( m );
105 ············pm.Save();
106 ············var oc = pm.GetObjectContainer();············
107
108 ············oc.Formatter = binaryFormatter;
109 ············string serialized = oc.MarshalingString;
110
111 ············pm.UnloadCache();
112
113 ············// Merge object in to an OfflinePersistenceManager and change it
114 ············OfflinePersistenceManager opm = new OfflinePersistenceManager( pm.NDOMapping.FileName );
115
116 ············oc = new ObjectContainer();
117 ············oc.Deserialize( serialized, binaryFormatter );
118 ············
119 ············opm.MergeObjectContainer( oc );
120
121 ············var m2 = (Mitarbeiter)oc.RootObjects[0];
122 ············Assert.That(NDOObjectState.Persistent ==··m2.NDOObjectState );
123 ············m2.Vorname = "Hans";
124 ············Assert.That(NDOObjectState.PersistentDirty ==··m2.NDOObjectState );
125
126 ············// Create a ChangeSetContainer and serialize it
127 ············var csc = opm.GetChangeSet();
128 ············csc.Formatter = binaryFormatter;
129 ············string serializedChanges = csc.MarshalingString;
130
131 ············// Merge the changes back to pm
132 ············csc = new ChangeSetContainer();
133 ············csc.Deserialize( serializedChanges, binaryFormatter );
134 ············m = (Mitarbeiter)csc.ChangedObjects[0];
135 ············pm.MergeObjectContainer( csc );
136 ············m2 = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
137 ············Assert.That(NDOObjectState.PersistentDirty ==··m2.NDOObjectState );
138 ············Assert.That("Hans" ==··m.Vorname );
139
140 ············// Save and Reload
141 ············pm.Save();
142 ············pm.UnloadCache();
143 ············m = pm.Objects<Mitarbeiter>().Single();
144 ············Assert.That("Hans" ==··m.Vorname );
145 ········}
146
147 ········[Test]
148 ········public void CanSetObjectsToHollow()
149 ········{
150 ············var binaryFormatter = GetFormatter();
151 ············var serializationIterator = new NDO.SerializationIterator( r => r.ReferencedType == typeof( Reise ), pc => pc.NDOObjectState = NDOObjectState.Hollow );
152
153 ············pm.MakePersistent( m );
154 ············Reise reise;
155 ············m.Hinzufuegen( reise = new Reise() { Zweck = "ADC" } );
156 ············pm.Save();
157
158 ············var oc = pm.GetObjectContainer();
159 ············oc.SerialisationIterator = serializationIterator;
160
161 ············bool found = false;
162 ············foreach (object o in oc.RootObjects)
163 ············{
164 ················if (Object.ReferenceEquals( m, o ))
165 ····················found = true;
166 ············}
167 ············Assert.That( found );
168
169 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState );
170
171 ············oc.Formatter = binaryFormatter;
172 ············string serialized = oc.MarshalingString;
173
174 ············Assert.That(2 ==··oc.RootObjects.Count );
175 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState );
176 ············Assert.That(NDOObjectState.Hollow ==··reise.NDOObjectState );
177 ········}
178
179 ········[Test]
180 ········public void ObjectContainerSerializesRelations()
181 ········{
182 ············var binaryFormatter = GetFormatter();
183 ············var serializationIterator = new NDO.SerializationIterator( r => r.ReferencedType == typeof( Reise ) );
184
185 ············pm.MakePersistent( m );
186 ············m.Hinzufuegen( new Reise() {Zweck = "ADC" } );
187 ············pm.Save();
188
189 ············var oc = pm.GetObjectContainer();
190
191 ············bool found = false;
192 ············foreach (object o in oc.RootObjects)
193 ············{
194 ················if (Object.ReferenceEquals( m, o ))
195 ····················found = true;
196 ············}
197 ············Assert.That( found );
198
199 ············oc.SerialisationIterator = serializationIterator;
200 ············oc.Formatter = binaryFormatter;
201 ············string serialized = oc.MarshalingString;
202
203 ············Assert.That(2 ==··oc.RootObjects.Count );
204
205 ············pm.UnloadCache();
206
207 ············var oc2 = pm.GetObjectContainer();
208 ············Assert.That(0 ==··oc2.RootObjects.Count );
209
210 ············oc = new ObjectContainer();
211 ············oc.Deserialize( serialized, binaryFormatter );
212 ············pm.MergeObjectContainer( oc );
213
214 ············oc2 = pm.GetObjectContainer();
215 ············Assert.That(2 ==··oc2.RootObjects.Count );
216
217 ············Reise r2 = null;
218 ············Mitarbeiter m2 = null;
219
220 ············foreach(object o in oc2.RootObjects)
221 ············{
222 ················if (o is Reise)
223 ····················r2 = (Reise)o;
224 ················if (o is Mitarbeiter)
225 ····················m2 = (Mitarbeiter)o;
226 ············}
227
228 ············Assert.That(r2··!= null);
229 ············Assert.That(m2··!= null);
230
231 ············Assert.That("Mirko" ==··m2.Vorname );
232 ············Assert.That(NDOObjectState.Persistent ==··m2.NDOObjectState );
233
234 ············Assert.That("ADC" ==··r2.Zweck );
235 ············Assert.That(NDOObjectState.Persistent ==··r2.NDOObjectState );
236 ········}
237
238 ····}
239 }
240
New Commit (60cb179)
1 using NDO;
2 using NDOInterfaces;
3 using NUnit.Framework;
4 using Reisekosten;
5 using Reisekosten.Personal;
6 using System;
7
8 namespace NdoUnitTests
9 {
10 ····[TestFixture]
11 public class ObjectContainerTests : NDOTest
12 ····{
13 ········private PersistenceManager pm;
14 ········private Mitarbeiter m;
15
16
17 ········[SetUp]
18 ········public void Setup()
19 ········{
20 ············pm = PmFactory.NewPersistenceManager();
21 ············m = CreateMitarbeiter( "Mirko", "Matytschak" );
22 ············m.Position = new System.Drawing.Point( 12, 34 );
23 ········}
24
25 ········[TearDown]
26 ········public void TearDown()
27 ········{
28 ············if (null != pm)
29 ············{
30 ················var mitarbeiterListe = pm.Objects<Mitarbeiter>().ResultTable;
31 ················if (mitarbeiterListe.Count > 0)
32 ················{
33 ····················pm.Delete( mitarbeiterListe );
34 ····················pm.Save();
35 ················}
36 ················pm.Close();················
37 ············}
38 ········}
39
40 ········private Mitarbeiter CreateMitarbeiter( string vorname, string nachname )
41 ········{
42 ············Mitarbeiter m = new Mitarbeiter();
43 ············m.Vorname = vorname;
44 ············m.Nachname = nachname;
45 ············return m;
46 ········}
47
48 ········[Test]
49 ········public void ObjectContainerContainsCreatedObject()
50 ········{
51 ············pm.MakePersistent( m );
52 ············var oc = pm.GetObjectContainer();
53 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
54 ············pm.Save();
55 ············oc = pm.GetObjectContainer();
56 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
57 ············pm.UnloadCache();
58 ············m = pm.Objects<Mitarbeiter>().Single();
59 ············oc = pm.GetObjectContainer();
60 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
61 ········}
62
63 ········INdoFormatter GetFormatter()
64 ········{
65 ············return new NDO.JsonFormatter.NdoJsonFormatter();
66 ········}
67
68 ········[Test]
69 ········public void ObjectContainerIsSerializable()
70 ········{
71 ············var binaryFormatter = GetFormatter();
72
73 ············pm.MakePersistent( m );
74 ············pm.Save();
75 ············var oc = pm.GetObjectContainer();
76 ············Assert.That( Object.ReferenceEquals( m, oc.RootObjects[0] ) );
77
78 ············oc.Formatter = binaryFormatter;
79 ············string serialized = oc.MarshalingString;
80
81 ············pm.UnloadCache();
82
83 ············var oc2 = pm.GetObjectContainer();
84 ············Assert.That(0 ==··oc2.RootObjects.Count );
85
86 ············oc = new ObjectContainer();
87 ············oc.Deserialize( serialized, binaryFormatter );
88 ············pm.MergeObjectContainer( oc );
89
90 ············oc2 = pm.GetObjectContainer();
91 ············Assert.That(1 ==··oc2.RootObjects.Count );
92
93 ············m = (Mitarbeiter)oc2.RootObjects[0];
94 ············Assert.That("Mirko" ==··m.Vorname );
95 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState );
96 ········}
97
98 ········[Test]
99 ········public void CompleteTurnaroundWithChangeSetContainer()
100 ········{
101 ············// Create object and serialize it
102 ············var binaryFormatter = GetFormatter();
103
104 ············pm.MakePersistent( m );
105 ············pm.Save();
106 ············var oc = pm.GetObjectContainer();············
107
108 ············oc.Formatter = binaryFormatter;
109 ············string serialized = oc.MarshalingString;
110
111 ············pm.UnloadCache();
112
113 ············// Merge object in to an OfflinePersistenceManager and change it
114 ············OfflinePersistenceManager opm = new OfflinePersistenceManager( pm.NDOMapping.FileName );
115
116 ············oc = new ObjectContainer();
117 ············oc.Deserialize( serialized, binaryFormatter );
118 ············
119 ············opm.MergeObjectContainer( oc );
120
121 ············var m2 = (Mitarbeiter)oc.RootObjects[0];
122 ············Assert.That(NDOObjectState.Persistent ==··m2.NDOObjectState );
123 ············m2.Vorname = "Hans";
124 ············Assert.That(NDOObjectState.PersistentDirty ==··m2.NDOObjectState );
125
126 ············// Create a ChangeSetContainer and serialize it
127 ············var csc = opm.GetChangeSet();
128 ············csc.Formatter = binaryFormatter;
129 ············string serializedChanges = csc.MarshalingString;
130
131 ············// Merge the changes back to pm
132 ············csc = new ChangeSetContainer();
133 ············csc.Deserialize( serializedChanges, binaryFormatter );
134 ············m = (Mitarbeiter)csc.ChangedObjects[0];
135 ············pm.MergeObjectContainer( csc );
136 ············m2 = (Mitarbeiter)pm.FindObject( m.NDOObjectId );
137 ············Assert.That(NDOObjectState.PersistentDirty ==··m2.NDOObjectState );
138 ············Assert.That("Hans" ==··m.Vorname );
139
140 ············// Save and Reload
141 ············pm.Save();
142 ············pm.UnloadCache();
143 ············m = pm.Objects<Mitarbeiter>().Single();
144 ············Assert.That("Hans" ==··m.Vorname );
145 ········}
146
147 ········[Test]
148 ········public void CanSetObjectsToHollow()
149 ········{
150 ············var binaryFormatter = GetFormatter();
151 ············var serializationIterator = new NDO.SerializationIterator( r => r.ReferencedType == typeof( Reise ), pc => pc.NDOObjectState = NDOObjectState.Hollow );
152
153 ············pm.MakePersistent( m );
154 ············Reise reise;
155 ············m.Hinzufuegen( reise = new Reise() { Zweck = "ADC" } );
156 ············pm.Save();
157
158 ············var oc = pm.GetObjectContainer();
159 ············oc.SerialisationIterator = serializationIterator;
160
161 ············bool found = false;
162 ············foreach (object o in oc.RootObjects)
163 ············{
164 ················if (Object.ReferenceEquals( m, o ))
165 ····················found = true;
166 ············}
167 ············Assert.That( found );
168
169 ············Assert.That(NDOObjectState.Persistent ==··m.NDOObjectState );
170
171 ············oc.Formatter = binaryFormatter;
172 ············string serialized = oc.MarshalingString;
173
174 ············Assert.That(2 ==··oc.RootObjects.Count );
175 ············Assert.That(NDOObjectState.Hollow ==··m.NDOObjectState );
176 ············Assert.That(NDOObjectState.Hollow ==··reise.NDOObjectState );
177 ········}
178
179 ········[Test]
180 ········public void ObjectContainerSerializesRelations()
181 ········{
182 ············var binaryFormatter = GetFormatter();
183 ············var serializationIterator = new NDO.SerializationIterator( r => r.ReferencedType == typeof( Reise ) );
184
185 ············pm.MakePersistent( m );
186 ············m.Hinzufuegen( new Reise() {Zweck = "ADC" } );
187 ············pm.Save();
188
189 ············var oc = pm.GetObjectContainer();
190
191 ············bool found = false;
192 ············foreach (object o in oc.RootObjects)
193 ············{
194 ················if (Object.ReferenceEquals( m, o ))
195 ····················found = true;
196 ············}
197 ············Assert.That( found );
198
199 ············oc.SerialisationIterator = serializationIterator;
200 ············oc.Formatter = binaryFormatter;
201 ············string serialized = oc.MarshalingString;
202
203 ············Assert.That(2 ==··oc.RootObjects.Count );
204
205 ············pm.UnloadCache();
206
207 ············var oc2 = pm.GetObjectContainer();
208 ············Assert.That(0 ==··oc2.RootObjects.Count );
209
210 ············oc = new ObjectContainer();
211 ············oc.Deserialize( serialized, binaryFormatter );
212 ············pm.MergeObjectContainer( oc );
213
214 ············oc2 = pm.GetObjectContainer();
215 ············Assert.That(2 ==··oc2.RootObjects.Count );
216
217 ············Reise r2 = null;
218 ············Mitarbeiter m2 = null;
219
220 ············foreach(object o in oc2.RootObjects)
221 ············{
222 ················if (o is Reise)
223 ····················r2 = (Reise)o;
224 ················if (o is Mitarbeiter)
225 ····················m2 = (Mitarbeiter)o;
226 ············}
227
228 ············Assert.That(r2··!= null);
229 ············Assert.That(m2··!= null);
230
231 ············Assert.That("Mirko" ==··m2.Vorname );
232 ············Assert.That(NDOObjectState.Persistent ==··m2.NDOObjectState );
233
234 ············Assert.That("ADC" ==··r2.Zweck );
235 ············Assert.That(NDOObjectState.Persistent ==··r2.NDOObjectState );
236 ········}
237
238 ····}
239 }
240