public void WhenGameDateIsValid_SaveCommandCanExecuteIsTrue()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.GameDate = DateTime.Now;

            Assert.IsTrue(sut.SaveGameCommand.CanExecute(null));
        }
        public void WhenPlacingIsEmpty_AddPlayerCommandCanExecuteIsFalse()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.NewPlayerName = "Homer Simpson";
            sut.NewPlacing = string.Empty;
            sut.NewWinnings = "100";
            sut.NewPayIn = "20";

            Assert.IsFalse(sut.AddPlayerCommand.CanExecute(null));
        }
        public void WhenPlayerDataIsValid_AddPlayerCommandCanExecuteIsTrue()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.NewPlayerName = "Keira Knightly";
            sut.NewPlacing = "1";
            sut.NewWinnings = "225";
            sut.NewPayIn = "20";

            Assert.IsTrue(sut.AddPlayerCommand.CanExecute(null));
        }
        public void DeletePlayerRemovesFromList()
        {
            var sut = new EnterGameResultsViewModel(null, null, null, null);

            sut.NewPlayerName = "Dylan";
            sut.NewPlacing = "1";
            sut.NewWinnings = "100";
            sut.NewPayIn = "50";
            sut.AddPlayerCommand.Execute(null);

            sut.NewPlayerName = "Super Mario";
            sut.NewPlacing = "2";
            sut.NewWinnings = "50";
            sut.NewPayIn = "50";
            sut.AddPlayerCommand.Execute(null);

            sut.NewPlayerName = "Yoshi";
            sut.NewPlacing = "3";
            sut.NewWinnings = "0";
            sut.NewPayIn = "50";
            sut.AddPlayerCommand.Execute(null);

            sut.SelectedPlayerIndex = 1;

            sut.DeletePlayerCommand.Execute(null);

            Assert.AreEqual(2, sut.Players.Count());
            Assert.AreEqual("1 - Dylan [Win: $100] [Pay: $50]", sut.Players.ElementAt(0));
            Assert.AreEqual("3 - Yoshi [Win: $0] [Pay: $50]", sut.Players.ElementAt(1));
        }
        public void DeletePlayerCalledWhenNotValid()
        {
            var sut = new EnterGameResultsViewModel(null, null, null, null);

            sut.DeletePlayerCommand.Execute(null);
        }
        public void WhenPlayerIsSelected_CanDeleteIsTrue()
        {
            var sut = new EnterGameResultsViewModel(null, null, null, null);

            sut.NewPlayerName = "Dylan";
            sut.NewPlacing = "1";
            sut.NewWinnings = "100";
            sut.NewPayIn = "100";
            sut.AddPlayerCommand.Execute(null);

            sut.SelectedPlayerIndex = 0;

            Assert.IsTrue(sut.DeletePlayerCommand.CanExecute(null));
        }
        public void WhenPlayerCountIsZero_CanDeleteIsFalse()
        {
            var sut = new EnterGameResultsViewModel(null, null, null, null);

            Assert.IsFalse(sut.DeletePlayerCommand.CanExecute(null));
        }
        public void ClickCancelButtonShouldShowViewGamesList()
        {
            var mockMainWindow = new Mock<IMainWindow>();

            var mockView = new Mock<IViewGamesListView>();
            Resolver.Container.RegisterInstance<IViewGamesListView>(mockView.Object);

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

            sut.CancelCommand.Execute(null);

            mockMainWindow.Verify(x => x.ShowView(mockView.Object));
        }
        public void AddTwoPlayersShouldReturnProperPlayerStringsInProperOrder()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.NewPlayerName = "Dylan Smith";
            sut.NewPlacing = "2";
            sut.NewWinnings = "0";
            sut.NewPayIn = "100";
            sut.AddPlayerCommand.Execute(null);

            sut.NewPlayerName = "Ryan Fritsch";
            sut.NewPlacing = "1";
            sut.NewWinnings = "200";
            sut.NewPayIn = "100";
            sut.AddPlayerCommand.Execute(null);

            Assert.AreEqual(2, sut.Players.Count());
            Assert.AreEqual("1 - Ryan Fritsch [Win: $200] [Pay: $100]", sut.Players.ElementAt(0));
            Assert.AreEqual("2 - Dylan Smith [Win: $0] [Pay: $100]", sut.Players.ElementAt(1));
        }
        public void SaveGameWithNoGameDate()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.GameDate = null;

            sut.SaveGameCommand.Execute(null);
        }
        public void SaveGameWithValidDataTwoPlayers()
        {
            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 = "Ryan Fritsch";
            sut.NewPlacing = "1";
            sut.NewWinnings = "200";
            sut.NewPayIn = "100";
            sut.AddPlayerCommand.Execute(null);

            sut.NewPlayerName = "Dylan Smith";
            sut.NewPlacing = "2";
            sut.NewWinnings = "0";
            sut.NewPayIn = "100";
            sut.AddPlayerCommand.Execute(null);

            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(2, actualCommand.Players.Count());

            var ryanPlayer = actualCommand.Players.First(x => x.PlayerName == "Ryan Fritsch");
            var dylanPlayer = actualCommand.Players.First(x => x.PlayerName == "Dylan Smith");

            Assert.AreEqual(1, ryanPlayer.Placing);
            Assert.AreEqual(200, ryanPlayer.Winnings);
            Assert.AreEqual(100, ryanPlayer.PayIn);

            Assert.AreEqual(2, dylanPlayer.Placing);
            Assert.AreEqual(0, dylanPlayer.Winnings);
            Assert.AreEqual(100, dylanPlayer.PayIn);

            mockMainWindow.Verify(x => x.ShowView(It.IsAny<IViewGamesListView>()));
        }
        public void AddPlayerCommandExecuteIsCalledWhenThereIsInvalidData_ShouldThrowException()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.NewPlayerName = "Dylan Smith";
            sut.NewPlacing = string.Empty;
            sut.NewWinnings = "500";

            sut.AddPlayerCommand.Execute(null);
        }
        public void AddPlayerWithEmptyWinningsShouldConvertToZero()
        {
            var sut = new EnterGameResultsViewModel(null, null, null, null);

            sut.NewPlayerName = "Dylan Smith";
            sut.NewPlacing = "1";
            sut.NewWinnings = string.Empty;
            sut.NewPayIn = string.Empty;

            sut.AddPlayerCommand.Execute(null);

            Assert.AreEqual("1 - Dylan Smith [Win: $0] [Pay: $0]", sut.Players.First());
        }
        public void AddPlayerWithValidData()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.NewPlayerName = "Dylan Smith";
            sut.NewPlacing = "1";
            sut.NewWinnings = "500";
            sut.NewPayIn = "100";

            var watcher = new NotifyPropertyChangedWatcher(sut);

            sut.AddPlayerCommand.Execute(null);

            Assert.AreEqual(string.Empty, sut.NewPlayerName);
            Assert.AreEqual(string.Empty, sut.NewPlacing);
            Assert.AreEqual("0", sut.NewWinnings);

            Assert.AreEqual(1, sut.Players.Count());
            Assert.AreEqual("1 - Dylan Smith [Win: $500] [Pay: $100]", sut.Players.First());

            Assert.IsTrue(watcher.HasPropertyChanged("NewPlayerName"));
            Assert.IsTrue(watcher.HasPropertyChanged("NewPlacing"));
            Assert.IsTrue(watcher.HasPropertyChanged("NewWinnings"));
            Assert.IsTrue(watcher.HasPropertyChanged("Players"));
        }
        public void WhenWinningsIsNotANumber_AddPlayerCommandCanExecuteIsFalse()
        {
            var mockMainWindow = new Mock<IMainWindow>();
            var sut = new EnterGameResultsViewModel(new FakeCommandService(), new Mock<IQueryService>().Object, mockMainWindow.Object, _mockLogger);

            sut.NewPlayerName = "Tom Brady";
            sut.NewPlacing = "1";
            sut.NewWinnings = "One Hundred Dollars";
            sut.NewPayIn = "20";

            Assert.IsFalse(sut.AddPlayerCommand.CanExecute(null));
        }