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);
            }
        }
Example #2
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));
        }
Example #3
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));
        }
Example #4
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));
        }
Example #5
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));
        }
        public void When_CurrentSpeed_IsBelow_InitialSpeed_Always_Return_0_Percent()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 60,
                currentSpeed: 50,
                targetSpeed: 100,
                weighting: 100
                );

            Assert.That(speedProgress.CalculateProgress(), Is.EqualTo(0));
        }
        public void No_TargetSpeed_Always_Has_100_Percent_Complete()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 60,
                currentSpeed: 80,
                targetSpeed: 0,
                weighting: 100
                );

            Assert.That(speedProgress.CalculateProgress(), Is.EqualTo(100));
        }
        public void No_InitialSpeed_But_Has_TargetSpeed_Calcs_Correctly()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 0,
                currentSpeed: 35,
                targetSpeed: 100,
                weighting: 100
                );

            Assert.That(speedProgress.CalculateProgress(), Is.EqualTo(35));
        }
        public void Quarter_Way_Between_Initial_And_Target_Speeds_Means_Quarter_Progress()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 10,
                currentSpeed: 35,
                targetSpeed: 110,
                weighting: 100
                );

            Assert.That(speedProgress.CalculateProgress(), Is.EqualTo(25));
        }
        public void Half_Way_Between_Initial_And_Target_Speeds_Means_Fifty_Percent_Progress()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 10,
                currentSpeed: 60,
                targetSpeed: 110,
                weighting: 100
                );

            Assert.That(speedProgress.CalculateProgress(), Is.EqualTo(50));
        }
Example #11
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));
            }
        }
Example #12
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));
            }
        }
        public void When_Ticks_Subtracted_GoBelowZero_CalculateProgress_Works_As_Expected()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 100,
                currentSpeed: 125,
                targetSpeed: 200,
                weighting: 100
                );

            var newSpeedProgress = speedProgress.SubtractTicks(150);

            Assert.That(newSpeedProgress.CalculateProgress(), Is.EqualTo(0));
        }
        public void When_Ticks_OverTargetSpeed_Added_CalculateProgress_Works_As_Expected()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 100,
                currentSpeed: 125,
                targetSpeed: 200,
                weighting: 100
                );

            var newSpeedProgress = speedProgress.AddTicks(100);

            Assert.That(newSpeedProgress.CalculateProgress(), Is.EqualTo(100));
        }
Example #15
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));
        }
        public void When_Ticks_Subtracted_CalculateProgress_Works_As_Expected()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 100,
                currentSpeed: 150,
                targetSpeed: 200,
                weighting: 100
                );

            var newSpeedProgress = speedProgress.SubtractTicks(25);

            Assert.AreEqual(125, newSpeedProgress.CurrentSpeed);
            Assert.That(newSpeedProgress.CalculateProgress(), Is.EqualTo(25));
        }
        public void Ensure_That_All_Properties_Set_When_Initialized()
        {
            var speedProgress = new SpeedProgress(
                initialSpeed: 10,
                currentSpeed: 60,
                targetSpeed: 110,
                weighting: 100
                );

            Assert.That(speedProgress.Weighting, Is.EqualTo(100));

            Assert.That(speedProgress.InitialSpeed, Is.EqualTo(10));
            Assert.That(speedProgress.CurrentSpeed, Is.EqualTo(60));
            Assert.That(speedProgress.TargetSpeed, Is.EqualTo(110));
        }
Example #18
0
        public void When_SpeedRecorded_Changes_Current_Speed_Negatively_SpeedProgress_Reflects_This_Correctly()
        {
            var recorder             = new Mock <IRecorder>();
            var manualProgress       = new Mock <IManualProgress>();
            var practiceTimeProgress = new Mock <IPracticeTimeProgress>();

            var speedProgress = new SpeedProgress(50, 100, 150, 100);

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

                Assert.AreEqual(75, exerciseRecorder.CurrentSpeed);
                Assert.That(exerciseRecorder.CurrentSpeedProgress, Is.EqualTo(25));
            }
        }
Example #19
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);
            }
        }