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()); }
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); }
public void Execute_InvokesCommandHandler_UsingContainerForResolution() { var commands = _fixture.Container.GetInstance <IProcessCommands>(); var command = new FakeCommandWithoutValidator(); commands.Execute(command); Assert.Equal("faked", command.ReturnValue); }
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"); }
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); }
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); }
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); }
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()); }
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); }
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); }