public virtual IDataManager CreateDataManager(
            ClientTransaction constructedTransaction,
            IClientTransactionEventSink eventSink,
            IInvalidDomainObjectManager invalidDomainObjectManager,
            IPersistenceStrategy persistenceStrategy,
            ITransactionHierarchyManager hierarchyManager)
        {
            ArgumentUtility.CheckNotNull("constructedTransaction", constructedTransaction);
            ArgumentUtility.CheckNotNull("eventSink", eventSink);
            ArgumentUtility.CheckNotNull("invalidDomainObjectManager", invalidDomainObjectManager);
            ArgumentUtility.CheckNotNull("persistenceStrategy", persistenceStrategy);
            ArgumentUtility.CheckNotNull("hierarchyManager", hierarchyManager);

            var dataContainerEventListener = CreateDataContainerEventListener(eventSink);

            var delegatingDataManager = new DelegatingDataManager();
            var objectLoader          = CreateObjectLoader(
                constructedTransaction, eventSink, persistenceStrategy, invalidDomainObjectManager, delegatingDataManager, hierarchyManager);

            var endPointManager = CreateRelationEndPointManager(
                constructedTransaction,
                GetEndPointProvider(delegatingDataManager),
                GetLazyLoader(delegatingDataManager),
                eventSink);

            var dataManager = new DataManager(
                constructedTransaction, eventSink, dataContainerEventListener, invalidDomainObjectManager, objectLoader, endPointManager);

            delegatingDataManager.InnerDataManager = dataManager;
            return(dataManager);
        }
        private void CheckDelegation(Action <IDataManager> action)
        {
            var innerMock             = MockRepository.GenerateStrictMock <IDataManager> ();
            var delegatingDataManager = new DelegatingDataManager();

            delegatingDataManager.InnerDataManager = innerMock;

            var helper = new DecoratorTestHelper <IDataManager> (delegatingDataManager, innerMock);

            helper.CheckDelegation(action);

            delegatingDataManager.InnerDataManager = null;
            Assert.That(
                () => action(delegatingDataManager),
                Throws.InvalidOperationException.With.Message.EqualTo("InnerDataManager property must be set before it can be used."));
        }
Пример #3
0
        public void CreateDataManager()
        {
            var fakeEventSink = MockRepository.GenerateStub <IClientTransactionEventSink> ();
            var fakeInvalidDomainObjectManager = MockRepository.GenerateStub <IInvalidDomainObjectManager> ();
            var fakePersistenceStrategy        = MockRepository.GenerateStub <IPersistenceStrategy>();

            var fakeDataContainerEventListener = MockRepository.GenerateStub <IDataContainerEventListener> ();
            var fakeEndPointProvider           = MockRepository.GenerateStub <IRelationEndPointProvider> ();
            var fakeLazyLoader = MockRepository.GenerateStub <ILazyLoader> ();
            var fakeRelationEndPointManager = MockRepository.GenerateStub <IRelationEndPointManager> ();
            var fakeObjectLoader            = MockRepository.GenerateStub <IObjectLoader> ();
            var fakeHierarchyManager        = MockRepository.GenerateStub <ITransactionHierarchyManager> ();

            DelegatingDataManager endPointProviderDataManager = null;
            DelegatingDataManager lazyLoaderDataManager       = null;
            DelegatingDataManager objectLoaderDataManager     = null;

            var factoryPartialMock = MockRepository.GeneratePartialMock <TestableClientTransactionComponentFactoryBase>();

            factoryPartialMock
            .Expect(mock => mock.CallCreateDataContainerEventListener(fakeEventSink))
            .Return(fakeDataContainerEventListener);
            factoryPartialMock
            .Expect(mock => mock.CallGetEndPointProvider(Arg <DelegatingDataManager> .Is.TypeOf))
            .Return(fakeEndPointProvider)
            .WhenCalled(mi => endPointProviderDataManager = (DelegatingDataManager)mi.Arguments[0]);
            factoryPartialMock
            .Expect(mock => mock.CallGetLazyLoader(Arg <DelegatingDataManager> .Is.TypeOf))
            .Return(fakeLazyLoader)
            .WhenCalled(mi => lazyLoaderDataManager = (DelegatingDataManager)mi.Arguments[0]);
            factoryPartialMock
            .Expect(
                mock => mock.CallCreateRelationEndPointManager(_fakeConstructedTransaction, fakeEndPointProvider, fakeLazyLoader, fakeEventSink))
            .Return(fakeRelationEndPointManager);
            factoryPartialMock
            .Expect(
                mock => mock.CallCreateObjectLoader(
                    Arg.Is(_fakeConstructedTransaction),
                    Arg.Is(fakeEventSink),
                    Arg.Is(fakePersistenceStrategy),
                    Arg.Is(fakeInvalidDomainObjectManager),
                    Arg <DelegatingDataManager> .Is.TypeOf,
                    Arg.Is(fakeHierarchyManager)))
            .Return(fakeObjectLoader)
            .WhenCalled(mi => objectLoaderDataManager = (DelegatingDataManager)mi.Arguments[4]);
            factoryPartialMock.Replay();

            var dataManager = (DataManager)factoryPartialMock.CreateDataManager(
                _fakeConstructedTransaction,
                fakeEventSink,
                fakeInvalidDomainObjectManager,
                fakePersistenceStrategy,
                fakeHierarchyManager);

            factoryPartialMock.VerifyAllExpectations();
            Assert.That(endPointProviderDataManager.InnerDataManager, Is.SameAs(dataManager));
            Assert.That(lazyLoaderDataManager.InnerDataManager, Is.SameAs(dataManager));
            Assert.That(objectLoaderDataManager.InnerDataManager, Is.SameAs(dataManager));

            Assert.That(dataManager.ClientTransaction, Is.SameAs(_fakeConstructedTransaction));
            Assert.That(dataManager.TransactionEventSink, Is.SameAs(fakeEventSink));
            Assert.That(dataManager.DataContainerEventListener, Is.SameAs(fakeDataContainerEventListener));
            Assert.That(DataManagerTestHelper.GetInvalidDomainObjectManager(dataManager), Is.SameAs(fakeInvalidDomainObjectManager));
            Assert.That(DataManagerTestHelper.GetObjectLoader(dataManager), Is.SameAs(fakeObjectLoader));
            Assert.That(DataManagerTestHelper.GetRelationEndPointManager(dataManager), Is.SameAs(fakeRelationEndPointManager));
        }