public void TestRollBackVersionNumberOnError()
        {
            //---------------Set up test pack-------------------
            //Create object in DB
            ContactPersonOptimisticLockingVersionNumberDB contactPerson = CreateSavedCntactPersonOptimisticLockingVersionNumberDB();

            int versionNumber = contactPerson.VersionNumber;

            //---------------Execute Test ----------------------
            contactPerson.Surname = Guid.NewGuid().ToString();
            Assert.AreEqual(versionNumber, contactPerson.VersionNumber);
            try
            {
                TransactionCommitterStubDB trnCommitter = new TransactionCommitterStubDB(DatabaseConnection.CurrentConnection);
                trnCommitter.AddBusinessObject(contactPerson);
                trnCommitter.AddTransaction(new StubDatabaseFailureTransaction());
                trnCommitter.CommitTransaction();
                Assert.Fail();
            }
            //---------------Test Result -----------------------
            catch (NotImplementedException)
            {
                Assert.AreEqual(versionNumber, contactPerson.VersionNumber);
            }
        }
        public void TestDeleteObjectPriorToUpdatesConcurrencyControl()
        {
            //----------SETUP TEST PACK--------------------------
            ContactPersonOptimisticLockingVersionNumberDB contactPersonDeleteConcurrency
                = CreateSavedCntactPersonOptimisticLockingVersionNumberDB();

            //Clear object manager
            FixtureEnvironment.ClearBusinessObjectManager();
            //Load second object from DB

            ContactPersonOptimisticLockingVersionNumberDB contactPerson2
                = BORegistry.DataAccessor.BusinessObjectLoader.GetBusinessObject <ContactPersonOptimisticLockingVersionNumberDB>(contactPersonDeleteConcurrency.ID);

            //---------Run TEST ---------------------------------
            contactPersonDeleteConcurrency.MarkForDelete();
            contactPerson2.Surname = "New Surname 2";
            contactPersonDeleteConcurrency.Save();
            try
            {
                contactPerson2.Save();
                Assert.Fail();
            }
            //--------Check Result --------------------------------
            catch (BusObjDeleteConcurrencyControlException ex)
            {
                Assert.IsTrue(ex.Message.Contains("You cannot save the changes to 'ContactPersonOptimisticLockingVersionNumberDB', as another user has deleted the record"));
            }
        }
        public void TestLockingVersionNumber_OnBeginEdit()
        {
            //---------------Set up test pack-------------------
            //Create object in DB

            ContactPersonOptimisticLockingVersionNumberDB.LoadDefaultClassDef();
            ContactPersonOptimisticLockingVersionNumberDB contactPerson = new ContactPersonOptimisticLockingVersionNumberDB
                                                                              {Surname = Guid.NewGuid().ToString()};
            AddObjectToDelete(contactPerson);
            contactPerson.Save();
            //Clear object manager
            FixtureEnvironment.ClearBusinessObjectManager();
            //Load second object from DB
            ContactPersonOptimisticLockingVersionNumberDB duplicateContactPerson =
                BORegistry.DataAccessor.BusinessObjectLoader.GetBusinessObject<ContactPersonOptimisticLockingVersionNumberDB>(contactPerson.ID);
            AddObjectToDelete(duplicateContactPerson);

            //---------------Execute Test ----------------------
            //Edit first object and persist to the database.
            contactPerson.Surname = Guid.NewGuid().ToString();
            contactPerson.Save();
            //Begin Edit on second object
            try
            {
                duplicateContactPerson.FirstName = Guid.NewGuid().ToString();
                Assert.Fail("Should throw error");
            }    
                //---------------Test Result -----------------------
                //Raise Exception that the object has been edited since 
                // the user last edited.
            catch(BusObjBeginEditConcurrencyControlException ex)
            {
                Assert.IsTrue(ex.Message.Contains("You cannot Edit 'ContactPersonOptimisticLockingVersionNumberDB', as another user has edited this record"));
            }
        }
        private static ContactPersonOptimisticLockingVersionNumberDB CreateSavedCntactPersonOptimisticLockingVersionNumberDB()
        {
            ContactPersonOptimisticLockingVersionNumberDB.LoadDefaultClassDef();
            ContactPersonOptimisticLockingVersionNumberDB contactPersonOptimisticLockingVersionNumberDB;

            contactPersonOptimisticLockingVersionNumberDB         = new ContactPersonOptimisticLockingVersionNumberDB();
            contactPersonOptimisticLockingVersionNumberDB.Surname = Guid.NewGuid().ToString();
            contactPersonOptimisticLockingVersionNumberDB.Save();
            AddObjectToDelete(contactPersonOptimisticLockingVersionNumberDB);
            return(contactPersonOptimisticLockingVersionNumberDB);
        }
        public void TestLockingVersionNumber_DoesNotCauseProblemsWithMultipleSaves()
        {
            //---------------Set up test pack-------------------
            //Create object in DB

            ContactPersonOptimisticLockingVersionNumberDB.LoadDefaultClassDef();
            ContactPersonOptimisticLockingVersionNumberDB contactPerson = new ContactPersonOptimisticLockingVersionNumberDB();

            contactPerson.Surname = Guid.NewGuid().ToString();
            AddObjectToDelete(contactPerson);
            contactPerson.Save();
            //---------------Execute Test ----------------------
            //Edit first object and persist to the database.
            contactPerson.Surname = Guid.NewGuid().ToString();
            contactPerson.Save();
        }
        public void TestLockingVersionNumber_DoesNotCauseProblemsWithMultipleSaves()
        {
            //---------------Set up test pack-------------------
            //Create object in DB

            ContactPersonOptimisticLockingVersionNumberDB.LoadDefaultClassDef();
            ContactPersonOptimisticLockingVersionNumberDB contactPerson = new ContactPersonOptimisticLockingVersionNumberDB();
            contactPerson.Surname = Guid.NewGuid().ToString();
            AddObjectToDelete(contactPerson);
            contactPerson.Save();
            //---------------Execute Test ----------------------
            //Edit first object and persist to the database.
            contactPerson.Surname = Guid.NewGuid().ToString();
            contactPerson.Save();

        }
        public void TestLockingVersionNumber_OnBeginEdit()
        {
            //---------------Set up test pack-------------------
            //Create object in DB

            ContactPersonOptimisticLockingVersionNumberDB.LoadDefaultClassDef();
            ContactPersonOptimisticLockingVersionNumberDB contactPerson = new ContactPersonOptimisticLockingVersionNumberDB
            {
                Surname = Guid.NewGuid().ToString()
            };

            AddObjectToDelete(contactPerson);
            contactPerson.Save();
            //Clear object manager
            FixtureEnvironment.ClearBusinessObjectManager();
            //Load second object from DB
            ContactPersonOptimisticLockingVersionNumberDB duplicateContactPerson =
                BORegistry.DataAccessor.BusinessObjectLoader.GetBusinessObject <ContactPersonOptimisticLockingVersionNumberDB>(contactPerson.ID);

            AddObjectToDelete(duplicateContactPerson);

            //---------------Execute Test ----------------------
            //Edit first object and persist to the database.
            contactPerson.Surname = Guid.NewGuid().ToString();
            contactPerson.Save();
            //Begin Edit on second object
            try
            {
                duplicateContactPerson.FirstName = Guid.NewGuid().ToString();
                Assert.Fail("Should throw error");
            }
            //---------------Test Result -----------------------
            //Raise Exception that the object has been edited since
            // the user last edited.
            catch (BusObjBeginEditConcurrencyControlException ex)
            {
                Assert.IsTrue(ex.Message.Contains("You cannot Edit 'ContactPersonOptimisticLockingVersionNumberDB', as another user has edited this record"));
            }
        }
 private static ContactPersonOptimisticLockingVersionNumberDB CreateSavedCntactPersonOptimisticLockingVersionNumberDB()
 {
     ContactPersonOptimisticLockingVersionNumberDB.LoadDefaultClassDef();
     ContactPersonOptimisticLockingVersionNumberDB contactPersonOptimisticLockingVersionNumberDB;
     contactPersonOptimisticLockingVersionNumberDB = new ContactPersonOptimisticLockingVersionNumberDB();
     contactPersonOptimisticLockingVersionNumberDB.Surname = Guid.NewGuid().ToString();
     contactPersonOptimisticLockingVersionNumberDB.Save();
     AddObjectToDelete(contactPersonOptimisticLockingVersionNumberDB);
     return contactPersonOptimisticLockingVersionNumberDB;
 }