public void SaveGameWithValidDataNoPlayers()
        {
            var fakeCommandService    = new FakeCommandService();
            var mockMainWindow        = new Mock <IMainWindow>();
            var mockViewGamesListView = new Mock <IViewGamesListView>();

            Resolver.Container.RegisterInstance <IViewGamesListView>(mockViewGamesListView.Object);

            var sut = new EnterGameResultsViewModel(fakeCommandService, new Mock <IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            var testGameDate = DateTime.Now;

            sut.GameDate      = testGameDate;
            sut.NewPlayerName = "foo";
            sut.NewPlacing    = "foo";
            sut.NewWinnings   = "foo";
            sut.NewPayIn      = "foo";

            sut.SaveGameCommand.Execute(null);

            Assert.AreEqual(1, fakeCommandService.ExecutedCommands.Count);
            EnterGameResultsCommand actualCommand = fakeCommandService.ExecutedCommands[0] as EnterGameResultsCommand;

            Assert.IsFalse(actualCommand.CommandId == Guid.Empty);
            Assert.AreEqual(testGameDate, actualCommand.GameDate);
            Assert.AreEqual(0, actualCommand.Players.Count());

            mockMainWindow.Verify(x => x.ShowView(It.IsAny <IViewGamesListView>()));
        }
        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));
        }
        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));
        }
        private void SaveGame()
        {
            if (!CanSaveGame())
            {
                throw new InvalidOperationException("SaveGame should never be called if CanSaveGame returns false");
            }

            var gameCommand = new EnterGameResultsCommand();

            gameCommand.GameDate = this.GameDate.GetValueOrDefault();
            gameCommand.Players  = _playerCommands;

            var commandResult = ExecuteCommand(gameCommand);

            if (commandResult)
            {
                Cancel();
            }
        }