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 |