コード例 #1
0
        public void ExecuteTransaction_WhenCommandHasTransactionalAttribute()
        {
            var command = new FakeCommandWithoutValidator();

            Assert.IsAssignableFrom <ICommand>(command);

            var transactionProcessor = new Mock <IProcessTransactions>(MockBehavior.Strict);

            transactionProcessor.Setup(x => x.Execute());

            var decorated = new Mock <IHandleCommand <FakeCommandWithoutValidator> >(MockBehavior.Strict);
            var typeDescriptionProvider = TypeDescriptor.AddAttributes(decorated.Object.GetType(), new TransactionalAttribute());

            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandTransactionDecorator <FakeCommandWithoutValidator>(transactionProcessor.Object, () => decorated.Object);

            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            transactionProcessor.Verify(x => x.Execute(), Times.Once);

            // Clean the provider for next test, or else it will fail - very odd.
            TypeDescriptor.RemoveProvider(typeDescriptionProvider, decorated.Object.GetType());
        }
コード例 #2
0
        public void DoNotRaiseEvent_AfterCommandIsExecuted_WhenCommandHasRaiseEventAttributeAndEnabledFalse()
        {
            var command = new FakeCommandWithoutValidator();

            Assert.IsAssignableFrom <ICommand>(command);

            var eventProcessor = new Mock <IProcessEvents>(MockBehavior.Strict);

            eventProcessor.Setup(x => x.Raise(command));

            var attribute = new RaiseEventAttribute
            {
                Enabled = false
            };

            var decorated = new Mock <IHandleCommand <FakeCommandWithoutValidator> >(MockBehavior.Strict);

            TypeDescriptor.AddAttributes(decorated.Object.GetType(), attribute);
            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandEventProcessingDecorator <FakeCommandWithoutValidator>(eventProcessor.Object, () => decorated.Object);

            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            eventProcessor.Verify(x => x.Raise(It.IsAny <IEvent>()), Times.Never);
        }
コード例 #3
0
        public void Execute_InvokesCommandHandler_UsingContainerForResolution()
        {
            var commands = _fixture.Container.GetInstance <IProcessCommands>();
            var command  = new FakeCommandWithoutValidator();

            commands.Execute(command);

            Assert.Equal("faked", command.ReturnValue);
        }
コード例 #4
0
        public void Execute_InvokesCommandHandler_UsingContainerForResolution()
        {
            var container = new Container();
            container.RegisterSingle<IProcessCommands, CommandProcessor>();
            container.RegisterManyForOpenGeneric(typeof(IHandleCommand<>), Assembly.GetExecutingAssembly());
            container.Verify();
            var commands = container.GetInstance<IProcessCommands>();
            var command = new FakeCommandWithoutValidator();

            commands.Execute(command);

            command.ReturnValue.ShouldEqual("faked");
        }
コード例 #5
0
        public void DoNotRaiseEvent_AfterCommandIsExecuted_WhenCommandDoesNotHaveRaiseEventAttribute()
        {
            var command = new FakeCommandWithoutValidator();
            Assert.IsAssignableFrom<ICommand>(command);

            var eventProcessor = new Mock<IProcessEvents>(MockBehavior.Strict);
            eventProcessor.Setup(x => x.Raise(command));

            var decorated = new Mock<IHandleCommand<FakeCommandWithoutValidator>>(MockBehavior.Strict);
            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandEventProcessingDecorator<FakeCommandWithoutValidator>(eventProcessor.Object, () => decorated.Object);
            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            eventProcessor.Verify(x => x.Raise(It.IsAny<IEvent>()), Times.Never);
        }
