public PracticeRoutineRecorder GetPracticeRoutineRecorder(int id)
        {
            try
            {
                PracticeRoutine practiceRoutine = Get(id);

                var exerciseRecorderRecords = Connection.Query <PracticeRoutineExerciseRecorderRecord>("sp_GetPracticeRoutineExerciseRecordersByRoutineId",
                                                                                                       param: new
                {
                    _practiceRoutineId = id
                }, commandType: CommandType.StoredProcedure);

                List <TimeSlotExerciseRecorder> exerciseRecorders = new List <TimeSlotExerciseRecorder>();

                foreach (var rec in exerciseRecorderRecords)
                {
                    var speedProgress  = new SpeedProgress(rec.InitialRecordedSpeed, rec.LastRecordedSpeed, rec.TargetMetronomeSpeed, rec.SpeedProgressWeighting);
                    var timeProgress   = new PracticeTimeProgress(rec.TotalPracticeTime, rec.TargetPracticeTime, rec.PracticeTimeProgressWeighting);
                    var manualProgress = new ManualProgress(rec.LastRecordedManualProgress, rec.ManualProgressWeighting);

                    exerciseRecorders.Add(new TimeSlotExerciseRecorder(new Recorder(), rec.ExerciseId, $"{rec.TimeSlotTitle} : {rec.ExerciseTitle}", speedProgress, timeProgress, manualProgress, rec.AssignedPracticeTime));
                }

                var practiceRoutineRecorder = new PracticeRoutineRecorder(practiceRoutine.Id, practiceRoutine.Title, exerciseRecorders);

                return(practiceRoutineRecorder);
            }
            catch (InvalidOperationException ex)
            {
                throw new DatabaseEntityNotFoundException($"Database entity does not exist for id: {id}", ex);
            }
        }
示例#2
0
        public void Half_Way_Between_Current_And_Target_Times_Means_Fifty_Percent_Progress()
        {
            var manualProgress = new ManualProgress(
                value: 50,
                weighting: 100
                );

            Assert.That(manualProgress.CalculateProgress(), Is.EqualTo(50));
        }
示例#3
0
        public void Quarter_Way_Between_Current_And_Target_Times_Means_Quarter_Progress()
        {
            var manualProgress = new ManualProgress(
                value: 25,
                weighting: 100
                );

            Assert.That(manualProgress.CalculateProgress(), Is.EqualTo(25));
        }
示例#4
0
        public static TimeSlotExerciseRecorder CreateSpeedProgressTimeSlotExerciseRecorder(int initialSpeed, int currentSpeed, int targetSpeed, int assignedTime)
        {
            var recorder             = new Recorder();
            var speedProgress        = new SpeedProgress(initialSpeed, currentSpeed, targetSpeed, 100);
            var practiceTimeProgress = new PracticeTimeProgress(0, 0, 0);
            var manualProgress       = new ManualProgress(0, 0);

            return(new TimeSlotExerciseRecorder(recorder, 1, "Speed Exercise", speedProgress, practiceTimeProgress, manualProgress, assignedTime));
        }
示例#5
0
        public static TimeSlotExerciseRecorder CreateManualProgressTimeSlotExerciseRecorder(int value, int assignedTime)
        {
            var recorder             = new Recorder();
            var speedProgress        = new SpeedProgress(0, 0, 0, 0);
            var practiceTimeProgress = new PracticeTimeProgress(0, 0, 0);
            var manualProgress       = new ManualProgress(value, 100);

            return(new TimeSlotExerciseRecorder(recorder, 1, "Time Exercise", speedProgress, practiceTimeProgress, manualProgress, assignedTime));
        }
示例#6
0
        public static TimeSlotExerciseRecorder CreateTimeSlotExerciseRecorder(int assignedTime)
        {
            var recorder             = new Recorder();
            var manualProgress       = new ManualProgress(0, 50);
            var speedProgress        = new SpeedProgress(0, 0, 120, 50);
            var practiceTimeProgress = new PracticeTimeProgress(0, 600, 50);

            return(new TimeSlotExerciseRecorder(recorder, 1, "Exercise Title", speedProgress, practiceTimeProgress, manualProgress, assignedTime));
        }
示例#7
0
        public static ExerciseRecorder CreateManualProgressExerciseRecorder(int value)
        {
            var recorder             = new Recorder();
            var speedProgress        = new SpeedProgress(0, 0, 0, 0);
            var practiceTimeProgress = new PracticeTimeProgress(0, 0, 0);
            var manualProgress       = new ManualProgress(value, 100);

            return(new ExerciseRecorder(recorder, 1, "Time Exercise", speedProgress, practiceTimeProgress, manualProgress));
        }
示例#8
0
        public void Ensure_That_All_Properties_Set_When_Initialized()
        {
            var manualProgress = new ManualProgress(
                value: 50,
                weighting: 100
                );

            Assert.That(manualProgress.Weighting, Is.EqualTo(100));
            Assert.That(manualProgress.Value, Is.EqualTo(50));
        }
