public void ViewSeasonsCommand_HappyPath()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService);

            // Set up needed infrastructure of class under test.
            var seasonCount = 3;
            var lastSeason  = 1920;
            var seasonIDs   = new List <int>(seasonCount);

            for (int i = lastSeason; i > lastSeason - seasonCount; i--)
            {
                var seasonID = i;
                seasonIDs.Add(seasonID);
            }
            A.CallTo(() => _windowService.GetSeasonIDs()).Returns(seasonIDs);

            // Act
            viewModel.ViewSeasonsCommand.Execute(null);

            // Assert
            A.CallTo(() => _windowService.GetSeasonIDs()).MustHaveHappenedOnceExactly();

            Assert.IsInstanceOf <ReadOnlyCollection <int> >(viewModel.GuestSeasons);
            Assert.IsInstanceOf <ReadOnlyCollection <int> >(viewModel.HostSeasons);

            Assert.AreEqual(lastSeason, viewModel.GuestSelectedSeason);
            Assert.AreEqual(lastSeason, viewModel.HostSelectedSeason);
        }
Beispiel #2
0
        public void ViewSeasonsCommand_Should()
        {
            // Arrange
            var seasonRepository = A.Fake <ISeasonRepository>();
            var seasons          = new List <Season>
            {
                new Season {
                    Year = 1920
                },
                new Season {
                    Year = 1921
                },
                new Season {
                    Year = 1922
                }
            };

            A.CallTo(() => seasonRepository.GetSeasons()).Returns(seasons);

            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService);

            // Act
            testObject.ViewSeasonsCommand.Execute(null !);

            // Assert
            A.CallTo(() => seasonRepository.GetSeasons()).MustHaveHappenedOnceExactly();
            testObject.GuestSeasons.ShouldBeOfType <ReadOnlyCollection <int> >();
            testObject.GuestSelectedSeason.ShouldBe(testObject.GuestSeasons.First());
            testObject.HostSeasons.ShouldBeOfType <ReadOnlyCollection <int> >();
            testObject.HostSelectedSeason.ShouldBe(testObject.HostSeasons.First());
        }
        public void ValidateDataEntry_HostSeasonIsNull_ThrowsDataValidationException()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService)
            {
                GuestName = "Guest",
                HostName  = "Host"
            };

            // Set up needed infrastructure of class under test.
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .Returns(new TeamSeason());
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .Returns(null);

            // Act
            var ex = Assert.Throws <DataValidationException>(() => viewModel.ValidateDataEntry());

            // Assert
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .MustHaveHappenedOnceExactly();
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .MustHaveHappenedOnceExactly();

            Assert.AreEqual(WpfGlobals.Constants.TeamNotInDatabaseMessage, ex.Message);
        }
        public void ValidateDataEntry_GuestSeasonAndHostSeasonAreNotNull_ThrowsNoException()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService)
            {
                GuestName = "Guest",
                HostName  = "Host"
            };

            // Set up needed infrastructure of class under test.
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .Returns(new TeamSeason());
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .Returns(new TeamSeason());

            // Act
            var result = viewModel.ValidateDataEntry();

            // Assert
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .MustHaveHappenedOnceExactly();
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .MustHaveHappenedOnceExactly();

            Assert.IsInstanceOf <Matchup>(result);
        }
        public void CalculatePredictionCommand_DataValidationExceptionCaught_ShowsExceptionMessage()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService)
            {
                GuestName = null,
                HostName  = "Host"
            };

            // Act
            viewModel.CalculatePredictionCommand.Execute(null);

            // Assert
            #region ValidateDataEntry()

            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .MustHaveHappenedOnceExactly();
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .MustHaveHappenedOnceExactly();

            #endregion ValidateDataEntry()

            A.CallTo(() => _sharedService.ShowExceptionMessage(A <DataValidationException> .Ignored))
            .MustHaveHappenedOnceExactly();
        }
        public void CalculatePredictionCommand_HappyPath()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService)
            {
                GuestName = "Guest",
                HostName  = "Host"
            };

            // Set up needed infrastructure of class under test.
            var guestSeason = new TeamSeason
            {
                TeamName         = "Guest",
                SeasonID         = 2017,
                OffensiveFactor  = 1.1,
                OffensiveAverage = 22,
                DefensiveFactor  = 0.9,
                DefensiveAverage = 20
            };

            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .Returns(guestSeason);

            var hostSeason = new TeamSeason
            {
                TeamName         = "Host",
                SeasonID         = 2017,
                OffensiveFactor  = 1.2,
                OffensiveAverage = 23,
                DefensiveFactor  = 0.8,
                DefensiveAverage = 19
            };

            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .Returns(hostSeason);

            // Act
            viewModel.CalculatePredictionCommand.Execute(null);

            // Assert
            #region ValidateDataEntry()

            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.GuestName, viewModel.GuestSelectedSeason))
            .MustHaveHappenedOnceExactly();
            A.CallTo(() => _sharedService.FindTeamSeason(viewModel.HostName, viewModel.HostSelectedSeason))
            .MustHaveHappenedOnceExactly();

            #endregion ValidateDataEntry()

            Assert.AreEqual((int)((guestSeason.OffensiveFactor * hostSeason.DefensiveAverage +
                                   hostSeason.DefensiveFactor * guestSeason.OffensiveAverage) / 2d), viewModel.GuestScore);
            Assert.AreEqual((int)((hostSeason.OffensiveFactor * guestSeason.DefensiveAverage +
                                   guestSeason.DefensiveFactor * hostSeason.OffensiveAverage) / 2d), viewModel.HostScore);
        }
        //[TestCase]
        public void TestCase1()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService);

            // TODO: Define argument variables of method under test.

            // TODO: Set up needed infrastructure of class under test.

            // Act
            // TODO: Call method under test.

            // Assert
            // TODO: Assert results of call to method under test.
        }
        public void CalculatePredictionCommand_GenericExceptionCaught_ShowsExceptionMessage()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService);

            // Set up needed infrastructure of class under test.
            var ex = new Exception();

            A.CallTo(() => _sharedService.FindTeamSeason(A <string> .Ignored, A <int> .Ignored)).Throws(ex);

            // Act
            viewModel.CalculatePredictionCommand.Execute(null);

            // Assert
            A.CallTo(() => _sharedService.ShowExceptionMessage(ex, "Exception")).MustHaveHappenedOnceExactly();
        }