コード例 #6
0
        public void DoNotExecuteTransaction_WhenCommandDoNotHaveTransactionalAttribute()
        {
            var command = new FakeCommandWithoutValidator();
            Assert.IsAssignableFrom<ICommand>(command);

            var transactionProcessor = new Mock<IProcessTransactions>(MockBehavior.Strict);
            transactionProcessor.Setup(x => x.Execute());

            var decorated = new Mock<IHandleCommand<FakeCommandWithoutValidator>>(MockBehavior.Strict);
            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandTransactionDecorator<FakeCommandWithoutValidator>(transactionProcessor.Object, () => decorated.Object);
            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            transactionProcessor.Verify(x => x.Execute(), Times.Never);
        }
コード例 #7
0
        public void DoNotExecuteTransaction_WhenCommandDoNotHaveTransactionalAttribute()
        {
            var command = new FakeCommandWithoutValidator();

            Assert.IsAssignableFrom <ICommand>(command);

            var transactionProcessor = new Mock <IProcessTransactions>(MockBehavior.Strict);

            transactionProcessor.Setup(x => x.Execute());

            var decorated = new Mock <IHandleCommand <FakeCommandWithoutValidator> >(MockBehavior.Strict);

            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandTransactionDecorator <FakeCommandWithoutValidator>(transactionProcessor.Object, () => decorated.Object);

            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            transactionProcessor.Verify(x => x.Execute(), Times.Never);
        }
コード例 #8
0
        public void ExecuteTransaction_WhenCommandHasTransactionalAttribute()
        {
            var command = new FakeCommandWithoutValidator();
            Assert.IsAssignableFrom<ICommand>(command);

            var transactionProcessor = new Mock<IProcessTransactions>(MockBehavior.Strict);
            transactionProcessor.Setup(x => x.Execute());

            var decorated = new Mock<IHandleCommand<FakeCommandWithoutValidator>>(MockBehavior.Strict);
            var typeDescriptionProvider = TypeDescriptor.AddAttributes(decorated.Object.GetType(), new TransactionalAttribute());
            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandTransactionDecorator<FakeCommandWithoutValidator>(transactionProcessor.Object, () => decorated.Object);
            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            transactionProcessor.Verify(x => x.Execute(), Times.Once);

            // Clean the provider for next test, or else it will fail - very odd.
            TypeDescriptor.RemoveProvider(typeDescriptionProvider, decorated.Object.GetType());
        }
コード例 #9
0
        public void DoNotRaiseEvent_AfterCommandIsExecuted_WhenCommandDoesNotHaveRaiseEventAttribute()
        {
            var command = new FakeCommandWithoutValidator();

            Assert.IsAssignableFrom <ICommand>(command);

            var eventProcessor = new Mock <IProcessEvents>(MockBehavior.Strict);

            eventProcessor.Setup(x => x.Raise(command));

            var decorated = new Mock <IHandleCommand <FakeCommandWithoutValidator> >(MockBehavior.Strict);

            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandEventProcessingDecorator <FakeCommandWithoutValidator>(eventProcessor.Object, () => decorated.Object);

            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            eventProcessor.Verify(x => x.Raise(It.IsAny <IEvent>()), Times.Never);
        }
コード例 #10
0
        public void RaiseEvent_AfterCommandIsExecuted_WhenCommandHasRaiseEventAttributeAndEnabledTrue()
        {
            var command = new FakeCommandWithoutValidator();
            Assert.IsAssignableFrom<ICommand>(command);

            var eventProcessor = new Mock<IProcessEvents>(MockBehavior.Strict);
            eventProcessor.Setup(x => x.Raise(command));

            var attribute = new RaiseEventAttribute
            {
                Enabled = true
            };

            var decorated = new Mock<IHandleCommand<FakeCommandWithoutValidator>>(MockBehavior.Strict);
            TypeDescriptor.AddAttributes(decorated.Object.GetType(), attribute);
            decorated.Setup(x => x.Handle(command));

            var decorator = new CommandEventProcessingDecorator<FakeCommandWithoutValidator>(eventProcessor.Object, () => decorated.Object);
            decorator.Handle(command);

            decorated.Verify(x => x.Handle(command), Times.Once);
            eventProcessor.Verify(x => x.Raise(command), Times.Once);
        }