示例#9
0
        public void When_Value_Subtracted_CalculateProgress_Works_As_Expected()
        {
            var manualProgress = new ManualProgress(
                value: 50,
                weighting: 100
                );

            var newManualProgress = manualProgress.Decrease(10); manualProgress.Decrease(10);

            Assert.That(newManualProgress.CalculateProgress(), Is.EqualTo(40));
        }
示例#10
0
        public void Percentage_Progress_With_No_Weightings_Allocated_To_Speed_Returns_0()
        {
            var recorder             = new Recorder();
            var manualProgress       = new ManualProgress(0, 0);
            var speedProgress        = new SpeedProgress(0, 0, 120, 0);
            var practiceTimeProgress = new PracticeTimeProgress(0, 600, 0);

            using (var exerciseRecorder = new ExerciseRecorder(recorder, 1, "Exercise Title", speedProgress, practiceTimeProgress, manualProgress))
            {
                Assert.That(exerciseRecorder.SpeedProgressPercentageAllocation, Is.EqualTo(0));
            }
        }
示例#11
0
        public void Percentage_Progress_Allocation_To_Manual_ShowsCorrect_Percentage()
        {
            var recorder             = new Recorder();
            var manualProgress       = new ManualProgress(0, 500);
            var speedProgress        = new SpeedProgress(0, 0, 120, 500);
            var practiceTimeProgress = new PracticeTimeProgress(0, 600, 1000);

            using (var exerciseRecorder = new ExerciseRecorder(recorder, 1, "Exercise Title", speedProgress, practiceTimeProgress, manualProgress))
            {
                Assert.That(exerciseRecorder.ManualProgressPercentageAllocation, Is.EqualTo(25));
            }
        }
示例#12
0
        public void TimeSlotTimer_RemainingTime_Negative_Returns_0()
        {
            int recordedTime = 601;
            int assignedTime = 600;

            var recorder             = new TestRecorder(recordedTime);
            var manualProgress       = new ManualProgress(0, 50);
            var speedProgress        = new SpeedProgress(0, 0, 120, 50);
            var practiceTimeProgress = new PracticeTimeProgress(0, 600, 50);

            var exerciseRecorder = new TimeSlotExerciseRecorder(recorder, 1, "Exercise Title", speedProgress, practiceTimeProgress, manualProgress, assignedTime);

            Assert.That(exerciseRecorder.RemainingSeconds, Is.EqualTo(0));
        }
示例#13
0
        public void When_ManualProgress_Changes_Current_Progress_Negatively_ManualProgress_Reflects_This_Correctly()
        {
            var recorder             = new Mock <IRecorder>();
            var speedProgress        = new Mock <ISpeedProgress>();
            var practiceTimeProgress = new Mock <IPracticeTimeProgress>();

            var manualProgress = new ManualProgress(100, 100);

            using (var exerciseRecorder = new ExerciseRecorder(recorder.Object, 1, "Exercise Title", speedProgress.Object, practiceTimeProgress.Object, manualProgress))
            {
                exerciseRecorder.DecrementManualProgress(25);

                Assert.That(exerciseRecorder.CurrentManualProgress, Is.EqualTo(75));
            }
        }
示例#14
0
        public void Adding_Speed_Changes_Current_OverallProgress_When_Applicably_Weighted()
        {
            var recorder             = new Recorder();
            var manualProgress       = new ManualProgress(0, 50);
            var speedProgress        = new SpeedProgress(0, 0, 120, 50);
            var practiceTimeProgress = new PracticeTimeProgress(0, 600, 50);

            using (var exerciseRecorder = new ExerciseRecorder(recorder, 1, "Exercise Title", speedProgress, practiceTimeProgress, manualProgress))
            {
                var progressBefore = exerciseRecorder.CurrentOverAllProgress;
                exerciseRecorder.IncrementSpeed(120);
                var progressAfter = exerciseRecorder.CurrentOverAllProgress;

                Assert.That(progressBefore, Is.LessThan(progressAfter));
                Assert.That(progressAfter, Is.EqualTo(33));
            }
        }
        public IExerciseRecorder GetExerciseRecorder(int id)
        {
            try
            {
                var exercise = Get(id);

                var rec = Connection.QuerySingle <ExerciseRecorderRecord>("sp_GetExerciseRecorderByExerciseId",
                                                                          param: new { _exerciseId = id }, commandType: CommandType.StoredProcedure);

                var speedProgress    = new SpeedProgress(rec.InitialRecordedSpeed, rec.LastRecordedSpeed, rec.TargetMetronomeSpeed, rec.SpeedProgressWeighting);
                var timeProgress     = new PracticeTimeProgress(rec.TotalPracticeTime, rec.TargetPracticeTime, rec.PracticeTimeProgressWeighting);
                var manualProgress   = new ManualProgress(rec.LastRecordedManualProgress, rec.ManualProgressWeighting);
                var exerciseRecorder = new ExerciseRecorder(new Recorder(), rec.ExerciseId, rec.ExerciseTitle, speedProgress, timeProgress, manualProgress);

                return(exerciseRecorder);
            }
            catch (InvalidOperationException ex)
            {
                throw new DatabaseEntityNotFoundException($"Database entity does not exist for id: {id}", ex);
            }
        }