Beispiel #9
0
        public void GuestSeasonsSetter_WhenValueIsNull_ShouldThrowArgumentNullException()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService);

            // Act
            Func <ReadOnlyCollection <int> > func = () => testObject.GuestSeasons = null !;

            // Assert
            var ex = func.ShouldThrow <ArgumentNullException>();

            ex.ParamName.ShouldBe <string>($"{testObject.GetType()}.{nameof(testObject.GuestSeasons)}");
        }
Beispiel #10
0
        public void CalculatePredictionCommand_WhenDataEntryIsValid_ShouldCallGamePredictorServicePredictGameScore()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();

            var        guestName   = "Guest";
            TeamSeason guestSeason = new TeamSeason();

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeason(guestName, A <int> .Ignored))
            .Returns(guestSeason);

            var        hostName   = "Host";
            TeamSeason hostSeason = new TeamSeason();

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeason(hostName, A <int> .Ignored))
            .Returns(hostSeason);

            var    gamePredictorService = A.Fake <IGamePredictorService>();
            double guestScore           = 7.00d;
            double hostScore            = 14.00d;

            A.CallTo(() => gamePredictorService.PredictGameScore(A <TeamSeason> .Ignored, A <TeamSeason> .Ignored))
            .Returns((guestScore, hostScore));
            var messageBoxService = A.Fake <IMessageBoxService>();
            var testObject        = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                     gamePredictorService, messageBoxService)
            {
                GuestName = guestName,
                HostName  = hostName
            };

            // Act
            testObject.CalculatePredictionCommand.Execute(null !);

            // Assert
            A.CallTo(() => messageBoxService.Show(A <string> .Ignored, "Invalid Data", MessageBoxButton.OK,
                                                  MessageBoxImage.Error)).MustNotHaveHappened();
            A.CallTo(() => gamePredictorService.PredictGameScore(guestSeason, hostSeason))
            .MustHaveHappenedOnceExactly();
            testObject.GuestScore.ShouldBe((int)guestScore);
            testObject.HostScore.ShouldBe((int)hostScore);
        }
Beispiel #11
0
        public void GuestSeasonsSetter_WhenValueIsNotNullAndDoesNotEqualGuestSeasons_ShouldAssignValueToGuestSeasons()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService);

            var guestSeasons = new ReadOnlyCollection <int>(new List <int>());

            // Act
            Func <ReadOnlyCollection <int> > func = () => testObject.GuestSeasons = guestSeasons;

            // Assert
            func.ShouldNotThrow();
            testObject.GuestSeasons.ShouldBeOfType <ReadOnlyCollection <int> >();
            testObject.GuestSeasons.ShouldBe(guestSeasons);
        }
