public void Created_dispatches_to_interceptors_which_can_modify_result()
        {
            var interceptionContext = new DbInterceptionContext();
            var tree = new Mock <DbCommandTree>().Object;

            var mockInterceptor = new Mock <IDbCommandTreeInterceptor>();
            var interceptedTree = new Mock <DbCommandTree>().Object;

            mockInterceptor.Setup(m => m.TreeCreated(It.IsAny <DbCommandTreeInterceptionContext>()))
            .Callback <DbCommandTreeInterceptionContext>(
                i =>
            {
                Assert.Same(tree, i.Result);
                Assert.Same(tree, i.OriginalResult);
                i.Result = interceptedTree;
            });

            var dispatcher         = new DbCommandTreeDispatcher();
            var internalDispatcher = dispatcher.InternalDispatcher;

            internalDispatcher.Add(mockInterceptor.Object);

            Assert.Same(interceptedTree, dispatcher.Created(tree, interceptionContext));

            mockInterceptor.Verify(m => m.TreeCreated(It.IsAny <DbCommandTreeInterceptionContext>()));
        }
            public void Dispatches_to_interception()
            {
                var dispatcher = new DbCommandTreeDispatcher();
                var mockCommandTreeInterceptor = new Mock<IDbCommandTreeInterceptor>();
                dispatcher.InternalDispatcher.Add(mockCommandTreeInterceptor.Object);

                var providerServices
                    = new Mock<DbProviderServices>(
                        (Func<IDbDependencyResolver>)(() => new Mock<IDbDependencyResolver>().Object),
                        new Lazy<DbCommandTreeDispatcher>(() => dispatcher))
                        {
                            CallBase = true
                        }.Object;

                var mockCommandTree
                    = new Mock<DbCommandTree>
                        {
                            DefaultValue = DefaultValue.Mock
                        };

                mockCommandTree.SetupGet(m => m.DataSpace).Returns(DataSpace.SSpace);

                var mockStoreItemCollection
                    = new Mock<StoreItemCollection>
                        {
                            DefaultValue = DefaultValue.Mock
                        };

                mockCommandTree
                    .Setup(m => m.MetadataWorkspace.GetItemCollection(DataSpace.SSpace))
                    .Returns(mockStoreItemCollection.Object);
                var commandTree = mockCommandTree.Object;

                providerServices.CreateCommandDefinition(commandTree);

                mockCommandTreeInterceptor.Verify(
                    m => m.TreeCreated(
                        It.Is<DbCommandTreeInterceptionContext>(c => c.Result == commandTree && c.OriginalResult == commandTree)), Times.Once());
            }
        public void Created_dispatches_to_interceptors_which_can_modify_result()
        {
            var interceptionContext = new DbInterceptionContext();
            var tree = new Mock<DbCommandTree>().Object;

            var mockInterceptor = new Mock<IDbCommandTreeInterceptor>();
            var interceptedTree = new Mock<DbCommandTree>().Object;
            mockInterceptor.Setup(m => m.TreeCreated(It.IsAny<DbCommandTreeInterceptionContext>()))
                .Callback<DbCommandTreeInterceptionContext>(
                    i =>
                        {
                            Assert.Same(tree, i.Result);
                            Assert.Same(tree, i.OriginalResult);
                            i.Result = interceptedTree;
                        });

            var dispatcher = new DbCommandTreeDispatcher();
            var internalDispatcher = dispatcher.InternalDispatcher;
            internalDispatcher.Add(mockInterceptor.Object);

            Assert.Same(interceptedTree, dispatcher.Created(tree, interceptionContext));

            mockInterceptor.Verify(m => m.TreeCreated(It.IsAny<DbCommandTreeInterceptionContext>()));
        }