示例#1
0
        public void Commit()
        {
            using (_mockRepository.Ordered())
            {
                // First run of BeginCommit: fakeChangedPersistableItem, _fakeNewPersistableItem in commit set - event raised for both
                _dataManagerMock
                .Expect(mock => mock.GetLoadedDataByObjectState(StateType.Changed, StateType.Deleted, StateType.New))
                .Return(new[] { _fakeChangedPersistableItem, _fakeNewPersistableItem });
                ExpectTransactionCommitting(_fakeChangedDomainObject, _fakeNewDomainObject);

                // Second run of BeginCommit: _fakeChangedPersistableItem, _fakeNewPersistableItem, _fakeDeletedPersistableItem in commit set
                // Event is raised just for _fakeDeletedPersistableItem - the others have already got their event
                _dataManagerMock
                .Expect(mock => mock.GetLoadedDataByObjectState(StateType.Changed, StateType.Deleted, StateType.New))
                .Return(new[] { _fakeChangedPersistableItem, _fakeNewPersistableItem, _fakeDeletedPersistableItem });
                ExpectTransactionCommitting(_fakeDeletedDomainObject);

                // End of BeginCommit: _fakeNewPersistableItem, _fakeDeletedPersistableItem in commit set - events already raised for all of those
                _dataManagerMock
                .Expect(mock => mock.GetLoadedDataByObjectState(StateType.Changed, StateType.Deleted, StateType.New))
                .Return(new[] { _fakeNewPersistableItem, _fakeDeletedPersistableItem });

                // CommitValidate: _fakeNewPersistableItem, _fakeDeletedPersistableItem in commit set - this is what actually gets committed
                ExpectTransactionCommitValidate(new[] { _fakeNewPersistableItem, _fakeDeletedPersistableItem });

                // Commit _fakeNewPersistableItem, _fakeDeletedPersistableItem found earlier
                ExpectPersistData(_fakeNewPersistableItem, _fakeDeletedPersistableItem);
                _dataManagerMock.Expect(mock => mock.Commit());

                // Raise event for _fakeNewPersistableItem only, _fakeDeletedPersistableItem was deleted
                ExpectTransactionCommitted(_fakeNewDomainObject);
            }
            _mockRepository.ReplayAll();

            _agent.CommitData();

            _mockRepository.VerifyAll();
        }