public void Should_Update_ExecutedWorkout() { //ARRANGE var modifiedExecutedWorkout = new ExecutedWorkout(); byte numberOfExercises = 3; modifiedExecutedWorkout.Exercises = new List <ExecutedExercise>(numberOfExercises); for (byte x = 0; x < numberOfExercises; x++) { modifiedExecutedWorkout.Exercises.Add(new ExecutedExercise()); } var workoutRepo = new Mock <IRepository <Workout> >(MockBehavior.Strict); var executedWorkoutRepo = new Mock <IRepository <ExecutedWorkout> >(MockBehavior.Strict); executedWorkoutRepo .Setup(x => x.UpdateAsync <ExecutedWorkout>(modifiedExecutedWorkout, It.IsAny <Expression <Func <ExecutedWorkout, object> >[]>())) .Returns(Task.FromResult(modifiedExecutedWorkout.Exercises.Count + 1)); var recommendationService = new Mock <IExerciseAmountRecommendationService>(MockBehavior.Strict); var userService = new Mock <IUserService>(MockBehavior.Strict); var sut = new ExecutedWorkoutService( executedWorkoutRepo.Object, workoutRepo.Object, recommendationService.Object, userService.Object); //ACT var result = sut.Update(modifiedExecutedWorkout); //ASSERT result.ShouldBeSameAs(modifiedExecutedWorkout); executedWorkoutRepo .Verify(mock => mock.UpdateAsync(modifiedExecutedWorkout, It.IsAny <Expression <Func <ExecutedWorkout, object> >[]>()), Times.Once); }
public void Should_Create_ExecutedWorkout_From_ExercisePlan() { //ARRANGE DateTime submittedDate = new DateTime(2020, 2, 3); int userId = 123; var workoutPlan = new WorkoutPlan(); workoutPlan.WorkoutId = 5; workoutPlan.WorkoutName = "Chest and Arms v1"; workoutPlan.UserId = 1; workoutPlan.SubmittedDateTime = submittedDate; workoutPlan.Exercises = new List <ExercisePlan>(3); workoutPlan.Exercises.Add( new ExercisePlan() { ExerciseId = 101, TargetRepCount = 10, ResistanceAmount = 80, ResistanceMakeup = "Onyx, Onxy" } ); workoutPlan.Exercises.Add( new ExercisePlan() { ExerciseId = 102, TargetRepCount = 12, ResistanceAmount = 30, ResistanceMakeup = "Orange" } ); workoutPlan.Exercises.Add( new ExercisePlan() { ExerciseId = 103, TargetRepCount = 8, ResistanceAmount = 5, ResistanceMakeup = "Green" } ); var workout = new Workout(); workout.CreatedByUserId = userId; workout.Exercises = new List <ExerciseInWorkout>(3); workout.Exercises.Add( new ExerciseInWorkout() { ExerciseId = 101, Exercise = new Exercise() { Id = 101 }, NumberOfSets = 2, SetType = SetType.Repetition, Sequence = 0 } ); workout.Exercises.Add( new ExerciseInWorkout() { ExerciseId = 102, Exercise = new Exercise() { Id = 102 }, NumberOfSets = 3, SetType = SetType.Timed, Sequence = 1 } ); workout.Exercises.Add( new ExerciseInWorkout() { ExerciseId = 103, Exercise = new Exercise() { Id = 103 }, NumberOfSets = 4, SetType = SetType.Repetition, Sequence = 2 } ); var workoutRepo = new Mock <IRepository <Workout> >(MockBehavior.Strict); workoutRepo.Setup(x => x.Get(It.IsAny <int>())).Returns(workout); var executedWorkoutRepo = new Mock <IRepository <ExecutedWorkout> >(MockBehavior.Strict); executedWorkoutRepo .Setup(x => x.Add(It.IsAny <ExecutedWorkout>(), true)) .Returns((ExecutedWorkout executedWorkout, bool saveChanges) => executedWorkout); var recommendationService = new Mock <IExerciseAmountRecommendationService>(MockBehavior.Strict); var userService = new Mock <IUserService>(MockBehavior.Strict); var sut = new ExecutedWorkoutService( executedWorkoutRepo.Object, workoutRepo.Object, recommendationService.Object, userService.Object); //ACT var result = sut.Create(workoutPlan, true); //ASSERT Assert.IsNotNull(result, "result is null."); Assert.IsNotNull(result.Exercises, "result.Exercises is null."); Assert.AreEqual(workout.Exercises.Sum(x => x.NumberOfSets), result.Exercises.Count, "result.Exercises.Count isn't as expected."); Assert.AreEqual(submittedDate, result.StartDateTime, "result.StartDateTime is not as expected."); byte exerciseSequence = 0; foreach (var exerciseInWorkout in workout.Exercises?.OrderBy(x => x.Sequence)) { //Find the ExercisePlan in the submitted WorkoutPlan for this exercise var exercisePlan = workoutPlan.Exercises.First(exPlan => exPlan.ExerciseId == exerciseInWorkout.ExerciseId); var executedExercisesInResult = result.Exercises.Where(x => x.ExerciseId == exerciseInWorkout.ExerciseId).OrderBy(x => x.Sequence).ToList(); Assert.AreEqual(exerciseInWorkout.NumberOfSets, executedExercisesInResult.Count, $"Number of exercise in result not as expected for ExerciseId {exerciseInWorkout.ExerciseId}."); for (byte x = 0; x < exerciseInWorkout.NumberOfSets; x++) { //Confirm audit values Assert.AreEqual(workout.CreatedByUserId, executedExercisesInResult[x].CreatedByUserId); Assert.AreEqual(submittedDate, executedExercisesInResult[x].CreatedDateTime); //Confirm exercise Assert.AreEqual(exerciseInWorkout.Exercise, executedExercisesInResult[x].Exercise); Assert.AreEqual(exerciseInWorkout.ExerciseId, executedExercisesInResult[x].ExerciseId); Assert.AreEqual(exerciseInWorkout.SetType, executedExercisesInResult[x].SetType); //Confirm sequence Assert.AreEqual(exerciseSequence, executedExercisesInResult[x].Sequence); //Confirm exercise plan values Assert.AreEqual(exercisePlan.TargetRepCount, executedExercisesInResult[x].TargetRepCount); Assert.AreEqual(exercisePlan.ResistanceAmount, executedExercisesInResult[x].ResistanceAmount); Assert.AreEqual(exercisePlan.ResistanceMakeup, executedExercisesInResult[x].ResistanceMakeup); exerciseSequence++; } } executedWorkoutRepo.Verify(x => x.Add(It.IsAny <ExecutedWorkout>(), true), Times.Once()); }