Datei: IntegrationTests/IntegrationTests/PolymorphicWTable.cs
Last Commit (08b23aa)
| 1 | // |
| 2 | // Copyright ( c) 2002-2016 Mirko Matytschak |
| 3 | // (www.netdataobjects.de) |
| 4 | // |
| 5 | // Author: Mirko Matytschak |
| 6 | // |
| 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated |
| 8 | // documentation files (the "Software"), to deal in the Software without restriction, including without limitation |
| 9 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the |
| 10 | // Software, and to permit persons to whom the Software is furnished to do so, subject to the following |
| 11 | // conditions: |
| 12 | |
| 13 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions |
| 14 | // of the Software. |
| 15 | // |
| 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED |
| 17 | // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| 18 | // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
| 19 | // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
| 20 | // DEALINGS IN THE SOFTWARE. |
| 21 | |
| 22 | |
| 23 | using System; |
| 24 | using System.Diagnostics; |
| 25 | using System.Collections; |
| 26 | using NUnit.Framework; |
| 27 | using NDO; |
| 28 | using NDO.Mapping; |
| 29 | using Reisekosten; |
| 30 | using Reisekosten.Personal; |
| 31 | using PureBusinessClasses; |
| 32 | using NDO.Query; |
| 33 | using System.Linq; |
| 34 | using System.Collections.Generic; |
| 35 | |
| 36 | namespace NdoUnitTests { |
| 37 | ····/// <summary> |
| 38 | ····/// Polymorphic tests. |
| 39 | ····/// </summary> |
| 40 | ····[TestFixture] |
| 41 | ····public class PolymorphicWTable : NDOTest |
| 42 | ····{ |
| 43 | ········public PolymorphicWTable() { |
| 44 | ········} |
| 45 | |
| 46 | ········private Reise r; |
| 47 | ········private Kostenpunkt kp; |
| 48 | ········private ICollection onSavingCollection = null; |
| 49 | |
| 50 | ········[SetUp] |
| 51 | ········public void Setup() { |
| 52 | ············r = CreateReise("ADC"); |
| 53 | ············kp = CreateBeleg(); |
| 54 | ········} |
| 55 | |
| 56 | ········[TearDown] |
| 57 | ········public void TearDown() { |
| 58 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 59 | ············pm.TransactionMode = TransactionMode.None; |
| 60 | |
| 61 | ············//pm.UnloadCache(); |
| 62 | ············IList reiseliste = pm.GetClassExtent(typeof(Reise), true); |
| 63 | pm. Delete( reiseliste) ; |
| 64 | ············pm.Save(); |
| 65 | ············pm.UnloadCache(); |
| 66 | ············IQuery q; |
| 67 | ············IList liste; |
| 68 | |
| 69 | ············// We can't delete orphan Beleg object with NDO, so use direct Sql statements |
| 70 | ············using (var handler = pm.GetSqlPassThroughHandler()) |
| 71 | ············{ |
| 72 | ················var sql = "DELETE FROM " + pm.NDOMapping.FindClass( typeof( Beleg ) ).TableName; |
| 73 | ················handler.Execute( sql ); |
| 74 | ············} |
| 75 | |
| 76 | q = new NDOQuery<Contact>( pm) ; |
| 77 | ············liste = q.Execute(); |
| 78 | pm. Delete( liste) ; |
| 79 | ············pm.Save(); |
| 80 | q = new NDOQuery<Adresse>( pm) ; |
| 81 | ············liste = q.Execute(); |
| 82 | pm. Delete( liste) ; |
| 83 | ············pm.Save(); |
| 84 | pm. Dispose( ) ; |
| 85 | ········} |
| 86 | |
| 87 | ········[Test] |
| 88 | public void TestCreateObjects( ) { |
| 89 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 90 | pm. MakePersistent( r) ; |
| 91 | r. AddKostenpunkt( kp) ; |
| 92 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "Beleg should be Created: ") ; |
| 93 | ········} |
| 94 | |
| 95 | |
| 96 | ········[Test] |
| 97 | public void TestCreateObjects2( ) { |
| 98 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 99 | r. AddKostenpunkt( kp) ; |
| 100 | pm. MakePersistent( r) ; |
| 101 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "Beleg should be Created: ") ; |
| 102 | ········} |
| 103 | |
| 104 | ········[Test] |
| 105 | public void TestCreateObjectsSave( ) { |
| 106 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 107 | r. AddKostenpunkt( kp) ; |
| 108 | pm. MakePersistent( r) ; |
| 109 | ············pm.Save(); |
| 110 | |
| 111 | ············pm.UnloadCache(); |
| 112 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
| 113 | Assert. That( r != null, "Reise not found") ; |
| 114 | Assert. That( 1 == r. Kostenpunkte. Count ) ; |
| 115 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found") ; |
| 116 | ········} |
| 117 | |
| 118 | ········[Test] |
| 119 | public void TestCreateManyObjectsSave( ) { |
| 120 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 121 | r. AddKostenpunkt( kp) ; |
| 122 | pm. MakePersistent( r) ; |
| 123 | ············pm.Save(); |
| 124 | |
| 125 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
| 126 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
| 127 | ············pm.Save(); |
| 128 | ············pm.UnloadCache(); |
| 129 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
| 130 | Assert. That( r != null, "Reise not found") ; |
| 131 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: " ) ; |
| 132 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found") ; |
| 133 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: ") ; |
| 134 | ········} |
| 135 | ········[Test] |
| 136 | public void TestCreatePolymorphicObjectsSave( ) { |
| 137 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 138 | r. AddKostenpunkt( kp) ; |
| 139 | pm. MakePersistent( r) ; |
| 140 | ············pm.Save(); |
| 141 | |
| 142 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
| 143 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
| 144 | ············pm.Save(); |
| 145 | ············pm.UnloadCache(); |
| 146 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
| 147 | Assert. That( r != null, "Reise not found") ; |
| 148 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found") ; |
| 149 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: ") ; |
| 150 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: ") ; |
| 151 | Assert. That( typeof( Beleg) == r. Kostenpunkte[0]. GetType( ) , "Type") ; |
| 152 | Assert. That( typeof( PKWFahrt) == r. Kostenpunkte[1]. GetType( ) , "Type") ; |
| 153 | Assert. That( typeof( Beleg) == r. Kostenpunkte[2]. GetType( ) , "Type") ; |
| 154 | |
| 155 | ········} |
| 156 | |
| 157 | ········[Test] |
| 158 | ········public void TestPolymorphicQuery() |
| 159 | ········{ |
| 160 | // Debug. WriteLine( "TestPolymorphicQuery") ; |
| 161 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 162 | r. AddKostenpunkt( kp) ; |
| 163 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
| 164 | ············r.AddKostenpunkt(CreateBeleg(50)); |
| 165 | ············pm.MakePersistent(r); |
| 166 | ············pm.Save(); |
| 167 | ············pm.UnloadCache(); |
| 168 | |
| 169 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
| 170 | ············IList l = q.Execute(); |
| 171 | Assert. That( 3 == l. Count, "Anzahl Belege: ") ; |
| 172 | ········} |
| 173 | |
| 174 | |
| 175 | ········[Test] |
| 176 | ········public void TestPolymorphicAggregateQuery() |
| 177 | ········{ |
| 178 | // Debug. WriteLine( "TestPolymorphicAggregateQuery") ; |
| 179 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 180 | r. AddKostenpunkt( kp) ; |
| 181 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
| 182 | ············r.AddKostenpunkt(CreateBeleg(50)); |
| 183 | ············pm.MakePersistent(r); |
| 184 | ············if (r.NDOObjectId.Id[0] is Int32) |
| 185 | ············{ |
| 186 | ················pm.Save(); |
| 187 | ················decimal sum = 0m; |
| 188 | foreach( Kostenpunkt kp2 in r. Kostenpunkte) |
| 189 | ················{ |
| 190 | sum += ( Int32) kp2. NDOObjectId. Id[0]; |
| 191 | ················} |
| 192 | |
| 193 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
| 194 | ················decimal newsum = (decimal)q.ExecuteAggregate("oid", AggregateType.Sum); |
| 195 | Assert. That( sum == newsum, "Summe stimmt nicht: ") ; |
| 196 | ················decimal newcount = (decimal)q.ExecuteAggregate("oid", AggregateType.Count); |
| 197 | Assert. That( 3 == newcount, "Summe stimmt nicht: ") ; |
| 198 | ············} |
| 199 | ········} |
| 200 | |
| 201 | ········[Test] |
| 202 | ········public void TestOnSavingEvent() |
| 203 | ········{ |
| 204 | // Debug. WriteLine( "TestOnSavingEvent") ; |
| 205 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 206 | r. AddKostenpunkt( kp) ; |
| 207 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
| 208 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
| 209 | ············pm.MakePersistent(r); |
| 210 | ············pm.OnSavingEvent += new OnSavingHandler(this.OnSavingListener); |
| 211 | ············pm.Save(); |
| 212 | Assert. That( this. onSavingCollection != null, "onSavingCollection is null") ; |
| 213 | ········} |
| 214 | |
| 215 | ········private void OnSavingListener(ICollection c) |
| 216 | ········{ |
| 217 | ············this.onSavingCollection = c; |
| 218 | ········} |
| 219 | |
| 220 | |
| 221 | |
| 222 | ········[Ignore("Future Feature")] |
| 223 | ········[Test] |
| 224 | ········public void TestPolymorphicQueryWithSql() |
| 225 | ········{ |
| 226 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 227 | r. AddKostenpunkt( kp) ; |
| 228 | r. AddKostenpunkt( CreatePkw( 100) ) ; |
| 229 | r. AddKostenpunkt( CreateBeleg( 50) ) ; |
| 230 | pm. MakePersistent( r) ; |
| 231 | ············pm.Save(); |
| 232 | ············pm.UnloadCache(); |
| 233 | |
| 234 | ············string sql = @"SELECT DISTINCT Reise.ID FROM Reise, relBelegKostenpunkt, PKWFahrt, Beleg WHERE ((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 4) AND PKWFahrt.ID != 0 ) OR··((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 3) AND Beleg.ID != 0)"; |
| 235 | ············//string sql = "select distinct Reise.ID from Reise"; |
| 236 | ············//string sql = "select * from Reise"; |
| 237 | |
| 238 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, sql, true, QueryLanguage.Sql); |
| 239 | ············//System.Diagnostics.Debug.WriteLine(q.GeneratedQuery); |
| 240 | |
| 241 | ············IList l = q.Execute(); |
| 242 | Assert. That( 1 == l. Count, "Anzahl Reisen: ") ; |
| 243 | ········} |
| 244 | |
| 245 | ········ |
| 246 | ········[Test] |
| 247 | ········public void TestAddObjectSave() { |
| 248 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 249 | pm. MakePersistent( r) ; |
| 250 | ············pm.Save(); |
| 251 | r. AddKostenpunkt( kp) ; |
| 252 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state") ; |
| 253 | ············pm.Save(); |
| 254 | r = ( Reise) pm. FindObject( r. NDOObjectId) ; |
| 255 | kp = ( Kostenpunkt) pm. FindObject( kp. NDOObjectId) ; |
| 256 | Assert. That( r != null, "1. Reise not found") ; |
| 257 | Assert. That( kp != null, "2. Beleg not found") ; |
| 258 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "3. Wrong state") ; |
| 259 | Assert. That( DateTime. Now. Date == kp. Datum, "Wrong data") ; |
| 260 | ········} |
| 261 | ············ |
| 262 | ········[Test] |
| 263 | public void TestAddObjectAbort( ) { |
| 264 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 265 | pm. MakePersistent( r) ; |
| 266 | ············pm.Save(); |
| 267 | r. AddKostenpunkt( kp) ; |
| 268 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state") ; |
| 269 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 270 | ············pm.Abort(); |
| 271 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
| 272 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects") ; |
| 273 | ········} |
| 274 | ········[Test] |
| 275 | public void TestRemoveObjectSave( ) { |
| 276 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 277 | pm. MakePersistent( r) ; |
| 278 | r. AddKostenpunkt( kp) ; |
| 279 | ············pm.Save(); |
| 280 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 281 | r. Löschen( kp) ; |
| 282 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state") ; |
| 283 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects") ; |
| 284 | ············pm.Save(); |
| 285 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
| 286 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
| 287 | ········} |
| 288 | ············ |
| 289 | ········[Test] |
| 290 | public void TestRemoveObjectAbort( ) { |
| 291 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 292 | pm. MakePersistent( r) ; |
| 293 | r. AddKostenpunkt( kp) ; |
| 294 | ············pm.Save(); |
| 295 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 296 | r. Löschen( kp) ; |
| 297 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state") ; |
| 298 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects") ; |
| 299 | ············pm.Abort(); |
| 300 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
| 301 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state") ; |
| 302 | ········} |
| 303 | |
| 304 | ········[Test] |
| 305 | public void TestDeleteSave( ) { |
| 306 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 307 | pm. MakePersistent( r) ; |
| 308 | r. AddKostenpunkt( kp) ; |
| 309 | ············pm.Save(); |
| 310 | pm. Delete( r) ; |
| 311 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state") ; |
| 312 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state") ; |
| 313 | ············pm.Save(); |
| 314 | Assert. That( NDOObjectState. Transient == r. NDOObjectState, "1. Wrong state") ; |
| 315 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
| 316 | ········} |
| 317 | |
| 318 | |
| 319 | |
| 320 | ········[Test] |
| 321 | public void TestDeleteAbort( ) { |
| 322 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 323 | pm. MakePersistent( r) ; |
| 324 | r. AddKostenpunkt( kp) ; |
| 325 | ············pm.Save(); |
| 326 | pm. Delete( r) ; |
| 327 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state") ; |
| 328 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state") ; |
| 329 | ············pm.Abort(); |
| 330 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1. Wrong state") ; |
| 331 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state") ; |
| 332 | ········} |
| 333 | |
| 334 | ········[Test] |
| 335 | public void TestAddRemoveSave( ) { |
| 336 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 337 | pm. MakePersistent( r) ; |
| 338 | ············pm.Save(); |
| 339 | r. AddKostenpunkt( kp) ; |
| 340 | r. Löschen( kp) ; |
| 341 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state") ; |
| 342 | ············pm.Save(); |
| 343 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
| 344 | ········} |
| 345 | |
| 346 | ········[Test] |
| 347 | public void TestAddRemoveAbort( ) { |
| 348 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 349 | pm. MakePersistent( r) ; |
| 350 | ············pm.Save(); |
| 351 | r. AddKostenpunkt( kp) ; |
| 352 | r. Löschen( kp) ; |
| 353 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state") ; |
| 354 | ············pm.Abort(); |
| 355 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state") ; |
| 356 | ········} |
| 357 | |
| 358 | ········[Test] |
| 359 | public void TestClearRelatedObjectsSave( ) { |
| 360 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 361 | for ( int i = 0; i < 10; i++) { |
| 362 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 363 | ············} |
| 364 | pm. MakePersistent( r) ; |
| 365 | ············pm.Save(); |
| 366 | ············IList rr = r.Kostenpunkte.ToList(); |
| 367 | ············r.LöscheKostenpunkte(); |
| 368 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 369 | for( int i = 0; i < 10; i++) { |
| 370 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
| 371 | ············} |
| 372 | ············pm.Save(); |
| 373 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
| 374 | for( int i = 0; i < 10; i++) { |
| 375 | Assert. That( NDOObjectState. Transient == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
| 376 | ············} |
| 377 | ········} |
| 378 | |
| 379 | ········[Test] |
| 380 | public void TestClearRelatedObjectsAbort( ) { |
| 381 | ············for(int i = 0; i < 10; i++) { |
| 382 | ················r.AddKostenpunkt(CreateBeleg(i*10+100)); |
| 383 | ············} |
| 384 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 385 | pm. MakePersistent( r) ; |
| 386 | ············pm.Save(); |
| 387 | ············IList rr = r.Kostenpunkte.ToList(); |
| 388 | ············r.LöscheKostenpunkte(); |
| 389 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 390 | for( int i = 0; i < 10; i++) { |
| 391 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
| 392 | ············} |
| 393 | ············pm.Abort(); |
| 394 | Assert. That( 10 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
| 395 | for( int i = 0; i < 10; i++) { |
| 396 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
| 397 | ············} |
| 398 | ········} |
| 399 | |
| 400 | ········[Test] |
| 401 | public void TestAssignRelatedObjectsNullSave( ) { |
| 402 | for( int i = 0; i < 3; i++) { |
| 403 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 404 | ············} |
| 405 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 406 | pm. MakePersistent( r) ; |
| 407 | ············pm.Save(); |
| 408 | ············IList rr = r.Kostenpunkte.ToList(); |
| 409 | ············r.ErsetzeKostenpunkte(); |
| 410 | Assert. That( r. Kostenpunkte == null, "No objects should be there") ; |
| 411 | for( int i = 0; i < 3; i++) { |
| 412 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
| 413 | ············} |
| 414 | ············pm.Save(); |
| 415 | Assert. That( r. Kostenpunkte == null, "No objects should be there") ; |
| 416 | for( int i = 0; i < 3; i++) { |
| 417 | Assert. That( NDOObjectState. Transient == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
| 418 | ············} |
| 419 | ········} |
| 420 | |
| 421 | ········[Test] |
| 422 | public void TestAssignRelatedObjectsNullAbort( ) { |
| 423 | for( int i = 0; i < 3; i++) { |
| 424 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 425 | ············} |
| 426 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 427 | pm. MakePersistent( r) ; |
| 428 | ············pm.Save(); |
| 429 | ············IList rr = r.Kostenpunkte.ToList(); |
| 430 | ············r.ErsetzeKostenpunkte(); |
| 431 | Assert. That( r. Kostenpunkte == null, "No objects should be there") ; |
| 432 | for( int i = 0; i < 3; i++) { |
| 433 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
| 434 | ············} |
| 435 | ············pm.Abort(); |
| 436 | Assert. That( 3 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
| 437 | for( int i = 0; i < 3; i++) { |
| 438 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "4. Wrong state") ; |
| 439 | ············} |
| 440 | ········} |
| 441 | |
| 442 | ········[Test] |
| 443 | public void TestAssignRelatedObjectsSave( ) { |
| 444 | for( int i = 0; i < 3; i++) { |
| 445 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 446 | ············} |
| 447 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 448 | pm. MakePersistent( r) ; |
| 449 | ············pm.Save(); |
| 450 | ············List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
| 451 | ············Kostenpunkt nr = CreateBeleg(50); |
| 452 | neueKostenpunkte. Add( nr) ; |
| 453 | |
| 454 | ············IList rr = r.Kostenpunkte.ToList(); |
| 455 | r. ErsetzeKostenpunkte( neueKostenpunkte) ; |
| 456 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 457 | for( int i = 0; i < 3; i++) { |
| 458 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
| 459 | ············} |
| 460 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state") ; |
| 461 | |
| 462 | ············pm.Save(); |
| 463 | Assert. That( 1 == r. Kostenpunkte. Count, "4. Wrong number of objects") ; |
| 464 | for( int i = 0; i < 3; i++) { |
| 465 | Assert. That( NDOObjectState. Transient == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "5. Wrong state") ; |
| 466 | ············} |
| 467 | ············Assert.That(NDOObjectState.Persistent ==··nr.NDOObjectState, "6. Wrong state"); |
| 468 | ········} |
| 469 | |
| 470 | ········[Test] |
| 471 | public void TestAssignRelatedObjectsAbort( ) { |
| 472 | for( int i = 0; i < 3; i++) { |
| 473 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 474 | ············} |
| 475 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 476 | pm. MakePersistent( r) ; |
| 477 | ············pm.Save(); |
| 478 | ············List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
| 479 | ············Kostenpunkt nr = CreateBeleg(200); |
| 480 | neueKostenpunkte. Add( nr) ; |
| 481 | |
| 482 | ············IList rr = r.Kostenpunkte.ToList(); |
| 483 | r. ErsetzeKostenpunkte( neueKostenpunkte) ; |
| 484 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects") ; |
| 485 | for( int i = 0; i < 3; i++) { |
| 486 | Assert. That( NDOObjectState. Deleted == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "2. Wrong state") ; |
| 487 | ············} |
| 488 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state") ; |
| 489 | |
| 490 | ············pm.Abort(); |
| 491 | Assert. That( 3 == r. Kostenpunkte. Count, "4. Wrong number of objects") ; |
| 492 | for( int i = 0; i < 3; i++) { |
| 493 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) rr[i]) . NDOObjectState, "5. Wrong state") ; |
| 494 | ············} |
| 495 | ············Assert.That(NDOObjectState.Transient ==··nr.NDOObjectState, "6. Wrong state"); |
| 496 | ········} |
| 497 | |
| 498 | |
| 499 | ········[Test] |
| 500 | public void TestHollow( ) { |
| 501 | r. AddKostenpunkt( kp) ; |
| 502 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 503 | pm. MakePersistent( r) ; |
| 504 | ············pm.Save(); |
| 505 | pm. MakeHollow( r) ; |
| 506 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow") ; |
| 507 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "1: Kostenpunkt should be persistent") ; |
| 508 | ············var kostenpunkte = r.Kostenpunkte; |
| 509 | |
| 510 | pm. MakeHollow( r, true) ; |
| 511 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "2: Reise should be hollow") ; |
| 512 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "2: Kostenpunkt should be hollow") ; |
| 513 | |
| 514 | ············kostenpunkte = r.Kostenpunkte; |
| 515 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "3: Reise should be persistent") ; |
| 516 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "3: Kostenpunkt should be hollow") ; |
| 517 | Assert. That( 200 == kp. Kosten, "3: Kostenpunkt should have correct Kosten") ; |
| 518 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "4: Kostenpunkt should be persistent") ; |
| 519 | ········} |
| 520 | |
| 521 | ········[Test] |
| 522 | public void TestMakeAllHollow( ) { |
| 523 | r. AddKostenpunkt( kp) ; |
| 524 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 525 | pm. MakePersistent( r) ; |
| 526 | ············pm.Save(); |
| 527 | ············pm.MakeAllHollow(); |
| 528 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow") ; |
| 529 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "1: Kostenpunkt should be hollow") ; |
| 530 | ········} |
| 531 | |
| 532 | ········[Test] |
| 533 | public void TestMakeAllHollowUnsaved( ) { |
| 534 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 535 | r. AddKostenpunkt( kp) ; |
| 536 | pm. MakePersistent( r) ; |
| 537 | ············pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects |
| 538 | Assert. That( NDOObjectState. Created == r. NDOObjectState, "1: Reise should be created") ; |
| 539 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1: Kostenpunkt should be created") ; |
| 540 | ········} |
| 541 | |
| 542 | ········[Test] |
| 543 | public void TestLoadRelatedObjects( ) { |
| 544 | for( int i = 0; i < 10; i++) { |
| 545 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 546 | ············} |
| 547 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 548 | pm. MakePersistent( r) ; |
| 549 | ············pm.Save(); |
| 550 | pm. MakeHollow( r, true) ; |
| 551 | |
| 552 | ············var kpunkte = r.Kostenpunkte.ToList(); |
| 553 | Assert. That( 10 == kpunkte. Count, "Array size should be 10") ; |
| 554 | |
| 555 | for( int i = 0; i < 10; i++) { |
| 556 | ················Kostenpunkt rr = (Kostenpunkt)kpunkte[i]; |
| 557 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow") ; |
| 558 | #if !ORACLE && !MYSQL && !FIREBIRD |
| 559 | Assert. That( i*10+100 == rr. Kosten, "2: Kostenpunkt should be in right order") ; |
| 560 | #endif |
| 561 | ············} |
| 562 | |
| 563 | |
| 564 | ············pm.MakeAllHollow(); |
| 565 | ············pm.UnloadCache(); |
| 566 | ············var kpunkte2 = r.Kostenpunkte.ToList(); |
| 567 | for( int i = 0; i < 10; i++) { |
| 568 | ················Kostenpunkt r1 = (Kostenpunkt)kpunkte[i]; |
| 569 | ················Kostenpunkt r2 = (Kostenpunkt)kpunkte2[i]; |
| 570 | #if !ORACLE && !MYSQL && !FIREBIRD |
| 571 | Assert. That( i*10+100 == r1. Kosten, "3: Kostenpunkt should be in right order") ; |
| 572 | #endif |
| 573 | Assert. That( r1 != r2, "Objects should be different") ; |
| 574 | ············} |
| 575 | ········} |
| 576 | |
| 577 | ········[Test] |
| 578 | public void TestLoadRelatedObjectsSave( ) { |
| 579 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 580 | pm. MakePersistent( r) ; |
| 581 | ············pm.Save(); |
| 582 | for( int i = 0; i < 10; i++) { |
| 583 | r. AddKostenpunkt( CreateBeleg( i*10+100) ) ; |
| 584 | ············} |
| 585 | ············pm.Save(); |
| 586 | pm. MakeHollow( r, true) ; |
| 587 | |
| 588 | ············IList reisen = r.Kostenpunkte.ToList(); |
| 589 | |
| 590 | for( int i = 0; i < 10; i++) { |
| 591 | ················Kostenpunkt rr = (Kostenpunkt)reisen[i]; |
| 592 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow") ; |
| 593 | #if !ORACLE && !MYSQL && !FIREBIRD |
| 594 | Assert. That( i*10+100 == rr. Kosten, "2: Kostenpunkt should be in right order") ; |
| 595 | #endif |
| 596 | ············} |
| 597 | |
| 598 | |
| 599 | ············pm.MakeAllHollow(); |
| 600 | ············pm.UnloadCache(); |
| 601 | ············IList reisen2 = r.Kostenpunkte.ToList(); |
| 602 | for( int i = 0; i < 10; i++) { |
| 603 | ················Kostenpunkt r1 = (Kostenpunkt)reisen[i]; |
| 604 | ················Kostenpunkt r2 = (Kostenpunkt)reisen2[i]; |
| 605 | #if !ORACLE && !MYSQL && !FIREBIRD |
| 606 | Assert. That( i*10+100 == r1. Kosten, "3: Kostenpunkt should be in right order") ; |
| 607 | #endif |
| 608 | Assert. That( r1 != r2, "Objects should be different") ; |
| 609 | ············} |
| 610 | ········} |
| 611 | |
| 612 | ········[Test] |
| 613 | public void TestExtentRelatedObjects( ) { |
| 614 | r. AddKostenpunkt( kp) ; |
| 615 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 616 | pm. MakePersistent( r) ; |
| 617 | ············pm.Save(); |
| 618 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "0: Reise should be persistent") ; |
| 619 | ············IList liste = pm.GetClassExtent(typeof(Reise)); |
| 620 | r = ( Reise) liste[0]; |
| 621 | Assert. That( 1 == liste. Count, "1: Number of Reise objects is wrong") ; |
| 622 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1: Reise should be persistent") ; |
| 623 | Assert. That( r. Kostenpunkte != null, "2. Relation is missing") ; |
| 624 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects") ; |
| 625 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) r. Kostenpunkte[0]) . NDOObjectState, "4. : Kostenpunkt should be hollow") ; |
| 626 | |
| 627 | ············pm.UnloadCache(); |
| 628 | liste = pm. GetClassExtent( typeof( Reise) ) ; |
| 629 | r = ( Reise) liste[0]; |
| 630 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "5: Reise should be hollow") ; |
| 631 | Assert. That( r. Kostenpunkte != null, "6. Relation is missing") ; |
| 632 | Assert. That( 1 == r. Kostenpunkte. Count, "7. Wrong number of objects") ; |
| 633 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0]) . NDOObjectState, "8. : Kostenpunkt should be hollow") ; |
| 634 | |
| 635 | ············pm.UnloadCache(); |
| 636 | liste = pm. GetClassExtent( typeof( Reise) , false) ; |
| 637 | r = ( Reise) liste[0]; |
| 638 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "9: Reise should be persistent") ; |
| 639 | Assert. That( r. Kostenpunkte != null, "10. Relation is missing") ; |
| 640 | Assert. That( 1 == r. Kostenpunkte. Count, "11. Wrong number of objects") ; |
| 641 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0]) . NDOObjectState, "12. : Kostenpunkt should be hollow") ; |
| 642 | ········} |
| 643 | |
| 644 | ········[Test] |
| 645 | ········public void TestJoinQuery() |
| 646 | ········{ |
| 647 | ············var pm = PmFactory.NewPersistenceManager(); |
| 648 | |
| 649 | ············Person p = new Person(); |
| 650 | ············p.FirstName = "Mirko"; |
| 651 | ············p.LastName = "Matytschak"; |
| 652 | ············p.Moniker = "Hallo"; |
| 653 | ············Adresse a1 = new Adresse(); |
| 654 | ············a1.Lkz = "D"; |
| 655 | ············a1.Plz = "83646"; |
| 656 | ············a1.Straße = "Nockhergasse 7"; |
| 657 | ············a1.Ort = "Bad Tölz"; |
| 658 | |
| 659 | ············Adresse a2 = new Adresse(); |
| 660 | ············a2.Ort = "Mönchen"; |
| 661 | ············a2.Plz = "80331"; |
| 662 | ············a2.Straße = "Isartorplatz 5"; |
| 663 | ············a2.Lkz = "D"; |
| 664 | |
| 665 | ············Institution i = new Institution(); |
| 666 | ············i.FirstName = "Schnulli"; |
| 667 | ············i.LastName = "Wauwau"; |
| 668 | ············i.Hausmeister = "Möller"; |
| 669 | |
| 670 | pm. MakePersistent( a1) ; |
| 671 | pm. MakePersistent( a2) ; |
| 672 | pm. MakePersistent( p) ; |
| 673 | pm. MakePersistent( i) ; |
| 674 | i. AddAdresse( a1) ; |
| 675 | p. AddAdresse( a1) ; |
| 676 | p. AddAdresse( a2) ; |
| 677 | ············pm.Save(); |
| 678 | ············pm.UnloadCache(); |
| 679 | |
| 680 | ············IQuery q = new NDOQuery<Contact>(pm, $"addresses.plz = '{a2.Plz}'"); |
| 681 | ············IList l = q.Execute(); |
| 682 | Assert. That( 1 == l. Count, "Wrong number of contacts") ; |
| 683 | ········} |
| 684 | |
| 685 | ········[Test] |
| 686 | ········public void TestPolymorphicCondition() |
| 687 | ········{ |
| 688 | r. AddKostenpunkt( kp) ; |
| 689 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 690 | pm. MakePersistent( r) ; |
| 691 | ············pm.Save(); |
| 692 | |
| 693 | ············pm.UnloadCache(); |
| 694 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
| 695 | q. Parameters. Add( DateTime. Now. Date) ; |
| 696 | r = ( Reise) q. ExecuteSingle( true) ; |
| 697 | Assert. That( r != null, "Reise not found") ; |
| 698 | Assert. That( r. Kostenpunkte. Count > 0, "No Beleg" ) ; |
| 699 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
| 700 | ········} |
| 701 | |
| 702 | ········[Test] |
| 703 | ········public void TestSortedQueryAsc() |
| 704 | ········{ |
| 705 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 706 | |
| 707 | r. AddKostenpunkt( kp) ; |
| 708 | ············DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
| 709 | ············kp.Datum = yesterday; |
| 710 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 711 | ············kp.Datum = DateTime.Today; |
| 712 | pm. MakePersistent( r) ; |
| 713 | ············pm.Save(); |
| 714 | |
| 715 | ············pm.UnloadCache(); |
| 716 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 717 | q. Orderings. Add( new AscendingOrder( "datum") ) ; |
| 718 | ············IList l = q.Execute(); |
| 719 | Assert. That( 2 == l. Count, "Count wrong") ; |
| 720 | Assert. That( yesterday == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
| 721 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
| 722 | ········} |
| 723 | |
| 724 | ········[Test] |
| 725 | ········public void TestSortedQueryDesc() |
| 726 | ········{ |
| 727 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 728 | |
| 729 | ············r.AddKostenpunkt(kp); |
| 730 | ············DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
| 731 | ············kp.Datum = yesterday; |
| 732 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 733 | ············kp.Datum = DateTime.Today; |
| 734 | pm. MakePersistent( r) ; |
| 735 | ············pm.Save(); |
| 736 | |
| 737 | ············pm.UnloadCache(); |
| 738 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 739 | q. Orderings. Add( new DescendingOrder( "datum") ) ; |
| 740 | ············IList l = q.Execute(); |
| 741 | //pm. VerboseMode = false; |
| 742 | Assert. That( 2 == l. Count, "Count wrong") ; |
| 743 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
| 744 | Assert. That( yesterday == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
| 745 | ········} |
| 746 | |
| 747 | ········[Test] |
| 748 | ········public void TestSortedQueryAscOneNull() |
| 749 | ········{ |
| 750 | ············var pm = PmFactory.NewPersistenceManager(); |
| 751 | |
| 752 | r. AddKostenpunkt( kp) ; |
| 753 | ············kp.Datum = DateTime.MinValue;··// DbNull |
| 754 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 755 | ············kp.Datum = DateTime.Today; |
| 756 | pm. MakePersistent( r) ; |
| 757 | ············pm.Save(); |
| 758 | |
| 759 | ············pm.UnloadCache(); |
| 760 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 761 | q. Orderings. Add( new AscendingOrder( "datum") ) ; |
| 762 | ············IList l = q.Execute(); |
| 763 | ············//pm.VerboseMode = false; |
| 764 | Assert. That( 2 == l. Count, "Count wrong") ; |
| 765 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
| 766 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
| 767 | ········} |
| 768 | |
| 769 | ········[Test] |
| 770 | ········public void TestSortedQueryBothNull() |
| 771 | ········{ |
| 772 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 773 | |
| 774 | r. AddKostenpunkt( kp) ; |
| 775 | ············kp.Datum = DateTime.MinValue;··// DbNull |
| 776 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 777 | ············kp.Datum = DateTime.MinValue;··// DbNull |
| 778 | pm. MakePersistent( r) ; |
| 779 | ············pm.Save(); |
| 780 | |
| 781 | ············pm.UnloadCache(); |
| 782 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 783 | q. Orderings. Add( new AscendingOrder( "datum") ) ; |
| 784 | ············IList l = q.Execute(); |
| 785 | ············//pm.VerboseMode = false; |
| 786 | Assert. That( 2 == l. Count, "Count wrong") ; |
| 787 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0]) . Datum, "Wrong Date #1") ; |
| 788 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1]) . Datum, "Wrong Date #2") ; |
| 789 | ········} |
| 790 | |
| 791 | ········[Test] |
| 792 | ········public void TestSortedQueryDescOneNull() |
| 793 | ········{ |
| 794 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 795 | ············r.AddKostenpunkt(kp); |
| 796 | ············kp.Datum = DateTime.MinValue; |
| 797 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 798 | ············kp.Datum = DateTime.Today; |
| 799 | pm. MakePersistent( r) ; |
| 800 | ············pm.Save(); |
| 801 | |
| 802 | ············pm.UnloadCache(); |
| 803 | ············IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 804 | q. Orderings. Add( new DescendingOrder( "datum") ) ; |
| 805 | ············IList l = q.Execute(); |
| 806 | ············//pm.VerboseMode = false; |
| 807 | Assert. That( 2 == l. Count, "Count wrong") ; |
| 808 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0]) . Datum, "Order wrong") ; |
| 809 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1]) . Datum, "Wrong object") ; |
| 810 | ········} |
| 811 | |
| 812 | |
| 813 | ········[Test] |
| 814 | ········public void TestQueryForSingleObject() |
| 815 | ········{ |
| 816 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 817 | ············Kostenpunkt kp2 = CreatePkw(100); |
| 818 | r. AddKostenpunkt( kp) ; |
| 819 | r. AddKostenpunkt( kp2) ; |
| 820 | pm. MakePersistent( r) ; |
| 821 | ············pm.Save(); |
| 822 | ············pm.UnloadCache(); |
| 823 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
| 824 | q. Parameters. Add( DateTime. Now. Date) ; |
| 825 | ············IList l = q.Execute(); |
| 826 | Assert. That( 1 == l. Count, "Count wrong") ; |
| 827 | ········} |
| 828 | |
| 829 | |
| 830 | ········[Test] |
| 831 | ········public void TestPolyDelete() |
| 832 | ········{ |
| 833 | var pm = PmFactory. NewPersistenceManager( ) ; |
| 834 | ············Kostenpunkt kp2 = CreatePkw(100); |
| 835 | r. AddKostenpunkt( kp) ; |
| 836 | r. AddKostenpunkt( kp2) ; |
| 837 | pm. MakePersistent( r) ; |
| 838 | ············pm.Save(); |
| 839 | ············pm.UnloadCache(); |
| 840 | ············NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
| 841 | q. Parameters. Add( DateTime. Now. Date) ; |
| 842 | ············IList l = q.Execute(); |
| 843 | Assert. That( 1 == l. Count, "Count wrong") ; |
| 844 | ············r = (Reise) l[0]; |
| 845 | pm. Delete( r) ; |
| 846 | ············pm.Save(); |
| 847 | ········} |
| 848 | |
| 849 | |
| 850 | ········[Test] |
| 851 | ········public void RelationTest() |
| 852 | ········{ |
| 853 | ············var pm = PmFactory.NewPersistenceManager(); |
| 854 | ············NDOMapping mapping = pm.NDOMapping; |
| 855 | ············Class reiseClass = mapping.FindClass(typeof(Reise)); |
| 856 | ············Class pkwClass = mapping.FindClass(typeof(PKWFahrt)); |
| 857 | Assert. That( reiseClass != null, "Mapping for Reise not found") ; |
| 858 | Assert. That( pkwClass != null, "Mapping for pkw not found") ; |
| 859 | ············Relation r1 = reiseClass.FindRelation("belege"); |
| 860 | Assert. That( r1 != null, "Relation not found #1") ; |
| 861 | Assert. That( r1. ForeignRelation != null, "ForeignRelation of Reise not found") ; |
| 862 | ············Relation r2 = pkwClass.FindRelation("reise"); |
| 863 | Assert. That( r2 != null, "Relation not found #2") ; |
| 864 | Assert. That( r2. ForeignRelation != null, "ForeignRelation of PKWFahrt not found") ; |
| 865 | Assert. That( r1 == r2. ForeignRelation, "Back relation wrong") ; |
| 866 | //············Debug.WriteLine(r1.Parent.FullName + "->" + r1.ReferencedTypeName); |
| 867 | //············Debug.WriteLine(r1.ForeignRelation.Parent.FullName + "->" + r1.ForeignRelation.ReferencedTypeName); |
| 868 | //············Debug.WriteLine(r2.Parent.FullName + "->" + r2.ReferencedTypeName); |
| 869 | //············Debug.WriteLine(r2.ForeignRelation.Parent.FullName + "->" + r2.ForeignRelation.ReferencedTypeName); |
| 870 | ········} |
| 871 | |
| 872 | |
| 873 | ········private Kostenpunkt CreateBeleg(double betrag) |
| 874 | ········{ |
| 875 | ············return new Beleg("Taxi", betrag); |
| 876 | ········} |
| 877 | |
| 878 | ········private Kostenpunkt CreateBeleg() { |
| 879 | ············return new Beleg("Flug", 200); |
| 880 | ········} |
| 881 | |
| 882 | ········private Kostenpunkt CreatePkw() { |
| 883 | ············return CreatePkw(100); |
| 884 | ········} |
| 885 | |
| 886 | ········private Kostenpunkt CreatePkw(double km) { |
| 887 | ············return new PKWFahrt(km); |
| 888 | ········} |
| 889 | |
| 890 | ········private Reise CreateReise(string zweck) { |
| 891 | ············Reise r = new Reise(); |
| 892 | ············r.Zweck = zweck; |
| 893 | ············return r; |
| 894 | ········} |
| 895 | ····} |
| 896 | } |
| 897 |
New Commit (60aa080)
| 1 | // |
| 2 | // Copyright ( c) 2002-2025 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.Diagnostics; |
| 25 | using System.Collections; |
| 26 | using NUnit.Framework; |
| 27 | using NDO; |
| 28 | using NDO.Mapping; |
| 29 | using Reisekosten; |
| 30 | using Reisekosten.Personal; |
| 31 | using PureBusinessClasses; |
| 32 | using NDO.Query; |
| 33 | using System.Linq; |
| 34 | using System.Collections.Generic; |
| 35 | |
| 36 | namespace NdoUnitTests { |
| 37 | ····/// <summary> |
| 38 | ····/// Polymorphic tests. |
| 39 | ····/// </summary> |
| 40 | ····[TestFixture] |
| 41 | ····public class PolymorphicWTable : NDOTest |
| 42 | ····{ |
| 43 | ········public PolymorphicWTable() { |
| 44 | ········} |
| 45 | |
| 46 | ········private Reise r; |
| 47 | ········private Kostenpunkt kp; |
| 48 | ········private ICollection onSavingCollection = null; |
| 49 | |
| 50 | ········[SetUp] |
| 51 | ········public void Setup() { |
| 52 | ············r = CreateReise("ADC"); |
| 53 | ············kp = CreateBeleg(); |
| 54 | ········} |
| 55 | |
| 56 | ········[TearDown] |
| 57 | ········public void TearDown() { |
| 58 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 59 | ············{ |
| 60 | ················pm.TransactionMode = TransactionMode.None; |
| 61 | |
| 62 | ················//pm.UnloadCache(); |
| 63 | ················IList reiseliste = pm.GetClassExtent(typeof(Reise), true); |
| 64 | pm. Delete( reiseliste ) ; |
| 65 | ················pm.Save(); |
| 66 | ················pm.UnloadCache(); |
| 67 | ················IQuery q; |
| 68 | ················IList liste; |
| 69 | |
| 70 | ················// We can't delete orphan Beleg object with NDO, so use direct Sql statements |
| 71 | ················using (var handler = pm.GetSqlPassThroughHandler()) |
| 72 | ················{ |
| 73 | ····················var sql = "DELETE FROM " + pm.NDOMapping.FindClass( typeof( Beleg ) ).TableName; |
| 74 | ····················handler.Execute( sql ); |
| 75 | ················} |
| 76 | |
| 77 | q = new NDOQuery<Contact>( pm ) ; |
| 78 | ················liste = q.Execute(); |
| 79 | pm. Delete( liste ) ; |
| 80 | ················pm.Save(); |
| 81 | q = new NDOQuery<Adresse>( pm ) ; |
| 82 | ················liste = q.Execute(); |
| 83 | pm. Delete( liste ) ; |
| 84 | ················pm.Save(); |
| 85 | } |
| 86 | ········} |
| 87 | |
| 88 | ········[Test] |
| 89 | public void TestCreateObjects( ) |
| 90 | { |
| 91 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 92 | { |
| 93 | pm. MakePersistent( r ) ; |
| 94 | ················r.AddKostenpunkt( kp ); |
| 95 | ················Assert.That( NDOObjectState.Created == kp.NDOObjectState, "Beleg should be Created: " ); |
| 96 | ············} |
| 97 | ········} |
| 98 | |
| 99 | |
| 100 | ········[Test] |
| 101 | public void TestCreateObjects2( ) |
| 102 | { |
| 103 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 104 | { |
| 105 | r. AddKostenpunkt( kp ) ; |
| 106 | ················pm.MakePersistent( r ); |
| 107 | ················Assert.That( NDOObjectState.Created == kp.NDOObjectState, "Beleg should be Created: " ); |
| 108 | ············} |
| 109 | ········} |
| 110 | |
| 111 | ········[Test] |
| 112 | public void TestCreateObjectsSave( ) |
| 113 | { |
| 114 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 115 | { |
| 116 | ················r.AddKostenpunkt( kp ); |
| 117 | ················pm.MakePersistent( r ); |
| 118 | ················pm.Save(); |
| 119 | |
| 120 | ················pm.UnloadCache(); |
| 121 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
| 122 | Assert. That( r != null, "Reise not found" ) ; |
| 123 | Assert. That( 1 == r. Kostenpunkte. Count ) ; |
| 124 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
| 125 | ············} |
| 126 | ········} |
| 127 | |
| 128 | ········[Test] |
| 129 | public void TestCreateManyObjectsSave( ) |
| 130 | { |
| 131 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 132 | { |
| 133 | ················r.AddKostenpunkt( kp ); |
| 134 | ················pm.MakePersistent( r ); |
| 135 | ················pm.Save(); |
| 136 | |
| 137 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 138 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 139 | ················pm.Save(); |
| 140 | ················pm.UnloadCache(); |
| 141 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
| 142 | Assert. That( r != null, "Reise not found" ) ; |
| 143 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: " ) ; |
| 144 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
| 145 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: " ) ; |
| 146 | ············} |
| 147 | ········} |
| 148 | |
| 149 | ········[Test] |
| 150 | public void TestCreatePolymorphicObjectsSave( ) |
| 151 | { |
| 152 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 153 | { |
| 154 | ················r.AddKostenpunkt( kp ); |
| 155 | ················pm.MakePersistent( r ); |
| 156 | ················pm.Save(); |
| 157 | |
| 158 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
| 159 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 160 | ················pm.Save(); |
| 161 | ················pm.UnloadCache(); |
| 162 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
| 163 | Assert. That( r != null, "Reise not found" ) ; |
| 164 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
| 165 | Assert. That( 3 == r. Kostenpunkte. Count, "Anzahl Belege: " ) ; |
| 166 | Assert. That( 300 == r. Gesamtkosten, "Gesamtkosten: " ) ; |
| 167 | Assert. That( typeof( Beleg ) == r. Kostenpunkte[0]. GetType( ) , "Type" ) ; |
| 168 | Assert. That( typeof( PKWFahrt ) == r. Kostenpunkte[1]. GetType( ) , "Type" ) ; |
| 169 | Assert. That( typeof( Beleg ) == r. Kostenpunkte[2]. GetType( ) , "Type" ) ; |
| 170 | } |
| 171 | ········} |
| 172 | |
| 173 | ········[Test] |
| 174 | ········public void TestPolymorphicQuery() |
| 175 | ········{ |
| 176 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 177 | ············{ |
| 178 | r. AddKostenpunkt( kp ) ; |
| 179 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
| 180 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 181 | pm. MakePersistent( r ) ; |
| 182 | ················pm.Save(); |
| 183 | ················pm.UnloadCache(); |
| 184 | |
| 185 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
| 186 | ················IList l = q.Execute(); |
| 187 | Assert. That( 3 == l. Count, "Anzahl Belege: " ) ; |
| 188 | ············} |
| 189 | ········} |
| 190 | |
| 191 | |
| 192 | ········[Test] |
| 193 | ········public void TestPolymorphicAggregateQuery() |
| 194 | ········{ |
| 195 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 196 | ············{ |
| 197 | r. AddKostenpunkt( kp ) ; |
| 198 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
| 199 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 200 | pm. MakePersistent( r ) ; |
| 201 | ················if (r.NDOObjectId.Id[0] is Int32) |
| 202 | ················{ |
| 203 | ····················pm.Save(); |
| 204 | ····················decimal sum = 0m; |
| 205 | foreach ( Kostenpunkt kp2 in r. Kostenpunkte) |
| 206 | ····················{ |
| 207 | sum += ( Int32) kp2. NDOObjectId. Id[0]; |
| 208 | ····················} |
| 209 | |
| 210 | ····················IQuery q = new NDOQuery<Kostenpunkt>(pm, null); |
| 211 | ····················decimal newsum = (decimal)q.ExecuteAggregate("oid", AggregateType.Sum); |
| 212 | Assert. That( sum == newsum, "Summe stimmt nicht: " ) ; |
| 213 | ····················decimal newcount = (decimal)q.ExecuteAggregate("oid", AggregateType.Count); |
| 214 | Assert. That( 3 == newcount, "Summe stimmt nicht: " ) ; |
| 215 | ················} |
| 216 | ············} |
| 217 | ········} |
| 218 | |
| 219 | ········[Test] |
| 220 | ········public void TestOnSavingEvent() |
| 221 | ········{ |
| 222 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 223 | ············{ |
| 224 | r. AddKostenpunkt( kp ) ; |
| 225 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
| 226 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 227 | pm. MakePersistent( r ) ; |
| 228 | pm. OnSavingEvent += new OnSavingHandler( this. OnSavingListener ) ; |
| 229 | ················pm.Save(); |
| 230 | Assert. That( this. onSavingCollection != null, "onSavingCollection is null" ) ; |
| 231 | ············} |
| 232 | ········} |
| 233 | |
| 234 | ········private void OnSavingListener(ICollection c) |
| 235 | ········{ |
| 236 | ············this.onSavingCollection = c; |
| 237 | ········} |
| 238 | |
| 239 | |
| 240 | |
| 241 | ········[Ignore("Future Feature")] |
| 242 | ········[Test] |
| 243 | ········public void TestPolymorphicQueryWithSql() |
| 244 | ········{ |
| 245 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 246 | { |
| 247 | r. AddKostenpunkt( kp ) ; |
| 248 | r. AddKostenpunkt( CreatePkw( 100 ) ) ; |
| 249 | r. AddKostenpunkt( CreateBeleg( 50 ) ) ; |
| 250 | ················pm.MakePersistent( r ); |
| 251 | ················pm.Save(); |
| 252 | ················pm.UnloadCache(); |
| 253 | |
| 254 | ················string sql = @"SELECT DISTINCT Reise.ID FROM Reise, relBelegKostenpunkt, PKWFahrt, Beleg WHERE ((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 4) AND PKWFahrt.ID != 0 ) OR··((relBelegKostenpunkt.IDReise = Reise.ID AND relBelegKostenpunkt.TCBeleg = 3) AND Beleg.ID != 0)"; |
| 255 | ················//string sql = "select distinct Reise.ID from Reise"; |
| 256 | ················//string sql = "select * from Reise"; |
| 257 | |
| 258 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, sql, true, QueryLanguage.Sql); |
| 259 | ················//System.Diagnostics.Debug.WriteLine(q.GeneratedQuery); |
| 260 | |
| 261 | ················IList l = q.Execute(); |
| 262 | Assert. That( 1 == l. Count, "Anzahl Reisen: " ) ; |
| 263 | ············} |
| 264 | ········} |
| 265 | |
| 266 | ········ |
| 267 | ········[Test] |
| 268 | ········public void TestAddObjectSave() { |
| 269 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 270 | { |
| 271 | ················pm.MakePersistent( r ); |
| 272 | ················pm.Save(); |
| 273 | r. AddKostenpunkt( kp ) ; |
| 274 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state" ) ; |
| 275 | ················pm.Save(); |
| 276 | r = ( Reise) pm. FindObject( r. NDOObjectId ) ; |
| 277 | kp = ( Kostenpunkt) pm. FindObject( kp. NDOObjectId ) ; |
| 278 | Assert. That( r != null, "1. Reise not found" ) ; |
| 279 | Assert. That( kp != null, "2. Beleg not found" ) ; |
| 280 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "3. Wrong state" ) ; |
| 281 | Assert. That( DateTime. Now. Date == kp. Datum, "Wrong data" ) ; |
| 282 | ············} |
| 283 | ········} |
| 284 | ············ |
| 285 | ········[Test] |
| 286 | public void TestAddObjectAbort( ) |
| 287 | { |
| 288 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 289 | ············{ |
| 290 | ················pm.MakePersistent( r ); |
| 291 | ················pm.Save(); |
| 292 | r. AddKostenpunkt( kp ) ; |
| 293 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1. Wrong state" ) ; |
| 294 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 295 | ················pm.Abort(); |
| 296 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
| 297 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects" ) ; |
| 298 | ············} |
| 299 | ········} |
| 300 | |
| 301 | ········[Test] |
| 302 | public void TestRemoveObjectSave( ) |
| 303 | { |
| 304 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 305 | { |
| 306 | ················pm.MakePersistent( r ); |
| 307 | ················r.AddKostenpunkt( kp ); |
| 308 | ················pm.Save(); |
| 309 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 310 | r. Löschen( kp ) ; |
| 311 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state" ) ; |
| 312 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects" ) ; |
| 313 | ················pm.Save(); |
| 314 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
| 315 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
| 316 | ············} |
| 317 | ········} |
| 318 | ············ |
| 319 | ········[Test] |
| 320 | public void TestRemoveObjectAbort( ) |
| 321 | { |
| 322 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 323 | { |
| 324 | ················pm.MakePersistent( r ); |
| 325 | ················r.AddKostenpunkt( kp ); |
| 326 | ················pm.Save(); |
| 327 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 328 | r. Löschen( kp ) ; |
| 329 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "1. Wrong state" ) ; |
| 330 | Assert. That( 0 == r. Kostenpunkte. Count, "2. Wrong number of objects" ) ; |
| 331 | ················pm.Abort(); |
| 332 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
| 333 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state" ) ; |
| 334 | ············} |
| 335 | ········} |
| 336 | |
| 337 | ········[Test] |
| 338 | public void TestDeleteSave( ) |
| 339 | { |
| 340 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 341 | { |
| 342 | ················pm.MakePersistent( r ); |
| 343 | ················r.AddKostenpunkt( kp ); |
| 344 | ················pm.Save(); |
| 345 | pm. Delete( r ) ; |
| 346 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state" ) ; |
| 347 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state" ) ; |
| 348 | ················pm.Save(); |
| 349 | Assert. That( NDOObjectState. Transient == r. NDOObjectState, "1. Wrong state" ) ; |
| 350 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
| 351 | ············} |
| 352 | ········} |
| 353 | |
| 354 | |
| 355 | |
| 356 | ········[Test] |
| 357 | public void TestDeleteAbort( ) |
| 358 | { |
| 359 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 360 | { |
| 361 | ················pm.MakePersistent( r ); |
| 362 | ················r.AddKostenpunkt( kp ); |
| 363 | ················pm.Save(); |
| 364 | pm. Delete( r ) ; |
| 365 | Assert. That( NDOObjectState. Deleted == r. NDOObjectState, "1. Wrong state" ) ; |
| 366 | Assert. That( NDOObjectState. Deleted == kp. NDOObjectState, "2. Wrong state" ) ; |
| 367 | ················pm.Abort(); |
| 368 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1. Wrong state" ) ; |
| 369 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "2. Wrong state" ) ; |
| 370 | ············} |
| 371 | ········} |
| 372 | |
| 373 | ········[Test] |
| 374 | public void TestAddRemoveSave( ) |
| 375 | { |
| 376 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 377 | ············{ |
| 378 | ················pm.MakePersistent( r ); |
| 379 | ················pm.Save(); |
| 380 | r. AddKostenpunkt( kp ) ; |
| 381 | r. Löschen( kp ) ; |
| 382 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state" ) ; |
| 383 | ················pm.Save(); |
| 384 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
| 385 | ············} |
| 386 | ········} |
| 387 | |
| 388 | ········[Test] |
| 389 | public void TestAddRemoveAbort( ) |
| 390 | { |
| 391 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 392 | ············{ |
| 393 | ················pm.MakePersistent( r ); |
| 394 | ················pm.Save(); |
| 395 | r. AddKostenpunkt( kp ) ; |
| 396 | r. Löschen( kp ) ; |
| 397 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "1. Wrong state" ) ; |
| 398 | ················pm.Abort(); |
| 399 | Assert. That( NDOObjectState. Transient == kp. NDOObjectState, "2. Wrong state" ) ; |
| 400 | ············} |
| 401 | ········} |
| 402 | |
| 403 | ········[Test] |
| 404 | public void TestClearRelatedObjectsSave( ) |
| 405 | { |
| 406 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 407 | { |
| 408 | ················for (int i = 0; i < 10; i++) |
| 409 | ················{ |
| 410 | ····················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 411 | ················} |
| 412 | pm. MakePersistent( r ) ; |
| 413 | ················pm.Save(); |
| 414 | ················IList rr = r.Kostenpunkte.ToList(); |
| 415 | ················r.LöscheKostenpunkte(); |
| 416 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 417 | for ( int i = 0; i < 10; i++) |
| 418 | { |
| 419 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
| 420 | ················} |
| 421 | ················pm.Save(); |
| 422 | Assert. That( 0 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
| 423 | for ( int i = 0; i < 10; i++) |
| 424 | { |
| 425 | ····················Assert.That( NDOObjectState.Transient == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
| 426 | ················} |
| 427 | ············} |
| 428 | ········} |
| 429 | |
| 430 | ········[Test] |
| 431 | public void TestClearRelatedObjectsAbort( ) |
| 432 | ········{ |
| 433 | ············for(int i = 0; i < 10; i++) { |
| 434 | ················r.AddKostenpunkt(CreateBeleg(i*10+100)); |
| 435 | ············} |
| 436 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 437 | { |
| 438 | ················pm.MakePersistent( r ); |
| 439 | ················pm.Save(); |
| 440 | ················IList rr = r.Kostenpunkte.ToList(); |
| 441 | ················r.LöscheKostenpunkte(); |
| 442 | Assert. That( 0 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 443 | for ( int i = 0; i < 10; i++) |
| 444 | { |
| 445 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
| 446 | ················} |
| 447 | ················pm.Abort(); |
| 448 | Assert. That( 10 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
| 449 | for ( int i = 0; i < 10; i++) |
| 450 | { |
| 451 | ····················Assert.That( NDOObjectState.Persistent == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
| 452 | ················} |
| 453 | ············} |
| 454 | ········} |
| 455 | |
| 456 | ········[Test] |
| 457 | public void TestAssignRelatedObjectsNullSave( ) |
| 458 | { |
| 459 | for ( int i = 0; i < 3; i++) |
| 460 | ············{ |
| 461 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 462 | ············} |
| 463 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 464 | { |
| 465 | ················pm.MakePersistent( r ); |
| 466 | ················pm.Save(); |
| 467 | ················IList rr = r.Kostenpunkte.ToList(); |
| 468 | ················r.ErsetzeKostenpunkte(); |
| 469 | Assert. That( r. Kostenpunkte == null, "No objects should be there" ) ; |
| 470 | for ( int i = 0; i < 3; i++) |
| 471 | { |
| 472 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
| 473 | ················} |
| 474 | ················pm.Save(); |
| 475 | Assert. That( r. Kostenpunkte == null, "No objects should be there" ) ; |
| 476 | for ( int i = 0; i < 3; i++) |
| 477 | { |
| 478 | ····················Assert.That( NDOObjectState.Transient == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
| 479 | ················} |
| 480 | ············} |
| 481 | ········} |
| 482 | |
| 483 | ········[Test] |
| 484 | public void TestAssignRelatedObjectsNullAbort( ) |
| 485 | { |
| 486 | for ( int i = 0; i < 3; i++) |
| 487 | ············{ |
| 488 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 489 | ············} |
| 490 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 491 | { |
| 492 | ················pm.MakePersistent( r ); |
| 493 | ················pm.Save(); |
| 494 | ················IList rr = r.Kostenpunkte.ToList(); |
| 495 | ················r.ErsetzeKostenpunkte(); |
| 496 | Assert. That( r. Kostenpunkte == null, "No objects should be there" ) ; |
| 497 | for ( int i = 0; i < 3; i++) |
| 498 | { |
| 499 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
| 500 | ················} |
| 501 | ················pm.Abort(); |
| 502 | Assert. That( 3 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
| 503 | for ( int i = 0; i < 3; i++) |
| 504 | { |
| 505 | ····················Assert.That( NDOObjectState.Persistent == ( (Kostenpunkt) rr[i] ).NDOObjectState, "4. Wrong state" ); |
| 506 | ················} |
| 507 | ············} |
| 508 | ········} |
| 509 | |
| 510 | ········[Test] |
| 511 | public void TestAssignRelatedObjectsSave( ) |
| 512 | { |
| 513 | for ( int i = 0; i < 3; i++) |
| 514 | ············{ |
| 515 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 516 | ············} |
| 517 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 518 | { |
| 519 | ················pm.MakePersistent( r ); |
| 520 | ················pm.Save(); |
| 521 | ················List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
| 522 | ················Kostenpunkt nr = CreateBeleg(50); |
| 523 | neueKostenpunkte. Add( nr ) ; |
| 524 | |
| 525 | ················IList rr = r.Kostenpunkte.ToList(); |
| 526 | r. ErsetzeKostenpunkte( neueKostenpunkte ) ; |
| 527 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 528 | for ( int i = 0; i < 3; i++) |
| 529 | { |
| 530 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
| 531 | ················} |
| 532 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state" ) ; |
| 533 | |
| 534 | ················pm.Save(); |
| 535 | Assert. That( 1 == r. Kostenpunkte. Count, "4. Wrong number of objects" ) ; |
| 536 | for ( int i = 0; i < 3; i++) |
| 537 | { |
| 538 | ····················Assert.That( NDOObjectState.Transient == ( (Kostenpunkt) rr[i] ).NDOObjectState, "5. Wrong state" ); |
| 539 | ················} |
| 540 | ················Assert.That( NDOObjectState.Persistent == nr.NDOObjectState, "6. Wrong state" ); |
| 541 | ············} |
| 542 | ········} |
| 543 | |
| 544 | ········[Test] |
| 545 | public void TestAssignRelatedObjectsAbort( ) |
| 546 | { |
| 547 | for ( int i = 0; i < 3; i++) |
| 548 | ············{ |
| 549 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 550 | ············} |
| 551 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 552 | { |
| 553 | ················pm.MakePersistent( r ); |
| 554 | ················pm.Save(); |
| 555 | ················List<Kostenpunkt> neueKostenpunkte = new List<Kostenpunkt>(); |
| 556 | ················Kostenpunkt nr = CreateBeleg(200); |
| 557 | neueKostenpunkte. Add( nr ) ; |
| 558 | |
| 559 | ················IList rr = r.Kostenpunkte.ToList(); |
| 560 | r. ErsetzeKostenpunkte( neueKostenpunkte ) ; |
| 561 | Assert. That( 1 == r. Kostenpunkte. Count, "1. Wrong number of objects" ) ; |
| 562 | for ( int i = 0; i < 3; i++) |
| 563 | { |
| 564 | ····················Assert.That( NDOObjectState.Deleted == ( (Kostenpunkt) rr[i] ).NDOObjectState, "2. Wrong state" ); |
| 565 | ················} |
| 566 | Assert. That( NDOObjectState. Created == nr. NDOObjectState, "3. Wrong state" ) ; |
| 567 | |
| 568 | ················pm.Abort(); |
| 569 | Assert. That( 3 == r. Kostenpunkte. Count, "4. Wrong number of objects" ) ; |
| 570 | for ( int i = 0; i < 3; i++) |
| 571 | { |
| 572 | ····················Assert.That( NDOObjectState.Persistent == ( (Kostenpunkt) rr[i] ).NDOObjectState, "5. Wrong state" ); |
| 573 | ················} |
| 574 | ················Assert.That( NDOObjectState.Transient == nr.NDOObjectState, "6. Wrong state" ); |
| 575 | ············} |
| 576 | ········} |
| 577 | |
| 578 | |
| 579 | ········[Test] |
| 580 | public void TestHollow( ) |
| 581 | { |
| 582 | r. AddKostenpunkt( kp ) ; |
| 583 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 584 | ············{ |
| 585 | ················pm.MakePersistent( r ); |
| 586 | ················pm.Save(); |
| 587 | pm. MakeHollow( r ) ; |
| 588 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow" ) ; |
| 589 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "1: Kostenpunkt should be persistent" ) ; |
| 590 | ················var kostenpunkte = r.Kostenpunkte; |
| 591 | |
| 592 | pm. MakeHollow( r, true ) ; |
| 593 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "2: Reise should be hollow" ) ; |
| 594 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "2: Kostenpunkt should be hollow" ) ; |
| 595 | |
| 596 | ················kostenpunkte = r.Kostenpunkte; |
| 597 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "3: Reise should be persistent" ) ; |
| 598 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "3: Kostenpunkt should be hollow" ) ; |
| 599 | Assert. That( 200 == kp. Kosten, "3: Kostenpunkt should have correct Kosten" ) ; |
| 600 | Assert. That( NDOObjectState. Persistent == kp. NDOObjectState, "4: Kostenpunkt should be persistent" ) ; |
| 601 | ············} |
| 602 | ········} |
| 603 | |
| 604 | ········[Test] |
| 605 | public void TestMakeAllHollow( ) |
| 606 | { |
| 607 | r. AddKostenpunkt( kp ) ; |
| 608 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 609 | ············{ |
| 610 | ················pm.MakePersistent( r ); |
| 611 | ················pm.Save(); |
| 612 | ················pm.MakeAllHollow(); |
| 613 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "1: Reise should be hollow" ) ; |
| 614 | Assert. That( NDOObjectState. Hollow == kp. NDOObjectState, "1: Kostenpunkt should be hollow" ) ; |
| 615 | ············} |
| 616 | ········} |
| 617 | |
| 618 | |
| 619 | ········[Test] |
| 620 | public void TestMakeAllHollowUnsaved( ) |
| 621 | { |
| 622 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 623 | { |
| 624 | ················r.AddKostenpunkt( kp ); |
| 625 | ················pm.MakePersistent( r ); |
| 626 | ················pm.MakeAllHollow();··// before save, objects cannot be made hollow. => in locked objects |
| 627 | Assert. That( NDOObjectState. Created == r. NDOObjectState, "1: Reise should be created" ) ; |
| 628 | Assert. That( NDOObjectState. Created == kp. NDOObjectState, "1: Kostenpunkt should be created" ) ; |
| 629 | ············} |
| 630 | ········} |
| 631 | |
| 632 | ········[Test] |
| 633 | public void TestLoadRelatedObjects( ) |
| 634 | { |
| 635 | for ( int i = 0; i < 10; i++) |
| 636 | ············{ |
| 637 | ················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 638 | ············} |
| 639 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 640 | { |
| 641 | ················pm.MakePersistent( r ); |
| 642 | ················pm.Save(); |
| 643 | pm. MakeHollow( r, true ) ; |
| 644 | |
| 645 | ················var kpunkte = r.Kostenpunkte.ToList(); |
| 646 | Assert. That( 10 == kpunkte. Count, "Array size should be 10" ) ; |
| 647 | |
| 648 | for ( int i = 0; i < 10; i++) |
| 649 | ················{ |
| 650 | ····················Kostenpunkt rr = (Kostenpunkt)kpunkte[i]; |
| 651 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow" ) ; |
| 652 | #if !ORACLE && !MYSQL |
| 653 | Assert. That( i * 10 + 100 == rr. Kosten, "2: Kostenpunkt should be in right order" ) ; |
| 654 | #endif |
| 655 | ················} |
| 656 | |
| 657 | |
| 658 | |
| 659 | ················pm.MakeAllHollow(); |
| 660 | ················pm.UnloadCache(); |
| 661 | ················var kpunkte2 = r.Kostenpunkte.ToList(); |
| 662 | for ( int i = 0; i < 10; i++) |
| 663 | ················{ |
| 664 | ····················Kostenpunkt r1 = (Kostenpunkt)kpunkte[i]; |
| 665 | ····················Kostenpunkt r2 = (Kostenpunkt)kpunkte2[i]; |
| 666 | #if !ORACLE && !MYSQL |
| 667 | Assert. That( i * 10 + 100 == r1. Kosten, "3: Kostenpunkt should be in right order" ) ; |
| 668 | #endif |
| 669 | Assert. That( r1 != r2, "Objects should be different" ) ; |
| 670 | ················} |
| 671 | ············} |
| 672 | ········} |
| 673 | |
| 674 | ········[Test] |
| 675 | public void TestLoadRelatedObjectsSave( ) |
| 676 | { |
| 677 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 678 | ············{ |
| 679 | ················pm.MakePersistent( r ); |
| 680 | ················pm.Save(); |
| 681 | for ( int i = 0; i < 10; i++) |
| 682 | { |
| 683 | ····················r.AddKostenpunkt( CreateBeleg( i * 10 + 100 ) ); |
| 684 | ················} |
| 685 | ················pm.Save(); |
| 686 | pm. MakeHollow( r, true ) ; |
| 687 | |
| 688 | ················IList reisen = r.Kostenpunkte.ToList(); |
| 689 | |
| 690 | for ( int i = 0; i < 10; i++) |
| 691 | ················{ |
| 692 | ····················Kostenpunkt rr = (Kostenpunkt)reisen[i]; |
| 693 | Assert. That( NDOObjectState. Hollow == rr. NDOObjectState, "1: Kostenpunkt should be hollow" ) ; |
| 694 | #if !ORACLE && !MYSQL |
| 695 | Assert. That( i * 10 + 100 == rr. Kosten, "2: Kostenpunkt should be in right order" ) ; |
| 696 | #endif |
| 697 | ················} |
| 698 | |
| 699 | ················pm.MakeAllHollow(); |
| 700 | ················pm.UnloadCache(); |
| 701 | ················IList reisen2 = r.Kostenpunkte.ToList(); |
| 702 | for ( int i = 0; i < 10; i++) |
| 703 | ················{ |
| 704 | ····················Kostenpunkt r1 = (Kostenpunkt)reisen[i]; |
| 705 | ····················Kostenpunkt r2 = (Kostenpunkt)reisen2[i]; |
| 706 | #if !ORACLE && !MYSQL |
| 707 | Assert. That( i * 10 + 100 == r1. Kosten, "3: Kostenpunkt should be in right order" ) ; |
| 708 | #endif |
| 709 | Assert. That( r1 != r2, "Objects should be different" ) ; |
| 710 | ················} |
| 711 | ············} |
| 712 | ········} |
| 713 | |
| 714 | ········[Test] |
| 715 | public void TestExtentRelatedObjects( ) |
| 716 | { |
| 717 | r. AddKostenpunkt( kp ) ; |
| 718 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 719 | ············{ |
| 720 | ················pm.MakePersistent( r ); |
| 721 | ················pm.Save(); |
| 722 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "0: Reise should be persistent" ) ; |
| 723 | ················IList liste = pm.GetClassExtent(typeof(Reise)); |
| 724 | r = ( Reise) liste[0]; |
| 725 | Assert. That( 1 == liste. Count, "1: Number of Reise objects is wrong" ) ; |
| 726 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "1: Reise should be persistent" ) ; |
| 727 | Assert. That( r. Kostenpunkte != null, "2. Relation is missing" ) ; |
| 728 | Assert. That( 1 == r. Kostenpunkte. Count, "3. Wrong number of objects" ) ; |
| 729 | Assert. That( NDOObjectState. Persistent == ( ( Kostenpunkt) r. Kostenpunkte[0] ) . NDOObjectState, "4. : Kostenpunkt should be hollow" ) ; |
| 730 | |
| 731 | ················pm.UnloadCache(); |
| 732 | liste = pm. GetClassExtent( typeof( Reise ) ) ; |
| 733 | r = ( Reise) liste[0]; |
| 734 | Assert. That( NDOObjectState. Hollow == r. NDOObjectState, "5: Reise should be hollow" ) ; |
| 735 | Assert. That( r. Kostenpunkte != null, "6. Relation is missing" ) ; |
| 736 | Assert. That( 1 == r. Kostenpunkte. Count, "7. Wrong number of objects" ) ; |
| 737 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0] ) . NDOObjectState, "8. : Kostenpunkt should be hollow" ) ; |
| 738 | |
| 739 | ················pm.UnloadCache(); |
| 740 | liste = pm. GetClassExtent( typeof( Reise ) , false ) ; |
| 741 | r = ( Reise) liste[0]; |
| 742 | Assert. That( NDOObjectState. Persistent == r. NDOObjectState, "9: Reise should be persistent" ) ; |
| 743 | Assert. That( r. Kostenpunkte != null, "10. Relation is missing" ) ; |
| 744 | Assert. That( 1 == r. Kostenpunkte. Count, "11. Wrong number of objects" ) ; |
| 745 | Assert. That( NDOObjectState. Hollow == ( ( Kostenpunkt) r. Kostenpunkte[0] ) . NDOObjectState, "12. : Kostenpunkt should be hollow" ) ; |
| 746 | ············} |
| 747 | ········} |
| 748 | |
| 749 | ········[Test] |
| 750 | ········public void TestJoinQuery() |
| 751 | ········{ |
| 752 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 753 | ············{ |
| 754 | |
| 755 | ················Person p = new Person(); |
| 756 | ················p.FirstName = "Mirko"; |
| 757 | ················p.LastName = "Matytschak"; |
| 758 | ················p.Moniker = "Hallo"; |
| 759 | ················Adresse a1 = new Adresse(); |
| 760 | ················a1.Lkz = "D"; |
| 761 | ················a1.Plz = "83646"; |
| 762 | ················a1.Straße = "Nockhergasse 7"; |
| 763 | ················a1.Ort = "Bad Tölz"; |
| 764 | |
| 765 | ················Adresse a2 = new Adresse(); |
| 766 | ················a2.Ort = "Mönchen"; |
| 767 | ················a2.Plz = "80331"; |
| 768 | ················a2.Straße = "Isartorplatz 5"; |
| 769 | ················a2.Lkz = "D"; |
| 770 | |
| 771 | ················Institution i = new Institution(); |
| 772 | ················i.FirstName = "Schnulli"; |
| 773 | ················i.LastName = "Wauwau"; |
| 774 | ················i.Hausmeister = "Möller"; |
| 775 | |
| 776 | pm. MakePersistent( a1 ) ; |
| 777 | pm. MakePersistent( a2 ) ; |
| 778 | pm. MakePersistent( p ) ; |
| 779 | pm. MakePersistent( i ) ; |
| 780 | i. AddAdresse( a1 ) ; |
| 781 | p. AddAdresse( a1 ) ; |
| 782 | p. AddAdresse( a2 ) ; |
| 783 | ················pm.Save(); |
| 784 | ················pm.UnloadCache(); |
| 785 | |
| 786 | ················IQuery q = new NDOQuery<Contact>(pm, $"addresses.plz = '{a2.Plz}'"); |
| 787 | ················IList l = q.Execute(); |
| 788 | Assert. That( 1 == l. Count, "Wrong number of contacts" ) ; |
| 789 | ············} |
| 790 | ········} |
| 791 | |
| 792 | ········[Test] |
| 793 | ········public void TestPolymorphicCondition() |
| 794 | ········{ |
| 795 | r. AddKostenpunkt( kp ) ; |
| 796 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 797 | { |
| 798 | ················pm.MakePersistent( r ); |
| 799 | ················pm.Save(); |
| 800 | |
| 801 | ················pm.UnloadCache(); |
| 802 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
| 803 | q. Parameters. Add( DateTime. Now. Date ) ; |
| 804 | r = ( Reise) q. ExecuteSingle( true ) ; |
| 805 | Assert. That( r != null, "Reise not found" ) ; |
| 806 | Assert. That( r. Kostenpunkte. Count > 0, "No Beleg" ) ; |
| 807 | Assert. That( r. Kostenpunkte[0] != null, "Beleg not found" ) ; |
| 808 | ············} |
| 809 | ········} |
| 810 | |
| 811 | ········[Test] |
| 812 | ········public void TestSortedQueryAsc() |
| 813 | ········{ |
| 814 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 815 | ············{ |
| 816 | |
| 817 | r. AddKostenpunkt( kp ) ; |
| 818 | ················DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
| 819 | ················kp.Datum = yesterday; |
| 820 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 821 | ················kp.Datum = DateTime.Today; |
| 822 | pm. MakePersistent( r ) ; |
| 823 | ················pm.Save(); |
| 824 | |
| 825 | ················pm.UnloadCache(); |
| 826 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 827 | q. Orderings. Add( new AscendingOrder( "datum" ) ) ; |
| 828 | ················IList l = q.Execute(); |
| 829 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
| 830 | Assert. That( yesterday == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
| 831 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
| 832 | ············} |
| 833 | ········} |
| 834 | |
| 835 | ········[Test] |
| 836 | ········public void TestSortedQueryDesc() |
| 837 | ········{ |
| 838 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 839 | ············{ |
| 840 | r. AddKostenpunkt( kp ) ; |
| 841 | ················DateTime yesterday = DateTime.Today - new TimeSpan(1, 0, 0, 0); |
| 842 | ················kp.Datum = yesterday; |
| 843 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 844 | ················kp.Datum = DateTime.Today; |
| 845 | pm. MakePersistent( r ) ; |
| 846 | ················pm.Save(); |
| 847 | |
| 848 | ················pm.UnloadCache(); |
| 849 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 850 | q. Orderings. Add( new DescendingOrder( "datum" ) ) ; |
| 851 | ················IList l = q.Execute(); |
| 852 | |
| 853 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
| 854 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
| 855 | Assert. That( yesterday == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
| 856 | ············} |
| 857 | ········} |
| 858 | |
| 859 | ········[Test] |
| 860 | ········public void TestSortedQueryAscOneNull() |
| 861 | ········{ |
| 862 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 863 | ············{ |
| 864 | |
| 865 | r. AddKostenpunkt( kp ) ; |
| 866 | ················kp.Datum = DateTime.MinValue;··// DbNull |
| 867 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 868 | ················kp.Datum = DateTime.Today; |
| 869 | pm. MakePersistent( r ) ; |
| 870 | ················pm.Save(); |
| 871 | |
| 872 | ················pm.UnloadCache(); |
| 873 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 874 | q. Orderings. Add( new AscendingOrder( "datum" ) ) ; |
| 875 | ················IList l = q.Execute(); |
| 876 | ················//pm.VerboseMode = false; |
| 877 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
| 878 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
| 879 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
| 880 | ············} |
| 881 | ········} |
| 882 | |
| 883 | ········[Test] |
| 884 | ········public void TestSortedQueryBothNull() |
| 885 | ········{ |
| 886 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 887 | ············{ |
| 888 | |
| 889 | r. AddKostenpunkt( kp ) ; |
| 890 | ················kp.Datum = DateTime.MinValue;··// DbNull |
| 891 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 892 | ················kp.Datum = DateTime.MinValue;··// DbNull |
| 893 | pm. MakePersistent( r ) ; |
| 894 | ················pm.Save(); |
| 895 | |
| 896 | ················pm.UnloadCache(); |
| 897 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 898 | q. Orderings. Add( new AscendingOrder( "datum" ) ) ; |
| 899 | ················IList l = q.Execute(); |
| 900 | ················//pm.VerboseMode = false; |
| 901 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
| 902 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[0] ) . Datum, "Wrong Date #1" ) ; |
| 903 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong Date #2" ) ; |
| 904 | ············} |
| 905 | ········} |
| 906 | |
| 907 | ········[Test] |
| 908 | ········public void TestSortedQueryDescOneNull() |
| 909 | ········{ |
| 910 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 911 | ············{ |
| 912 | r. AddKostenpunkt( kp ) ; |
| 913 | ················kp.Datum = DateTime.MinValue; |
| 914 | r. AddKostenpunkt( kp = CreatePkw( ) ) ; |
| 915 | ················kp.Datum = DateTime.Today; |
| 916 | pm. MakePersistent( r ) ; |
| 917 | ················pm.Save(); |
| 918 | |
| 919 | ················pm.UnloadCache(); |
| 920 | ················IQuery q = new NDOQuery<Kostenpunkt>(pm); |
| 921 | q. Orderings. Add( new DescendingOrder( "datum" ) ) ; |
| 922 | ················IList l = q.Execute(); |
| 923 | ················//pm.VerboseMode = false; |
| 924 | Assert. That( 2 == l. Count, "Count wrong" ) ; |
| 925 | Assert. That( DateTime. Today == ( ( Kostenpunkt) l[0] ) . Datum, "Order wrong" ) ; |
| 926 | Assert. That( DateTime. MinValue == ( ( Kostenpunkt) l[1] ) . Datum, "Wrong object" ) ; |
| 927 | ············} |
| 928 | ········} |
| 929 | |
| 930 | |
| 931 | ········[Test] |
| 932 | ········public void TestQueryForSingleObject() |
| 933 | ········{ |
| 934 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 935 | ············{ |
| 936 | ················Kostenpunkt kp2 = CreatePkw(100); |
| 937 | r. AddKostenpunkt( kp ) ; |
| 938 | r. AddKostenpunkt( kp2 ) ; |
| 939 | pm. MakePersistent( r ) ; |
| 940 | ················pm.Save(); |
| 941 | ················pm.UnloadCache(); |
| 942 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
| 943 | q. Parameters. Add( DateTime. Now. Date ) ; |
| 944 | ················IList l = q.Execute(); |
| 945 | Assert. That( 1 == l. Count, "Count wrong" ) ; |
| 946 | ············} |
| 947 | ········} |
| 948 | |
| 949 | |
| 950 | ········[Test] |
| 951 | ········public void TestPolyDelete() |
| 952 | ········{ |
| 953 | using ( var pm = PmFactory. NewPersistenceManager( ) ) |
| 954 | ············{ |
| 955 | ················Kostenpunkt kp2 = CreatePkw(100); |
| 956 | r. AddKostenpunkt( kp ) ; |
| 957 | r. AddKostenpunkt( kp2 ) ; |
| 958 | pm. MakePersistent( r ) ; |
| 959 | ················pm.Save(); |
| 960 | ················pm.UnloadCache(); |
| 961 | ················NDOQuery<Reise> q = new NDOQuery<Reise>(pm, "belege.datum" + " = " + "{0}"); |
| 962 | q. Parameters. Add( DateTime. Now. Date ) ; |
| 963 | ················IList l = q.Execute(); |
| 964 | Assert. That( 1 == l. Count, "Count wrong" ) ; |
| 965 | ················r = (Reise) l[0]; |
| 966 | pm. Delete( r ) ; |
| 967 | ················pm.Save(); |
| 968 | ············} |
| 969 | ········} |
| 970 | |
| 971 | |
| 972 | ········[Test] |
| 973 | ········public void RelationTest() |
| 974 | ········{ |
| 975 | ············using (var pm = PmFactory.NewPersistenceManager()) |
| 976 | ············{ |
| 977 | ················NDOMapping mapping = pm.NDOMapping; |
| 978 | ················Class reiseClass = mapping.FindClass(typeof(Reise)); |
| 979 | ················Class pkwClass = mapping.FindClass(typeof(PKWFahrt)); |
| 980 | Assert. That( reiseClass != null, "Mapping for Reise not found" ) ; |
| 981 | Assert. That( pkwClass != null, "Mapping for pkw not found" ) ; |
| 982 | ················Relation r1 = reiseClass.FindRelation("belege"); |
| 983 | Assert. That( r1 != null, "Relation not found #1" ) ; |
| 984 | Assert. That( r1. ForeignRelation != null, "ForeignRelation of Reise not found" ) ; |
| 985 | ················Relation r2 = pkwClass.FindRelation("reise"); |
| 986 | Assert. That( r2 != null, "Relation not found #2" ) ; |
| 987 | Assert. That( r2. ForeignRelation != null, "ForeignRelation of PKWFahrt not found" ) ; |
| 988 | Assert. That( r1 == r2. ForeignRelation, "Back relation wrong" ) ; |
| 989 | ················//············Debug.WriteLine(r1.Parent.FullName + "->" + r1.ReferencedTypeName); |
| 990 | ················//············Debug.WriteLine(r1.ForeignRelation.Parent.FullName + "->" + r1.ForeignRelation.ReferencedTypeName); |
| 991 | ················//············Debug.WriteLine(r2.Parent.FullName + "->" + r2.ReferencedTypeName); |
| 992 | ················//············Debug.WriteLine(r2.ForeignRelation.Parent.FullName + "->" + r2.ForeignRelation.ReferencedTypeName); |
| 993 | ············} |
| 994 | ········} |
| 995 | |
| 996 | |
| 997 | ········private Kostenpunkt CreateBeleg(double betrag) |
| 998 | ········{ |
| 999 | ············return new Beleg("Taxi", betrag); |
| 1000 | ········} |
| 1001 | |
| 1002 | ········private Kostenpunkt CreateBeleg() { |
| 1003 | ············return new Beleg("Flug", 200); |
| 1004 | ········} |
| 1005 | |
| 1006 | ········private Kostenpunkt CreatePkw() { |
| 1007 | ············return CreatePkw(100); |
| 1008 | ········} |
| 1009 | |
| 1010 | ········private Kostenpunkt CreatePkw(double km) { |
| 1011 | ············return new PKWFahrt(km); |
| 1012 | ········} |
| 1013 | |
| 1014 | ········private Reise CreateReise(string zweck) { |
| 1015 | ············Reise r = new Reise(); |
| 1016 | ············r.Zweck = zweck; |
| 1017 | ············return r; |
| 1018 | ········} |
| 1019 | ····} |
| 1020 | } |
| 1021 |