Beispiel #12
0
        public void GuestNameSetter_WhenValueDoesNotEqualGuestName_ShouldAssignValueToGuestName()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService)
            {
                GuestName = "Team"
            };

            var guestName = "Guest";

            // Act
            testObject.GuestName = guestName;

            // Assert
            testObject.GuestName.ShouldBe(guestName);
        }
Beispiel #13
0
        public void GuestSelectedSeasonSetter_WhenValueDoesNotEqualGuestSelectedSeason_ShouldAssignValueToSelectedGuestSeason()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService)
            {
                GuestSelectedSeason = 1920
            };

            var guestSelectedSeason = 1921;

            // Act
            testObject.GuestSelectedSeason = guestSelectedSeason;

            // Assert
            testObject.GuestSelectedSeason.ShouldBe(guestSelectedSeason);
        }
Beispiel #14
0
        public void HostScoreSetter_WhenValueDoesNotEqualHostScore_ShouldAssignValueToHostScore()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService)
            {
                HostScore = 0
            };

            var hostScore = 7;

            // Act
            testObject.HostScore = hostScore;

            // Assert
            testObject.HostScore.ShouldBe(hostScore);
        }
Beispiel #15
0
        public void CalculatePredictionCommand_WhenHostSeasonNotFoundInDataStore_ShouldShowTeamNotInDatabaseMessageErrorMessage()
        {
            // Arrange
            var seasonRepository = A.Fake <ISeasonRepository>();

            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();

            var        guestName   = "Guest";
            TeamSeason guestSeason = new TeamSeason();

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeason(guestName, A <int> .Ignored))
            .Returns(guestSeason);

            var        hostName   = "Host";
            TeamSeason hostSeason = null !;

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeason(hostName, A <int> .Ignored))
            .Returns(hostSeason);

            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService)
            {
                GuestName = guestName,
                HostName  = hostName
            };

            // Act
            testObject.CalculatePredictionCommand.Execute(null !);

            // Assert
            A.CallTo(() => messageBoxService.Show(
                         "Please make sure that both teams are in the league and that both team names are spelled correctly.",
                         "Invalid Data", MessageBoxButton.OK, MessageBoxImage.Error)).MustHaveHappenedOnceExactly();
            A.CallTo(() => gamePredictorService.PredictGameScore(A <TeamSeason> .Ignored, A <TeamSeason> .Ignored))
            .MustNotHaveHappened();
        }
        public void ViewSeasonsCommand_ExceptionCaught_ShowsExceptionMessage()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new GamePredictorWindowViewModel(_sharedService, _windowService);

            // Set up needed infrastructure of class under test.
            var ex = new Exception();

            A.CallTo(() => _windowService.GetSeasonIDs()).Throws(ex);

            // Act
            viewModel.ViewSeasonsCommand.Execute(null);

            // Assert
            A.CallTo(() => _sharedService.ShowExceptionMessage(ex, "Exception")).MustHaveHappenedOnceExactly();

            Assert.IsNull(viewModel.GuestSeasons);
            Assert.IsNull(viewModel.HostSeasons);

            Assert.AreEqual(0, viewModel.GuestSelectedSeason);
            Assert.AreEqual(0, viewModel.HostSelectedSeason);
        }
Beispiel #17
0
        public void CalculatePredictionCommand_WhenGuestNameIsValidAndHostNameIsWhiteSpace_ShouldShowBothTeamsNeededErrorMessage()
        {
            // Arrange
            var seasonRepository     = A.Fake <ISeasonRepository>();
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var gamePredictorService = A.Fake <IGamePredictorService>();
            var messageBoxService    = A.Fake <IMessageBoxService>();
            var testObject           = new GamePredictorWindowViewModel(seasonRepository, teamSeasonRepository,
                                                                        gamePredictorService, messageBoxService)
            {
                GuestName = "Team",
                HostName  = " "
            };

            // Act
            testObject.CalculatePredictionCommand.Execute(null !);

            // Assert
            A.CallTo(() => messageBoxService.Show("Please enter names for both teams.", "Invalid Data",
                                                  MessageBoxButton.OK, MessageBoxImage.Error)).MustHaveHappenedOnceExactly();
            A.CallTo(() => gamePredictorService.PredictGameScore(A <TeamSeason> .Ignored, A <TeamSeason> .Ignored))
            .MustNotHaveHappened();
        }