public void PredictGameScore_ShouldReturnCorrectlyCalculatedPredictedGameScores()
        {
            // Arrange
            var testObject = new GamePredictorService();

            var guestSeason = new TeamSeason
            {
                OffensiveAverage = 7.00d,
                OffensiveFactor  = 0.500d,
                DefensiveAverage = 14.00d,
                DefensiveFactor  = 1.500d
            };
            var hostSeason = new TeamSeason
            {
                OffensiveAverage = 28.00d,
                OffensiveFactor  = 2.000d,
                DefensiveAverage = 21.00d,
                DefensiveFactor  = 1.000d
            };

            // Act
            var(predictedGuestScore, predictedHostScore) =
                testObject.PredictGameScore(guestSeason, hostSeason);

            // Assert
            predictedGuestScore.ShouldBe((guestSeason.OffensiveFactor * hostSeason.DefensiveAverage +
                                          hostSeason.DefensiveFactor * guestSeason.OffensiveAverage) / 2d);
            predictedHostScore.ShouldBe((hostSeason.OffensiveFactor * guestSeason.DefensiveAverage +
                                         guestSeason.DefensiveFactor * hostSeason.OffensiveAverage) / 2d);
        }
        public async Task GetGuestAndHostSeasonIds_GuestAndHostSeasonIdsNull_GuestAndHostSeasonIdsChanged()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            GamePredictorService.GuestSeasonID = null;
            GamePredictorService.HostSeasonID  = null;

            var dbContext = A.Fake <ProFootballEntities>();

            var seasons = new List <Season>
            {
                new Season {
                    ID = 2017
                },
                new Season {
                    ID = 2016
                },
                new Season {
                    ID = 2014
                }
            };

            A.CallTo(() => _seasonRepository.GetEntitiesAsync(dbContext)).Returns(seasons);

            // Act
            await service.GetGuestAndHostSeasonIds(dbContext);

            // Assert
            A.CallTo(() => _seasonRepository.GetEntitiesAsync(dbContext)).MustHaveHappenedOnceExactly();

            // Get guest season.
            Assert.AreEqual(2017, GamePredictorService.GuestSeasonID);
            Assert.AreEqual(2017, GamePredictorService.HostSeasonID);
        }
        //[TestCase]
        public void TestCase1()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            // Act

            // Assert
        }
        public void ApplyFilter_GuestIdNotNullAndHostIdNull_GuestFilterOnlyApplied()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            GamePredictorService.GuestSeasonID = null;
            GamePredictorService.HostSeasonID  = null;

            int?guestSeasonID = 2017;
            int?hostSeasonID  = null;

            // Act
            service.ApplyFilter(guestSeasonID, hostSeasonID);

            // Assert
            Assert.AreEqual(guestSeasonID, GamePredictorService.GuestSeasonID);
            Assert.IsNull(GamePredictorService.HostSeasonID);
        }
        public void ApplyFilter_GuestAndHostIdsNull_NoFiltersApplied()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            GamePredictorService.GuestSeasonID = null;
            GamePredictorService.HostSeasonID  = null;

            int?guestSeasonID = null;
            int?hostSeasonID  = null;

            // Act
            service.ApplyFilter(guestSeasonID, hostSeasonID);

            // Assert
            Assert.IsNull(GamePredictorService.GuestSeasonID);
            Assert.IsNull(GamePredictorService.HostSeasonID);
        }
        public async Task GetEntities_ArgumentNullException_AbortsAndReturnsNull()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            var seasonID  = 2017;
            var dbContext = A.Fake <ProFootballEntities>();

            A.CallTo(() => _teamSeasonRepository.GetEntitiesAsync(dbContext)).Throws <ArgumentNullException>();
            A.CallTo(() => _dataMapper.MapToTeamSeasonViewModel(A <TeamSeason> .Ignored))
            .Returns(new TeamSeasonViewModel());

            // Act
            var result = await service.GetEntities(seasonID, dbContext);

            // Assert
            A.CallTo(() => _dataMapper.MapToTeamSeasonViewModel(A <TeamSeason> .That.IsNotNull())).MustNotHaveHappened();
            Assert.IsNull(result);
        }
        public async Task GetGuestAndHostSeasonIds_GuestAndHostSeasonIdsNullButArgumentNullExceptionCaught_GuestAndHostSeasonIdsNotChanged()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            GamePredictorService.GuestSeasonID = null;
            GamePredictorService.HostSeasonID  = null;

            var dbContext = A.Fake <ProFootballEntities>();

            A.CallTo(() => _seasonRepository.GetEntitiesAsync(dbContext)).Throws <ArgumentNullException>();

            // Act
            await service.GetGuestAndHostSeasonIds(dbContext);

            // Assert
            A.CallTo(() => _seasonRepository.GetEntitiesAsync(dbContext)).MustHaveHappenedOnceExactly();

            // Get guest season.
            Assert.IsNull(GamePredictorService.GuestSeasonID);
            Assert.IsNull(GamePredictorService.HostSeasonID);
        }
        public async Task GetEntities_HappyPath()
        {
            // Arrange
            var service = new GamePredictorService(_dataMapper, _seasonRepository, _teamSeasonRepository);

            var seasonID  = 2017;
            var dbContext = A.Fake <ProFootballEntities>();

            var count       = 3;
            var teamSeasons = new List <TeamSeason>(3);

            for (int i = 1; i <= count; i++)
            {
                var teamSeason = new TeamSeason
                {
                    TeamName = "Team" + i,
                    SeasonID = 2017
                };
                teamSeasons.Add(teamSeason);
            }
            A.CallTo(() => _teamSeasonRepository.GetEntitiesAsync(dbContext)).Returns(teamSeasons);
            A.CallTo(() => _dataMapper.MapToTeamSeasonViewModel(A <TeamSeason> .Ignored))
            .Returns(new TeamSeasonViewModel());

            // Act
            var result = await service.GetEntities(seasonID, dbContext);

            // Assert
            A.CallTo(() => _teamSeasonRepository.GetEntitiesAsync(dbContext)).MustHaveHappenedOnceExactly();

            A.CallTo(() => _dataMapper.MapToTeamSeasonViewModel(A <TeamSeason> .That.IsNotNull()))
            .MustHaveHappened(count, Times.Exactly);

            Assert.IsInstanceOf <IEnumerable <TeamSeasonViewModel> >(result);
            Assert.AreEqual(count, result.Count());
        }