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 |