public async Task <IActionResult> Edit(int id, [Bind("DepartmentID,DepartmentName")] Department department)
        {
            if (id != department.DepartmentID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var command = new EditDepartmentCommand(department);
                    var handler = CommandHandlerFactory.Build(command);
                    handler.Execute(_context);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!DepartmentExists(department.DepartmentID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(department));
        }
示例#2
0
        public async Task <IActionResult> Edit(int id, [Bind("EmployeeID,DepartmentID,Surname,Name,Patronymic,DateOfBirth")] Employee employee)
        {
            if (id != employee.EmployeeID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var command = new EditEmployeeCommand(employee);
                    var handler = CommandHandlerFactory.Build(command);
                    handler.Execute(_context);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!EmployeeExists(employee.EmployeeID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["DepartmentID"] = new SelectList(_context.Department, "DepartmentID", "DepartmentID", employee.DepartmentID);
            return(View(employee));
        }
示例#3
0
        private static void PerformCommand()
        {
            if (CommandIsNotAllowed())
            {
                return;
            }

            CommandExecutionResult result = null;

            try
            {
                result = CommandHandlerFactory
                         .Create(_executionContext.Command.CommandType)
                         .Execute(_executionContext.Command.Parameters,
                                  _executionContext.CurrentScreen.Model);
            }
            catch (Exception exception)
            {
                ExceptionScreen(exception);
                return;
            }

            _executionContext.CurrentScreen = result.NextScreenType.HasValue
                ? ScreenFactory.CreateScreen(_render, result.NextScreenType.Value, result.Model)
                : null;

            _executionContext.Command = null;

            _render.Clear();
        }
        protected Spesification()
        {
            this.eventStore = new TestEventStore();
            var commandHandlerFactory = new CommandHandlerFactory(this.eventStore);

            this.app = new CommandDispatcher(commandHandlerFactory);
        }
示例#5
0
        public async Task SendAsync <T>(T command) where T : Command
        {
            UnitOfWork = _unitOfWorkManager.Build();
            _logger.LogDebug("EXECUTE> _unitOfWorkManager.Build()");
            var commandHandler = CommandHandlerFactory.GetHandler <T>();

            try
            {
                UnitOfWork.Begin(new UnitOfWorkOption()
                {
                    IsolationLevel = IsolationLevel.ReadCommitted
                });
                await commandHandler.ExecuteAsync(command);

                await UnitOfWork.CommitAsync();
            }
            catch (Exception ex)
            {
                //log
                throw ex;
            }

            ////处理事件,保证最终一致性
            //if (command.Events != null && command.Events.Any())
            //{
            //    var eventPublisher = AppConfig.Current.IoCManager.GetService<IEventPublisher>();
            //    await eventPublisher.PublishAsync(command.Events);
            //}

            _logger.LogDebug("EXECUTE> UnitOfWork.CommitAsync()");
        }
示例#6
0
 public static IEnumerable <ICommand> NextCommand()
 {
     while (true)
     {
         yield return(CommandHandlerFactory.Create(Output.ReadLine()));
     }
 }
示例#7
0
        public void CreateHelpHandler_ReturnHelpHandler()
        {
            var handlerFactory = new CommandHandlerFactory();

            var handler = (IMethodName)handlerFactory.CreateHandlerForCommand("\\help");

            Assert.Equal(nameof(CommandController.ShowHelp), handler.MethodName);
        }
        public void ShouldLogFailedCommand()
        {
            var testCommand = new EnterGameResultsCommand();

            testCommand.GameDate  = DateTime.Now.AddDays(-2);
            testCommand.CommandId = Guid.NewGuid();
            testCommand.GameId    = Guid.NewGuid();
            testCommand.IPAddress = "12.34.56.78";
            testCommand.User      = "******";
            testCommand.Timestamp = DateTime.Now;

            var newPlayerA = new EnterGameResultsCommand.GamePlayer();

            newPlayerA.PlayerName = "Dylan Smith";
            newPlayerA.Placing    = 1;
            newPlayerA.Winnings   = 120;
            newPlayerA.PayIn      = 60;

            var newPlayerB = new EnterGameResultsCommand.GamePlayer();

            newPlayerB.PlayerName = "Homer Simpson";
            newPlayerB.Placing    = 2;
            newPlayerB.Winnings   = 0;
            newPlayerB.PayIn      = 60;

            var players = new List <EnterGameResultsCommand.GamePlayer>();

            players.Add(newPlayerA);
            players.Add(newPlayerB);

            testCommand.Players = players;

            var mockCommandRepository = new Mock <ICommandRepository>();
            var mockEventRepository   = new Mock <IEventRepository>();
            var mockQueryService      = new Mock <IQueryService>();

            var sut = new CommandHandlerFactory(
                mockEventRepository.Object,
                mockQueryService.Object,
                mockCommandRepository.Object);

            var ex = new ArgumentException("foo");

            mockEventRepository.Setup(x => x.PublishEvents(It.IsAny <IAggregateRoot>(), testCommand)).Throws(ex);

            try
            {
                sut.ExecuteCommand(testCommand);
            }
            catch
            {
                // eat all exceptions
            }

            mockCommandRepository.Verify(x => x.LogCommand(testCommand));
            mockCommandRepository.Verify(x => x.LogFailedCommand(testCommand, ex));
        }
示例#9
0
        public void CreatesHandler()
        {
            object testResult = new object();
            CommandHandlerFactory testSubject = new CommandHandlerFactory(t => testResult);

            object result = testSubject.Create(typeof(string));

            Assert.Same(testResult, result);
        }
示例#10
0
        public void RunTest(IEnumerable <ICommand> commands)
        {
            Setup();

            var repository = new FakeEventRepository();

            repository.InitialEvents = Given();

            var queryDataStore = new FakeQueryDataStore();
            var queryService   = new QueryHandlerFactory(queryDataStore);

            var commandRepository = new Mock <ICommandRepository>();

            HandleEvents(repository.InitialEvents, queryDataStore);

            Exception caughtException       = null;
            var       commandHandlerFactory = new CommandHandlerFactory(repository, queryService, commandRepository.Object);

            var generatedEvents = new List <IEvent>();

            foreach (var command in commands)
            {
                try
                {
                    commandHandlerFactory.ExecuteCommand(command);
                }
                catch (Exception e)
                {
                    if (ExpectedException() == null)
                    {
                        throw;
                    }

                    caughtException = e;
                }

                HandleEvents(repository.EventList, queryDataStore);
                generatedEvents.AddRange(repository.EventList);
                repository.InitialEvents = new List <IEvent>(repository.InitialEvents).Concat(repository.EventList).ToList();
                repository.EventList.Clear();
            }

            if (caughtException != null || ExpectedException() != null)
            {
                if (caughtException != null && ExpectedException() != null)
                {
                    Assert.AreEqual(ExpectedException().GetType(), caughtException.GetType());
                }
                else
                {
                    Assert.Fail("There was an Expected Exception but none was thrown.");
                }
            }

            ValidateExpectedEvents(ExpectedEvents(), generatedEvents);
        }
示例#11
0
        public void GetHandler_ForPostingCommand_UsingTestData_ReturnsHandler(string command)
        {
            var handler = new CommandHandlerFactory
                          (
                MappingTestData.Main.Data
                          ).GetHandler(command);

            Assert.NotNull(handler);
            Assert.IsAssignableFrom <PostingHandler>(handler);
        }
        public void GetHandler_ForExistantCommand_ReturnsHandler(string command, Type commandHandlerType)
        {
            var handler = new CommandHandlerFactory
                          (
                MappingTestData.Main.Data
                          ).GetHandler(command);

            Assert.NotNull(handler);
            Assert.IsType(commandHandlerType, handler);
        }
示例#13
0
        /// <summary>
        /// The Send.
        /// </summary>
        /// <typeparam name="TCommand">.</typeparam>
        /// <typeparam name="TCommandResult">.</typeparam>
        /// <param name="command">.</param>
        /// <returns>.</returns>
        public SimpleResponse <TCommandResult> Send <TCommand, TCommandResult>
            (TCommand command)
            where TCommand : class, ICommand <TCommandResult>
            where TCommandResult : class, ICommandResult, new()
        {
            var handler =
                CommandHandlerFactory.GetCommandHandler <TCommand, TCommandResult>();

            var valid = handler.Validate(command);

            if (valid.ResponseCode < 0)
            {
                return(new SimpleResponse <TCommandResult>
                {
                    ResponseCode = valid.ResponseCode,
                    ResponseMessage = valid.ResponseMessage,
                    RCode = valid.RCode
                });
            }

            var authorize = handler.Authorize(command);

            if (authorize.ResponseCode < 0)
            {
                return(new SimpleResponse <TCommandResult>
                {
                    ResponseCode = authorize.ResponseCode,
                    ResponseMessage = authorize.ResponseMessage,
                    RCode = authorize.RCode
                });
            }
            // Get Handle method custom attributes for Parameter Validation.
            // (handler.GetType().GetMethod("Handle").GetCustomAttributes(true)?? new object[0])
            // handler.GetType().GetMethod("Handle").GetParameters()
            // command.Validate()

            /*
             * var validationResult = command.Validate();
             *  if (validationResult.HasError)
             *  {
             *      response.Data = new TCommandResult();
             *      response.ResponseCode = -200;
             #if DEBUG
             *      response.ResponseMessage = validationResult.AllDevValidationMessages;
             #else
             *      response.ResponseMessage = validationResult.AllValidationMessages;
             #endif
             *
             *      return response;
             *  }
             */
            var commandResult = handler.Handle(command);

            return(commandResult);
        }
        public void GetHandler_ForNonExistantCommand_ReturnsNull()
        {
            const string command = "James >> Push It Up!";

            var handler = new CommandHandlerFactory
                          (
                MappingTestData.Empty.Data //TODO: Use Main Mapping test data with correct RegEx
                          ).GetHandler(command);

            Assert.Null(handler);
        }
        public static CommandHandlerFactory NewCommandHandlerFactory(Func <IRepository> repositoryProvider)
        {
            var commandHandlerFactor = new CommandHandlerFactory();

            commandHandlerFactor.RegisterFactory(
                () => new CustomerCommandHandler(repositoryProvider()),
                typeof(CreateNewCustomer),
                typeof(UpdateCustomer),
                typeof(RemoveCustomer));

            return(commandHandlerFactor);
        }
        public static CommandHandlerFactory NewCommandHandlerFactory(Func <IRepository> repositoryProvider)
        {
            var commandHandlerFactor = new CommandHandlerFactory();

            commandHandlerFactor.RegisterFactory(
                () => new ShipmentCommandHandler(repositoryProvider()),
                typeof(CreateShipment),
                typeof(StartShipment),
                typeof(DeliverShipment));

            return(commandHandlerFactor);
        }
示例#17
0
        private async Task HandleEvent(EventContext eventContext)
        {
            var action = (string)eventContext.WebHookEvent.GetPayload().action;
            var body   = (string)eventContext.WebHookEvent.GetPayload().issue.body;

            body = body.Trim();
            var parts             = body.Split(' ').Select(q => q.Trim()).ToArray();
            var authorAssociation = (string)eventContext.WebHookEvent.GetPayload().issue.author_association;

            var commandHandler = CommandHandlerFactory.GetHandler(action, parts, authorAssociation, eventContext);
            await commandHandler.Execute(action, parts, authorAssociation, eventContext, _SophiaDbContext);
        }
示例#18
0
        public static Implementation.Application Bootstrap()
        {
            var store          = new InMemoryEventStore();
            var handlerFactory = new CommandHandlerFactory(store);
            var dispatcher     = new CommandDispatcher(handlerFactory);

            var shoppingCartContext = new ShoppingCartContext();
            var eventHandlerFactory = new EventHandlerFactory(store, dispatcher, shoppingCartContext);
            var eventDispatcher     = new EventDispatcher(eventHandlerFactory);
            var eventProcessor      = new EventProcessor(store, eventDispatcher);

            return(new Implementation.Application(shoppingCartContext, dispatcher, eventProcessor));
        }
        public async Task <IActionResult> Create([Bind("DepartmentID,DepartmentName")] Department department)
        {
            if (ModelState.IsValid)
            {
                var command = new CreateDepartmentCommand(department);
                var handler = CommandHandlerFactory.Build(command);
                handler.Execute(_context);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(department));
        }
示例#20
0
        public void Should_get_handler_from_factory()
        {
            var serviceLocator = Substitute.For <IServiceLocator>();

            serviceLocator.Resolve <TestCommandHandler>()
            .Returns(new TestCommandHandler());

            var handlerFactory = new CommandHandlerFactory(serviceLocator);

            var handler = handlerFactory.CreateHandler(new TestCommand());

            handler.Should().NotBeOfType <TestCommandHandler>();
        }
示例#21
0
        public async Task <IActionResult> Create([Bind("EmployeeID,DepartmentID,Surname,Name,Patronymic,DateOfBirth")] Employee employee)
        {
            if (ModelState.IsValid)
            {
                var command = new CreateEmployeeCommand(employee);
                var handler = CommandHandlerFactory.Build(command);
                handler.Execute(_context);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["DepartmentID"] = new SelectList(_context.Department, "DepartmentID", "DepartmentID", employee.DepartmentID);
            return(View(employee));
        }
示例#22
0
        public void RunTest(ICommand command)
        {
            Setup();

            var repository = new FakeEventRepository();

            repository.InitialEvents = Given();

            var queryDataStore = new FakeQueryDataStore();
            var queryService   = new QueryHandlerFactory(queryDataStore);

            var commandRepository = new Mock <ICommandRepository>();

            HandleEvents(repository.InitialEvents, queryDataStore);

            Exception caughtException       = null;
            var       commandHandlerFactory = new CommandHandlerFactory(repository, queryService, commandRepository.Object);

            try
            {
                commandHandlerFactory.ExecuteCommand(command);
            }
            catch (Exception e)
            {
                if (ExpectedException() == null)
                {
                    throw;
                }

                caughtException = e;
            }

            if (caughtException != null || ExpectedException() != null)
            {
                if (caughtException != null && ExpectedException() != null)
                {
                    Assert.AreEqual(ExpectedException().GetType(), caughtException.GetType());
                }
                else
                {
                    Assert.Fail("There was an Expected Exception but none was thrown.");
                }
            }

            ValidateExpectedEvents(ExpectedEvents(), repository.EventList);
        }
        public void RunTest(ICommand command)
        {
            Setup();

            var repository = new FakeEventRepository();
            repository.InitialEvents = Given();

            var queryDataStore = new FakeQueryDataStore();
            var queryService = new QueryHandler(queryDataStore);

            var commandRepository = new Mock<ICommandRepository>();

            HandleEvents(repository.InitialEvents, queryDataStore);
            
            Exception caughtException = null;
            var commandHandlerFactory = new CommandHandlerFactory(repository, queryService, commandRepository.Object);

            try
            {
                commandHandlerFactory.ExecuteCommand(command);
            }
            catch (Exception e)
            {
                if (ExpectedException() == null)
                {
                    throw;
                }

                caughtException = e;
            }

            if (caughtException != null || ExpectedException() != null)
            {
                if (caughtException != null && ExpectedException() != null)
                {
                    Assert.AreEqual(ExpectedException().GetType(), caughtException.GetType());
                }
                else
                {
                    Assert.Fail("There was an Expected Exception but none was thrown.");
                }
            }

            ValidateExpectedEvents(ExpectedEvents(), repository.EventList);
        }
        public void ShouldLogCommand()
        {
            var testCommand = new EnterGameResultsCommand();

            testCommand.GameDate  = DateTime.Now.AddDays(-2);
            testCommand.CommandId = Guid.NewGuid();
            testCommand.GameId    = Guid.NewGuid();
            testCommand.IPAddress = "12.34.56.78";
            testCommand.User      = "******";
            testCommand.Timestamp = DateTime.Now;

            var newPlayerA = new EnterGameResultsCommand.GamePlayer();

            newPlayerA.PlayerName = "Dylan Smith";
            newPlayerA.Placing    = 1;
            newPlayerA.Winnings   = 120;
            newPlayerA.PayIn      = 60;

            var newPlayerB = new EnterGameResultsCommand.GamePlayer();

            newPlayerB.PlayerName = "Homer Simpson";
            newPlayerB.Placing    = 2;
            newPlayerB.Winnings   = 0;
            newPlayerB.PayIn      = 60;

            var players = new List <EnterGameResultsCommand.GamePlayer>();

            players.Add(newPlayerA);
            players.Add(newPlayerB);

            testCommand.Players = players;

            var mockCommandRepository = new Mock <ICommandRepository>();

            var sut = new CommandHandlerFactory(
                new Mock <IEventRepository>().Object,
                new Mock <IQueryService>().Object,
                mockCommandRepository.Object);

            sut.ExecuteCommand(testCommand);

            mockCommandRepository.Verify(x => x.LogCommand(testCommand));
        }
        public void CommandHandlerShouldBeResolved()
        {
            //Given
            var commandHandlerFactory = new CommandHandlerFactory();

            var mockCommandHandler       = new MockCommandHandler(new List <string>());
            var updateMockCommandHandler = new UpdateMockCommandHandler();

            //When
            commandHandlerFactory.Register <CreateAMockCommand>(mockCommandHandler);
            commandHandlerFactory.Register <UpdateMockCommand>(updateMockCommandHandler);

            var first_CommandHandler  = commandHandlerFactory.Resolved <CreateAMockCommand>();
            var second_commandHandler = commandHandlerFactory.Resolved <UpdateMockCommand>();

            //Then
            Assert.IsType <MockCommandHandler>(first_CommandHandler);
            Assert.IsType <UpdateMockCommandHandler>(second_commandHandler);
        }
        public void Gives_handler_that_can_handle_command(CommandHandlerFactory commandHandlerFactory,
                                                          ICommandHandler commandHandler)
        {
            "Given I have a 2 command handlers one of which can handle a dummy command"
            ._(
                () =>
                commandHandlerFactory =
                    new CommandHandlerFactory(new ICommandHandler[]
            {
                new OtherCommandHandler(),
                new DummyCommandHandler()
            }));

            "When I create a command handler for a dummy command"
            ._(() => commandHandler = commandHandlerFactory.Create(new DummyCommand()));

            "Then the dummy command handler is returned"
            ._(() => commandHandler.Should().BeOfType <DummyCommandHandler>());
        }
示例#27
0
        static void Main(string[] args)
        {
            var  command = new Command();
            bool isHelp  = args.Any(x => x == "-?");
            var  success = Parser.Default.ParseArguments(args, command);

            if (!success || isHelp)
            {
                if (!isHelp && args.Length > 0)
                {
                    Console.Error.WriteLine("error parsing command line");
                }
            }


            var factory        = new CommandHandlerFactory();
            var commandHandler = factory.Create(command);

            commandHandler.Execute(command);
        }
示例#28
0
        public static CommandHandlerFactory NewCommandHandlerFactory(Func <IRepository> repositoryProvider)
        {
            var commandHandlerFactor = new CommandHandlerFactory();

            commandHandlerFactor.RegisterFactory(
                () => new ShoppingCartCommandHandler(repositoryProvider()),
                typeof(CreateNewCart),
                typeof(AddProductToCart),
                typeof(RemoveProductFromCart),
                typeof(EmptyCart),
                typeof(Checkout));

            commandHandlerFactor.RegisterFactory(
                () => new OrderCommandHandler(repositoryProvider()),
                typeof(PlaceOrder),
                typeof(PayForOrder),
                typeof(ProvideShippingAddress),
                typeof(CompleteOrder));

            return(commandHandlerFactor);
        }
示例#29
0
        public void GetHandler_UsingConfigurationData_ReturnsHandler(string command, Type commandHandlerType)
        {
            var handler = new CommandHandlerFactory
                          (
                new CommandHandlerMappingFactory
                (
                    Configuration
                    .Development
                    .ConfigurationRoot
                    .GetSection(Resources.CommandHandlerMappingsConfigurationKey)
                    .Get <IEnumerable <CommandHandlerMappingOptions> >(),
                    new UserRepository
                    (
                        new Dictionary <string, IUser>()
                    )
                )
                .CreateMappings()
                          ).GetHandler(command);

            Assert.NotNull(handler);
            Assert.IsAssignableFrom(commandHandlerType, handler);
        }
        public void ShouldLogCommand()
        {
            var testCommand = new EnterGameResultsCommand();
            testCommand.GameDate = DateTime.Now.AddDays(-2);
            testCommand.CommandId = Guid.NewGuid();
            testCommand.GameId = Guid.NewGuid();
            testCommand.IPAddress = "12.34.56.78";
            testCommand.User = "******";
            testCommand.Timestamp = DateTime.Now;

            var newPlayerA = new EnterGameResultsCommand.GamePlayer();
            newPlayerA.PlayerName = "Dylan Smith";
            newPlayerA.Placing = 1;
            newPlayerA.Winnings = 120;
            newPlayerA.PayIn = 60;

            var newPlayerB = new EnterGameResultsCommand.GamePlayer();
            newPlayerB.PlayerName = "Homer Simpson";
            newPlayerB.Placing = 2;
            newPlayerB.Winnings = 0;
            newPlayerB.PayIn = 60;

            var players = new List<EnterGameResultsCommand.GamePlayer>();
            players.Add(newPlayerA);
            players.Add(newPlayerB);

            testCommand.Players = players;

            var mockCommandRepository = new Mock<ICommandRepository>();

            var sut = new CommandHandlerFactory(
                new Mock<IEventRepository>().Object,
                new Mock<IQueryService>().Object,
                mockCommandRepository.Object);

            sut.ExecuteCommand(testCommand);

            mockCommandRepository.Verify(x => x.LogCommand(testCommand));
        }
示例#31
0
        public void Send <T>(T command) where T : Command
        {
            var commandHandler = CommandHandlerFactory.GetHandler <T>();

            try
            {
                UnitOfWork.BeginTransaction(new UnitOfWorkOptions()
                {
                    IsolationLevel = IsolationLevel.ReadCommitted
                });
                //translation.open()
                commandHandler.Execute(command);
                UnitOfWork.Commit();
            }
            catch (Exception ex)
            {
                //log(ex)
                //db.RollBack()
                UnitOfWork.RollBack();
                throw ex;
            }
        }
        public void ShouldLogFailedCommand()
        {
            var testCommand = new CreateGameCommand();

            testCommand.GameDate  = DateTime.Now.AddDays(-2);
            testCommand.CommandId = Guid.NewGuid();
            testCommand.GameId    = Guid.NewGuid();
            testCommand.IPAddress = "12.34.56.78";
            testCommand.Timestamp = DateTime.Now;

            var mockCommandRepository = new Mock <ICommandRepository>();
            var mockEventRepository   = new Mock <IEventRepository>();
            var mockQueryService      = new Mock <IQueryService>();

            mockQueryService.Setup(q => q.Execute(It.IsAny <GetGameCountByDateQuery>())).Returns(0);

            var sut = new CommandHandlerFactory(
                mockEventRepository.Object,
                mockQueryService.Object,
                mockCommandRepository.Object);

            var ex = new ArgumentException("foo");

            mockEventRepository.Setup(x => x.PublishEvents(It.IsAny <IAggregateRoot>(), testCommand)).Throws(ex);

            try
            {
                sut.ExecuteCommand(testCommand);
            }
            catch
            {
                // eat all exceptions
            }

            mockCommandRepository.Verify(x => x.LogCommand(testCommand));
            mockCommandRepository.Verify(x => x.LogFailedCommand(testCommand, ex));
        }
        public void ShouldLogFailedCommand()
        {
            var testCommand = new EnterGameResultsCommand();
            testCommand.GameDate = DateTime.Now.AddDays(-2);
            testCommand.CommandId = Guid.NewGuid();
            testCommand.GameId = Guid.NewGuid();
            testCommand.IPAddress = "12.34.56.78";
            testCommand.User = "******";
            testCommand.Timestamp = DateTime.Now;

            var newPlayerA = new EnterGameResultsCommand.GamePlayer();
            newPlayerA.PlayerName = "Dylan Smith";
            newPlayerA.Placing = 1;
            newPlayerA.Winnings = 120;
            newPlayerA.PayIn = 60;

            var newPlayerB = new EnterGameResultsCommand.GamePlayer();
            newPlayerB.PlayerName = "Homer Simpson";
            newPlayerB.Placing = 2;
            newPlayerB.Winnings = 0;
            newPlayerB.PayIn = 60;

            var players = new List<EnterGameResultsCommand.GamePlayer>();
            players.Add(newPlayerA);
            players.Add(newPlayerB);

            testCommand.Players = players;

            var mockCommandRepository = new Mock<ICommandRepository>();
            var mockEventRepository = new Mock<IEventRepository>();
            var mockQueryService = new Mock<IQueryService>();

            var sut = new CommandHandlerFactory(
                mockEventRepository.Object,
                mockQueryService.Object,
                mockCommandRepository.Object);

            var ex = new ArgumentException("foo");
            mockEventRepository.Setup(x => x.PublishEvents(It.IsAny<IAggregateRoot>(), testCommand)).Throws(ex);

            try
            {
                sut.ExecuteCommand(testCommand);
            }
            catch
            {
                // eat all exceptions
            }

            mockCommandRepository.Verify(x => x.LogCommand(testCommand));
            mockCommandRepository.Verify(x => x.LogFailedCommand(testCommand, ex));
        }