Ejemplo n.º 1
0
        public void LinqCustomQuery_CallsFilterCustomQueryResult()
        {
            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener>();

            listenerMock
            .Expect(
                mock => mock.FilterCustomQueryResult(
                    Arg.Is(TestableClientTransaction),
                    Arg <IQuery> .Is.Anything,
                    Arg <IEnumerable <int> > .List.Equal(new[] { 1, 2, 3, 4, 5 })))
            .Return(new[] { 1, 2, 3 });

            TestableClientTransaction.AddListener(listenerMock);
            try
            {
                var query  = from o in QueryFactory.CreateLinqQuery <Order>() where o.OrderNumber <= 5 orderby o.OrderNumber select o.OrderNumber;
                var result = query.ToArray();

                listenerMock.VerifyAllExpectations();
                Assert.That(result, Is.EqualTo(new[] { 1, 2, 3 }));
            }
            finally
            {
                TestableClientTransaction.RemoveListener(listenerMock);
            }
        }
Ejemplo n.º 2
0
        public void Events_New_WithHierarchy()
        {
            Order newObject;

            using (ClientTransaction.Current.CreateSubTransaction().EnterDiscardingScope())
            {
                var middleTopTransaction = ClientTransaction.Current;
                newObject = Order.NewObject();

                using (ClientTransaction.Current.CreateSubTransaction().EnterDiscardingScope())
                {
                    var middleBottomTransaction = ClientTransaction.Current;
                    newObject.EnsureDataAvailable();

                    using (ClientTransaction.Current.CreateSubTransaction().EnterDiscardingScope())
                    {
                        var subSubTransaction = ClientTransaction.Current;

                        Assert.That(newObject.TransactionContext[TestableClientTransaction].State, Is.EqualTo(StateType.Invalid));
                        Assert.That(newObject.TransactionContext[middleTopTransaction].State, Is.EqualTo(StateType.New));
                        Assert.That(newObject.TransactionContext[middleBottomTransaction].State, Is.EqualTo(StateType.Unchanged));
                        Assert.That(newObject.TransactionContext[subSubTransaction].State, Is.EqualTo(StateType.NotLoadedYet));

                        var clientTransactionListener = MockRepository.GenerateMock <IClientTransactionListener>();
                        TestableClientTransaction.AddListener(clientTransactionListener);
                        ClientTransactionTestHelper.AddListener(middleTopTransaction, clientTransactionListener);
                        ClientTransactionTestHelper.AddListener(middleBottomTransaction, clientTransactionListener);
                        ClientTransactionTestHelper.AddListener(subSubTransaction, clientTransactionListener);
                        try
                        {
                            UnloadService.UnloadAll(ClientTransaction.Current);
                        }
                        finally
                        {
                            TestableClientTransaction.RemoveListener(clientTransactionListener);
                            ClientTransactionTestHelper.RemoveListener(middleTopTransaction, clientTransactionListener);
                            ClientTransactionTestHelper.RemoveListener(middleBottomTransaction, clientTransactionListener);
                            ClientTransactionTestHelper.RemoveListener(subSubTransaction, clientTransactionListener);
                        }

                        clientTransactionListener.AssertWasCalled(mock => mock.ObjectMarkedInvalid(middleTopTransaction, newObject));
                        clientTransactionListener.AssertWasCalled(
                            mock => mock.DataContainerMapUnregistering(Arg.Is(middleTopTransaction), Arg <DataContainer> .Matches(dc => dc.ID == newObject.ID)));

                        clientTransactionListener.AssertWasCalled(
                            mock =>
                            mock.DataContainerMapUnregistering(Arg.Is(middleBottomTransaction), Arg <DataContainer> .Matches(dc => dc.ID == newObject.ID)));

                        clientTransactionListener.AssertWasCalled(mock => mock.ObjectMarkedInvalid(subSubTransaction, newObject));
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public void Events_New()
        {
            var order = Order.NewObject();

            var mockRepository            = new MockRepository();
            var clientTransactionListener = mockRepository.DynamicMock <IClientTransactionListener> ();
            var unloadEventReceiver       = mockRepository.StrictMock <IUnloadEventReceiver> ();

            order.SetUnloadEventReceiver(unloadEventReceiver);

            using (mockRepository.Ordered())
            {
                clientTransactionListener
                .Expect(
                    mock =>
                    mock.ObjectsUnloading(
                        Arg.Is(TestableClientTransaction), Arg <ReadOnlyCollection <DomainObject> > .List.Equal(new[] { order })));
                unloadEventReceiver.Expect(mock => mock.OnUnloading(order));

                using (mockRepository.Unordered())
                {
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(Arg.Is(TestableClientTransaction), Arg <RelationEndPointID> .Is.Anything)).Repeat.AtLeastOnce();

                    clientTransactionListener.Expect(mock => mock.DataContainerMapUnregistering(TestableClientTransaction, order.InternalDataContainer));
                    clientTransactionListener.Expect(mock => mock.ObjectMarkedInvalid(TestableClientTransaction, order));
                }

                unloadEventReceiver.Expect(mock => mock.OnUnloaded(order));
                clientTransactionListener
                .Expect(
                    mock =>
                    mock.ObjectsUnloaded(
                        Arg.Is(TestableClientTransaction), Arg <ReadOnlyCollection <DomainObject> > .List.Equal(new[] { order })));
            }
            mockRepository.ReplayAll();

            TestableClientTransaction.AddListener(clientTransactionListener);
            try
            {
                UnloadService.UnloadAll(TestableClientTransaction);
            }
            finally
            {
                TestableClientTransaction.RemoveListener(clientTransactionListener);
            }

            mockRepository.VerifyAll();
        }
        public void CollectionQuery_CallsFilterQueryResult_AndAllowsGetObjectDuringFiltering()
        {
            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener> ();

            listenerMock
            .Expect(mock => mock.FilterQueryResult(Arg.Is(TestableClientTransaction), Arg <QueryResult <DomainObject> > .Is.Anything))
            .Return(TestQueryFactory.CreateTestQueryResult <DomainObject> ())
            .WhenCalled(mi => DomainObjectIDs.OrderItem1.GetObject <OrderItem>());
            TestableClientTransaction.AddListener(listenerMock);

            var query = QueryFactory.CreateQueryFromConfiguration("OrderQuery");

            query.Parameters.Add("customerID", DomainObjectIDs.Customer1);
            TestableClientTransaction.QueryManager.GetCollection(query);

            listenerMock.VerifyAllExpectations();
            listenerMock.BackToRecord(); // For Discarding
        }
Ejemplo n.º 5
0
        public void InvokesFilterQueryResultEvent()
        {
            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener>();

            var fakeResult = new[] { new object[0] };

            listenerMock
            .Expect(
                mock => mock.FilterCustomQueryResult(
                    Arg.Is(TestableClientTransaction), Arg.Is(_query), Arg <IEnumerable <object[]> > .Matches(e => e.Count() == 2)))
            .Return(fakeResult);

            TestableClientTransaction.AddListener(listenerMock);

            var result = QueryManager.GetCustom(_query, QueryResultRowTestHelper.ExtractRawValues);

            Assert.That(result, Is.SameAs(fakeResult));
        }
Ejemplo n.º 6
0
        public void OppositeObjectID_Get_DoesNotRaisePropertyReadEvents()
        {
            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener> ();

            TestableClientTransaction.AddListener(listenerMock);

            Dev.Null = _endPoint.OppositeObjectID;

            listenerMock.AssertWasNotCalled(mock => mock.PropertyValueReading(
                                                Arg <ClientTransaction> .Is.Anything,
                                                Arg <DomainObject> .Is.Anything,
                                                Arg <PropertyDefinition> .Is.Anything,
                                                Arg <ValueAccess> .Is.Anything));
            listenerMock.AssertWasNotCalled(mock => mock.PropertyValueRead(
                                                Arg <ClientTransaction> .Is.Anything,
                                                Arg <DomainObject> .Is.Anything,
                                                Arg <PropertyDefinition> .Is.Anything,
                                                Arg <object> .Is.Anything,
                                                Arg <ValueAccess> .Is.Anything));
        }
        public void GetObjects_NewObjects_Events()
        {
            var expectedObjects = new DomainObject[] { Order.NewObject(), OrderItem.NewObject() };

            _eventReceiver.Clear();

            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener> ();

            TestableClientTransaction.AddListener(listenerMock);

            LifetimeService.GetObjects <DomainObject> (TestableClientTransaction, expectedObjects[0].ID, expectedObjects[1].ID);
            Assert.That(_eventReceiver.LoadedDomainObjectLists, Is.Empty);

            listenerMock.AssertWasNotCalled(mock => mock.ObjectsLoading(
                                                Arg <ClientTransaction> .Is.Anything,
                                                Arg <ReadOnlyCollection <ObjectID> > .Is.Anything));
            listenerMock.AssertWasNotCalled(mock => mock.ObjectsLoaded(
                                                Arg <ClientTransaction> .Is.Anything,
                                                Arg <ReadOnlyCollection <DomainObject> > .Is.Anything));
        }
        public void GetObjects_LoadedObjects_Events()
        {
            DomainObjectIDs.Order1.GetObject <Order> ();
            DomainObjectIDs.Order3.GetObject <Order> ();
            DomainObjectIDs.OrderItem1.GetObject <OrderItem>();

            _eventReceiver.Clear();

            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener> ();

            TestableClientTransaction.AddListener(listenerMock);

            LifetimeService.GetObjects <DomainObject> (TestableClientTransaction, DomainObjectIDs.Order1, DomainObjectIDs.Order3, DomainObjectIDs.OrderItem1);
            Assert.That(_eventReceiver.LoadedDomainObjectLists, Is.Empty);

            listenerMock.AssertWasNotCalled(mock => mock.ObjectsLoading(
                                                Arg <ClientTransaction> .Is.Anything,
                                                Arg <ReadOnlyCollection <ObjectID> > .Is.Anything));
            listenerMock.AssertWasNotCalled(mock => mock.ObjectsLoaded(
                                                Arg <ClientTransaction> .Is.Anything,
                                                Arg <ReadOnlyCollection <DomainObject> > .Is.Anything));
        }
        public void GetObjects_UnloadedObjects_Events()
        {
            var listenerMock = MockRepository.GenerateMock <IClientTransactionListener> ();

            TestableClientTransaction.AddListener(listenerMock);

            DomainObject[] objects = LifetimeService.GetObjects <DomainObject> (
                TestableClientTransaction,
                DomainObjectIDs.Order1,
                DomainObjectIDs.Order3,
                DomainObjectIDs.OrderItem1);
            Assert.That(_eventReceiver.LoadedDomainObjectLists.Count, Is.EqualTo(1));
            Assert.That(_eventReceiver.LoadedDomainObjectLists[0], Is.EqualTo(objects));

            listenerMock.AssertWasCalled(mock => mock.ObjectsLoading(
                                             Arg.Is(TestableClientTransaction),
                                             Arg <ReadOnlyCollection <ObjectID> > .List.Equal(new[] { DomainObjectIDs.Order1, DomainObjectIDs.Order3, DomainObjectIDs.OrderItem1 })));

            listenerMock.AssertWasCalled(mock => mock.ObjectsLoaded(
                                             Arg.Is(TestableClientTransaction),
                                             Arg <ReadOnlyCollection <DomainObject> > .List.Equal(objects)));
        }
Ejemplo n.º 10
0
        public void Events_EmptyTransaction()
        {
            var mockRepository = new MockRepository();
            // Actual events are more comprehensive, since all opposite objects are also unloaded. We only test for some of them, so use a dynamic mock.
            var clientTransactionListener = mockRepository.DynamicMock <IClientTransactionListener> ();

            mockRepository.ReplayAll();

            TestableClientTransaction.AddListener(clientTransactionListener);
            try
            {
                UnloadService.UnloadAll(TestableClientTransaction);
            }
            finally
            {
                TestableClientTransaction.RemoveListener(clientTransactionListener);
            }

            clientTransactionListener.AssertWasNotCalled(
                mock => mock.ObjectsUnloading(Arg <ClientTransaction> .Is.Anything, Arg <ReadOnlyCollection <DomainObject> > .Is.Anything));
            clientTransactionListener.AssertWasNotCalled(
                mock => mock.ObjectsUnloaded(Arg <ClientTransaction> .Is.Anything, Arg <ReadOnlyCollection <DomainObject> > .Is.Anything));
        }
Ejemplo n.º 11
0
        public void Events_Cancellation()
        {
            var order = LoadOrderWithRelations(DomainObjectIDs.Order1);

            var mockRepository            = new MockRepository();
            var clientTransactionListener = mockRepository.StrictMock <IClientTransactionListener> ();
            var unloadEventReceiver       = mockRepository.StrictMock <IUnloadEventReceiver> ();

            var exception = new Exception("Test");

            order.SetUnloadEventReceiver(unloadEventReceiver);

            using (mockRepository.Ordered())
            {
                clientTransactionListener
                .Expect(
                    mock =>
                    mock.ObjectsUnloading(
                        Arg.Is(TestableClientTransaction), Arg <ReadOnlyCollection <DomainObject> > .List.ContainsAll(new[] { order })));
                unloadEventReceiver.Expect(mock => mock.OnUnloading(order)).Throw(exception);
            }
            mockRepository.ReplayAll();

            TestableClientTransaction.AddListener(clientTransactionListener);
            try
            {
                Assert.That(() => UnloadService.UnloadAll(TestableClientTransaction), Throws.Exception.SameAs(exception));
            }
            finally
            {
                TestableClientTransaction.RemoveListener(clientTransactionListener);
            }

            mockRepository.VerifyAll();

            CheckDataAndEndPoints(order, true);
        }
        public void CopyCollectionEventHandlers_DoesNotLoadRelatedObjectContentsInDestinationTransaction()
        {
            var mockRepository = new MockRepository();
            var listenerMock   = mockRepository.StrictMock <IClientTransactionListener> ();

            var innerTransaction = new TestableClientTransaction();

            listenerMock.Stub(stub => stub.TransactionDiscard(innerTransaction));

            listenerMock.DataContainerMapRegistering(null, null);
            LastCall.IgnoreArguments().Repeat.Any();
            listenerMock.RelationEndPointMapRegistering(null, null);
            LastCall.IgnoreArguments().Repeat.Any();
            listenerMock.VirtualRelationEndPointStateUpdated(null, null, null);
            LastCall.IgnoreArguments().Repeat.Any();

            mockRepository.ReplayAll();

            Order order = DomainObjectIDs.Order1.GetObject <Order> ();

            order.OrderItems.Added += delegate { };

            using (innerTransaction.EnterDiscardingScope())
            {
                // preload order, but not orderItems
                order.GetHandle().GetObject();

                innerTransaction.AddListener(listenerMock);
                int loadedObjectsBefore = innerTransaction.DataManager.DataContainers.Count;
                innerTransaction.CopyCollectionEventHandlers(order, TestableClientTransaction);
                int loadedObjectsAfter = innerTransaction.DataManager.DataContainers.Count;
                Assert.That(loadedObjectsAfter, Is.EqualTo(loadedObjectsBefore));
            }

            mockRepository.VerifyAll();
        }
Ejemplo n.º 13
0
        public void Events_Recalculation()
        {
            var order1 = DomainObjectIDs.Order1.GetObject <Order> ();
            var order3 = (Order)LifetimeService.GetObjectReference(TestableClientTransaction, DomainObjectIDs.Order3);
            var order4 = (Order)LifetimeService.GetObjectReference(TestableClientTransaction, DomainObjectIDs.Order4);

            var mockRepository = new MockRepository();
            // Actual events are more comprehensive, since all opposite objects are also unloaded. We only test for some of them, so use a dynamic mock.
            var clientTransactionListener = mockRepository.DynamicMock <IClientTransactionListener> ();
            var unloadEventReceiver       = mockRepository.StrictMock <IUnloadEventReceiver> ();

            order1.SetUnloadEventReceiver(unloadEventReceiver);
            order3.SetUnloadEventReceiver(unloadEventReceiver);
            order4.SetUnloadEventReceiver(unloadEventReceiver);

            using (mockRepository.Ordered())
            {
                clientTransactionListener
                .Expect(
                    mock => mock.ObjectsUnloading(
                        Arg.Is(TestableClientTransaction),
                        Arg <ReadOnlyCollection <DomainObject> > .List.Equal(new[] { order1 })))
                .WhenCalled(mi => order3.EnsureDataAvailable());
                unloadEventReceiver.Expect(mock => mock.OnUnloading(order1));
                clientTransactionListener
                .Expect(
                    mock => mock.ObjectsUnloading(
                        Arg.Is(TestableClientTransaction),
                        Arg <ReadOnlyCollection <DomainObject> > .List.Equal(new[] { order3 })));
                unloadEventReceiver
                .Expect(mock => mock.OnUnloading(order3))
                .WhenCalled(mi => order4.EnsureDataAvailable());
                clientTransactionListener
                .Expect(
                    mock => mock.ObjectsUnloading(
                        Arg.Is(TestableClientTransaction),
                        Arg <ReadOnlyCollection <DomainObject> > .List.Equal(new[] { order4 })));
                unloadEventReceiver.Expect(mock => mock.OnUnloading(order4));

                using (mockRepository.Unordered())
                {
                    clientTransactionListener.Expect(
                        mock => mock.DataContainerMapUnregistering(Arg.Is(TestableClientTransaction), Arg <DataContainer> .Matches(dc => dc.ID == order1.ID)));
                    clientTransactionListener.Expect(
                        mock => mock.DataContainerMapUnregistering(Arg.Is(TestableClientTransaction), Arg <DataContainer> .Matches(dc => dc.ID == order3.ID)));
                    clientTransactionListener.Expect(
                        mock => mock.DataContainerMapUnregistering(Arg.Is(TestableClientTransaction), Arg <DataContainer> .Matches(dc => dc.ID == order4.ID)));
                }

                unloadEventReceiver.Expect(mock => mock.OnUnloaded(order4));
                unloadEventReceiver.Expect(mock => mock.OnUnloaded(order3));
                unloadEventReceiver.Expect(mock => mock.OnUnloaded(order1));
                clientTransactionListener
                .Expect(
                    mock => mock.ObjectsUnloaded(
                        Arg.Is(TestableClientTransaction),
                        Arg <ReadOnlyCollection <DomainObject> > .List.Equal(new[] { order1, order3, order4 })));
            }
            mockRepository.ReplayAll();

            TestableClientTransaction.AddListener(clientTransactionListener);
            try
            {
                UnloadService.UnloadAll(TestableClientTransaction);
            }
            finally
            {
                TestableClientTransaction.RemoveListener(clientTransactionListener);
            }

            mockRepository.VerifyAll();
        }
Ejemplo n.º 14
0
        public void Events()
        {
            var order1 = LoadOrderWithRelations(DomainObjectIDs.Order1);
            var order3 = LoadOrderWithRelations(DomainObjectIDs.Order3);

            var mockRepository = new MockRepository();
            // Actual events are more comprehensive, since all opposite objects are also unloaded. We only test for some of them, so use a dynamic mock.
            var clientTransactionListener = mockRepository.DynamicMock <IClientTransactionListener>();
            var unloadEventReceiver       = mockRepository.StrictMock <IUnloadEventReceiver>();

            order1.SetUnloadEventReceiver(unloadEventReceiver);
            order3.SetUnloadEventReceiver(unloadEventReceiver);

            using (mockRepository.Ordered())
            {
                clientTransactionListener
                .Expect(
                    mock => mock.ObjectsUnloading(
                        Arg.Is(TestableClientTransaction),
                        Arg <ReadOnlyCollection <DomainObject> > .List.ContainsAll(new[] { order1, order3 })));
                unloadEventReceiver.Expect(mock => mock.OnUnloading(order1));
                unloadEventReceiver.Expect(mock => mock.OnUnloading(order3));

                using (mockRepository.Unordered())
                {
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(TestableClientTransaction, RelationEndPointID.Resolve(order1, o => o.Customer)));
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(TestableClientTransaction, RelationEndPointID.Resolve(order1, o => o.Official)));
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(TestableClientTransaction, RelationEndPointID.Resolve(order1, o => o.OrderTicket)));
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(TestableClientTransaction, RelationEndPointID.Resolve(order3, o => o.Customer)));
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(TestableClientTransaction, RelationEndPointID.Resolve(order3, o => o.Official)));
                    clientTransactionListener.Expect(
                        mock => mock.RelationEndPointMapUnregistering(TestableClientTransaction, RelationEndPointID.Resolve(order3, o => o.OrderTicket)));

                    clientTransactionListener.Expect(mock => mock.DataContainerMapUnregistering(TestableClientTransaction, order1.InternalDataContainer));
                    clientTransactionListener.Expect(mock => mock.DataContainerMapUnregistering(TestableClientTransaction, order3.InternalDataContainer));
                }

                unloadEventReceiver.Expect(mock => mock.OnUnloaded(order3));
                unloadEventReceiver.Expect(mock => mock.OnUnloaded(order1));
                clientTransactionListener
                .Expect(
                    mock => mock.ObjectsUnloaded(
                        Arg.Is(TestableClientTransaction),
                        Arg <ReadOnlyCollection <DomainObject> > .List.ContainsAll(new[] { order1, order3 })));
            }
            mockRepository.ReplayAll();

            TestableClientTransaction.AddListener(clientTransactionListener);
            try
            {
                UnloadService.UnloadAll(TestableClientTransaction);
            }
            finally
            {
                TestableClientTransaction.RemoveListener(clientTransactionListener);
            }

            mockRepository.VerifyAll();
        }