public void PlayerAggregate_AdjustHandicap_PlayerNotRegistered_ErrorThrown()
        {
            PlayerAggregate playerAggregate = PlayerTestData.GetEmptyPlayerAggregate();

            Should.Throw <InvalidOperationException>(() => playerAggregate.AdjustHandicap(PlayerTestData.HandicapAdjustment,
                                                                                          PlayerTestData.TournamentId,
                                                                                          PlayerTestData.GolfClubId,
                                                                                          PlayerTestData.MeasuredCourseId,
                                                                                          PlayerTestData.ScoreDate));
        }
        public void PlayerAggregate_AdjustHandicap_HandicapIncrease_HandicapAdjusted()
        {
            PlayerAggregate playerAggregate = PlayerTestData.GetRegisteredPlayerAggregate();

            playerAggregate.AdjustHandicap(PlayerTestData.HandicapAdjustmentIncrease, PlayerTestData.TournamentId, PlayerTestData.GolfClubId, PlayerTestData.MeasuredCourseId,
                                           PlayerTestData.ScoreDate);

            playerAggregate.ExactHandicap.ShouldBe(PlayerTestData.NewExactHandicapIncreased);
            playerAggregate.PlayingHandicap.ShouldBe(PlayerTestData.NewPlayingHandicapIncreased);
        }
        public void PlayerAggregate_AdjustHandicap_HandicapAdjustmentIsZero_HandicapNotAdjusted()
        {
            PlayerAggregate playerAggregate = PlayerTestData.GetRegisteredPlayerAggregate();

            playerAggregate.AdjustHandicap(PlayerTestData.HandicapAdjustmentNoChange, PlayerTestData.TournamentId, PlayerTestData.GolfClubId, PlayerTestData.MeasuredCourseId,
                                           PlayerTestData.ScoreDate);

            playerAggregate.ExactHandicap.ShouldBe(PlayerTestData.ExactHandicap);
            playerAggregate.PlayingHandicap.ShouldBe(PlayerTestData.PlayingHandicap);
        }
Exemple #4
0
        public static PlayerAggregate GetRegisteredPlayerAggregateWithHandicapAdjustment()
        {
            PlayerAggregate playerAggregate = PlayerAggregate.Create(PlayerTestData.AggregateId);

            playerAggregate.Register(PlayerTestData.FirstName,
                                     PlayerTestData.MiddleName,
                                     PlayerTestData.LastName,
                                     PlayerTestData.Gender,
                                     PlayerTestData.DateOfBirth,
                                     PlayerTestData.ExactHandicap,
                                     PlayerTestData.EmailAddress);

            playerAggregate.AdjustHandicap(PlayerTestData.HandicapAdjustment,
                                           PlayerTestData.TournamentId,
                                           PlayerTestData.GolfClubId,
                                           PlayerTestData.MeasuredCourseId,
                                           PlayerTestData.ScoreDate);

            return(playerAggregate);
        }
        public void PlayerAggregate_AdjustHandicap_InvalidData_ErrorThrown(Boolean validAdjustment, Boolean validTournamentId, Boolean validGolfClubId,
                                                                           Boolean validMeasuredCourseId, Boolean validScoreDate, Type exceptionType)
        {
            PlayerAggregate playerAggregate = PlayerTestData.GetRegisteredPlayerAggregate();

            HandicapAdjustmentDataTransferObject handicapAdjustment = validAdjustment
                ? PlayerTestData.HandicapAdjustment
                : null;

            Guid     tournamentId     = validTournamentId ? PlayerTestData.TournamentId : Guid.Empty;
            Guid     golfClubId       = validGolfClubId ? PlayerTestData.GolfClubId : Guid.Empty;
            Guid     measuredCourseId = validMeasuredCourseId ? PlayerTestData.MeasuredCourseId : Guid.Empty;
            DateTime scoreDate        = validScoreDate ? PlayerTestData.ScoreDate: DateTime.MinValue;

            Should.Throw(() =>
            {
                playerAggregate.AdjustHandicap(handicapAdjustment,
                                               tournamentId,
                                               golfClubId,
                                               measuredCourseId,
                                               scoreDate);
            }, exceptionType);
        }
Exemple #6
0
        /// <summary>
        /// Applies the handicap adjustment.
        /// </summary>
        /// <param name="score">The score.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        private async Task ApplyHandicapAdjustment(PlayerScoreRecordDataTransferObject score,
                                                   CancellationToken cancellationToken)
        {
            PlayerAggregate playerAggregate = await this.PlayerRepository.GetLatestVersion(score.PlayerId, cancellationToken);

            List <HandicapAdjustment> adjustments =
                this.HandicapAdjustmentCalculatorService.CalculateHandicapAdjustment(playerAggregate.ExactHandicap, score.CSS, score.HoleScores);

            Logger.LogInformation($"Player Id {playerAggregate.AggregateId} Total Adjustment [{adjustments.Sum(x => x.TotalAdjustment)}]");

            foreach (HandicapAdjustment adjustment in adjustments)
            {
                Player.HandicapAdjustmentDataTransferObject handicapAdjustment = new Player.HandicapAdjustmentDataTransferObject
                {
                    TotalAdjustment          = adjustment.TotalAdjustment,
                    AdjustmentValuePerStroke = adjustment.AdjustmentValuePerStroke,
                    NumberOfStrokesBelowCss  = adjustment.NumberOfStrokesBelowCss
                };

                playerAggregate.AdjustHandicap(handicapAdjustment, score.TournamentId, score.GolfClubId, score.MeasuredCourseId, score.ScoreDate);
            }

            await this.PlayerRepository.SaveChanges(playerAggregate, cancellationToken);
        }