public void OnLoaded_CannotCauseSameObjectToBeLoadedInSubTx_WhileItIsLoadedIntoParent_InitiatedFromParent()
        {
            using (_loadEventReceiverMock.GetMockRepository().Ordered())
            {
                _loadEventReceiverMock
                .Expect(mock => mock.OnLoaded(_order))
                .WhenCalled(
                    mi =>
                {
                    Assert.That(ClientTransaction.Current, Is.SameAs(ReadOnlyRootTransaction));
                    Assert.That(
                        () => WriteableSubTransaction.EnsureDataAvailable(_order.ID),
                        Throws.InvalidOperationException.With.Message.EqualTo(
                            "It's not possible to load objects into a subtransaction while they are being loaded into a parent transaction: "
                            + "'Order|5682f032-2f0b-494b-a31c-c97f02b89c36|System.Guid'."));
                });

                ReadOnlyRootTransaction.EnsureDataAvailable(_order.ID);

                _loadEventReceiverMock.VerifyAllExpectations();

                CheckState(ReadOnlyRootTransaction, _order, StateType.Unchanged);
                CheckState(ReadOnlyMiddleTransaction, _order, StateType.NotLoadedYet);
                CheckState(WriteableSubTransaction, _order, StateType.NotLoadedYet);
            }
        }
Esempio n. 2
0
        public void DiscardReadOnlyRootTransaction_IsAllowed()
        {
            Assert.That(ReadOnlyRootTransaction.IsDiscarded, Is.False);
            Assert.That(ReadOnlyMiddleTransaction.IsDiscarded, Is.False);
            Assert.That(WriteableSubTransaction.IsDiscarded, Is.False);

            var extensionMock = CreateAndAddExtensionMock();

            using (extensionMock.GetMockRepository().Ordered())
            {
                extensionMock
                .Expect(mock => mock.TransactionDiscard(ReadOnlyRootTransaction))
                .WhenCalled(mi => CheckTransactionHierarchy());
                extensionMock
                .Expect(mock => mock.TransactionDiscard(ReadOnlyMiddleTransaction))
                .WhenCalled(mi => CheckTransactionHierarchy());
                extensionMock
                .Expect(mock => mock.TransactionDiscard(WriteableSubTransaction))
                .WhenCalled(mi => CheckTransactionHierarchy());
            }

            ReadOnlyRootTransaction.Discard();

            extensionMock.VerifyAllExpectations();
            Assert.That(ReadOnlyRootTransaction.IsDiscarded, Is.True);
            Assert.That(ReadOnlyMiddleTransaction.IsDiscarded, Is.True);
            Assert.That(WriteableSubTransaction.IsDiscarded, Is.True);
        }
Esempio n. 3
0
        public void CreateSubTransactionInReadOnlyRootTransaction_IsForbidden()
        {
            Assert.That(ReadOnlyRootTransaction.SubTransaction, Is.SameAs(ReadOnlyMiddleTransaction));
            Assert.That(ReadOnlyMiddleTransaction.SubTransaction, Is.SameAs(WriteableSubTransaction));

            CheckForbidden(() => ReadOnlyRootTransaction.CreateSubTransaction(), "SubTransactionCreating");

            Assert.That(ReadOnlyRootTransaction.SubTransaction, Is.SameAs(ReadOnlyMiddleTransaction));
            Assert.That(ReadOnlyMiddleTransaction.SubTransaction, Is.SameAs(WriteableSubTransaction));
        }
Esempio n. 4
0
        public void EnsureDataAvailableInReadOnlyRootTransaction_IsAllowed()
        {
            CheckDataNotLoaded(ReadOnlyRootTransaction, DomainObjectIDs.Order1);
            CheckDataNotLoaded(ReadOnlyMiddleTransaction, DomainObjectIDs.Order1);
            CheckDataNotLoaded(WriteableSubTransaction, DomainObjectIDs.Order1);

            ReadOnlyRootTransaction.EnsureDataAvailable(_order1.ID);

            CheckDataLoaded(ReadOnlyRootTransaction, _order1);
            CheckDataNotLoaded(ReadOnlyMiddleTransaction, _order1);
            CheckDataNotLoaded(WriteableSubTransaction, _order1);
        }
Esempio n. 5
0
        public void RollbackInReadOnlyMiddleTransaction_IsForbidden()
        {
            Assert.That(ReadOnlyRootTransaction.HasChanged(), Is.True);
            Assert.That(ReadOnlyMiddleTransaction.HasChanged(), Is.True);
            Assert.That(WriteableSubTransaction.HasChanged(), Is.True);

            CheckForbidden(() => ReadOnlyMiddleTransaction.Rollback(), "TransactionRollingBack");

            Assert.That(ReadOnlyRootTransaction.HasChanged(), Is.True);
            Assert.That(ReadOnlyMiddleTransaction.HasChanged(), Is.True);
            Assert.That(WriteableSubTransaction.HasChanged(), Is.True);
        }
Esempio n. 6
0
        public void CommitInReadOnlyMiddleTransaction_IsForbidden()
        {
            Assert.That(ReadOnlyRootTransaction.HasChanged(), Is.True);
            Assert.That(ReadOnlyMiddleTransaction.HasChanged(), Is.True);
            Assert.That(WriteableSubTransaction.HasChanged(), Is.True);

            CheckForbidden(() => ReadOnlyMiddleTransaction.Commit(), "TransactionCommitting");

            Assert.That(ReadOnlyRootTransaction.HasChanged(), Is.True);
            Assert.That(ReadOnlyMiddleTransaction.HasChanged(), Is.True);
            Assert.That(WriteableSubTransaction.HasChanged(), Is.True);
        }
        public override void SetUp()
        {
            base.SetUp();

            _listenerDynamicMock = MockRepository.GenerateMock <IClientTransactionListener> ();
            _extensionStrictMock = MockRepository.GenerateStrictMock <IClientTransactionExtension> ();

            _readOnlyRootTransaction = ClientTransaction.CreateRootTransaction();
            ExecuteInReadOnlyRootTransaction(InitializeReadOnlyRootTransaction);
            _readOnlyMiddleTransaction = ReadOnlyRootTransaction.CreateSubTransaction();
            ExecuteInReadOnlyMiddleTransaction(InitializeReadOnlyMiddleTransaction);
            _writeableSubTransaction = ReadOnlyMiddleTransaction.CreateSubTransaction();
            ExecuteInWriteableSubTransaction(InitializeWriteableSubTransaction);
        }
 protected T ExecuteInReadOnlyRootTransaction <T> (Func <T> func)
 {
     return(ReadOnlyRootTransaction.ExecuteInScope(func));
 }
 protected void ExecuteInReadOnlyRootTransaction(Action action)
 {
     ReadOnlyRootTransaction.ExecuteInScope(action);
 }