/// <summary> /// Save a new workout /// </summary> /// <param name="dto"></param> /// <returns></returns> public async Task <int> AddWorkoutAsync(NewWorkoutDto dto) { if (dto == null || dto.UserId < 1) { LogError("AddWorkoutAsync", "Dto was invalid. Aborted workout creation"); return(-1); } var user = await _userRepository.GetUser(dto.UserId); if (user == null) { LogNonExistingUserError("AddWorkoutAsync", dto.UserId); return(-1); } if (user.Workouts == null) { user.Workouts = new List <Workout>(); } var workout = new Workout { User = user, Name = dto.Name, CreationDate = DateTime.Now }; //user.Workouts.Add(workout); var workoutId = await _workoutRepository.CreateAsync(workout); LogInformation("AddWorkoutAsync", $"Workout was added for {dto.UserId}"); return(workoutId); }
/// <summary> /// Add a workout on workout page. /// </summary> /// <returns> /// Edit page of new workout if success. /// </returns> public async Task <IActionResult> AddWorkout() { var user = await GetCurrentUserAsync(); var exercises = await _exerciseService.GetAllExercisesAsync(); var workouts = await _workoutService.GetAllWorkoutsAsync(user.Id); if (workouts == null || exercises == null) { return(View("/Error")); } var workoutSize = workouts.Count; var addWorkoutDto = new NewWorkoutDto { UserId = user.Id, Name = string.Format("Workout {0}", workoutSize) }; var workoutId = await _workoutService.AddWorkoutAsync(addWorkoutDto); if (workoutId < 1) { return(View("/Error")); // Error } var workoutDto = await _workoutService.GetWorkoutAsync(workoutId); var model = _mapper.Map <WorkoutDto, WorkoutViewModel>(workoutDto); model.WorkoutEntries = new List <WorkoutEntryViewModel>(); model.Exercises = exercises.ToList(); return(RedirectToAction(nameof(EditWorkout), model)); }
public async Task SaveNewWorkoutValidDtoReturnsId() { //Arrange var loggerMock = new Mock <ILoggerFactory>(); var userRepoMock = new Mock <IUserRepository>(); var workoutRepoMock = new Mock <IWorkoutRepository>(); var workoutEntryRepoMock = new Mock <IWorkoutEntryRepository>(); var exerciseRepoMock = new Mock <IExerciseRepository>(); var mockMapper = new Mock <IMapper>(); var logger = new Mock <ILogger>(); loggerMock.Setup(l => l.CreateLogger(It.IsAny <string>())).Returns(logger.Object); var user = new User { Workouts = new List <Workout>() }; var workoutEntries = new List <NewWorkoutEntryDto> { new NewWorkoutEntryDto { ExerciseId = 1, Set = 1, Reps = 10, Weight = 20 } }; var dto = new NewWorkoutDto { UserId = 1, Name = "name" }; userRepoMock.Setup(r => r.GetUser(It.IsAny <int>())).ReturnsAsync(user); workoutRepoMock.Setup(r => r.CreateAsync(It.IsAny <Workout>())).ReturnsAsync(1); exerciseRepoMock.Setup(r => r.FindAsync(It.IsAny <int>())).ReturnsAsync(new Exercise()); mockMapper.Setup(m => m.Map <WorkoutEntry>(It.IsAny <NewWorkoutEntryDto>())).Returns(new WorkoutEntry()); var SUT = new WorkoutService(loggerMock.Object, mockMapper.Object, userRepoMock.Object, workoutRepoMock.Object, exerciseRepoMock.Object, workoutEntryRepoMock.Object); //Act var result = await SUT.AddWorkoutAsync(dto); //Asert Assert.True(result > 0); }
public async Task SaveNewWorkouNoUserReturnOnceUserDatabaseNeverOtherDatabases() { //Arrange var loggerMock = new Mock <ILoggerFactory>(); var userRepoMock = new Mock <IUserRepository>(); var workoutRepoMock = new Mock <IWorkoutRepository>(); var workoutEntryRepoMock = new Mock <IWorkoutEntryRepository>(); var exerciseRepoMock = new Mock <IExerciseRepository>(); var mockMapper = new Mock <IMapper>(); var logger = new Mock <ILogger>(); loggerMock.Setup(l => l.CreateLogger(It.IsAny <string>())).Returns(logger.Object); var workoutEntries = new List <NewWorkoutEntryDto> { new NewWorkoutEntryDto { ExerciseId = 1, Set = 1, Reps = 10, Weight = 20 } }; var dto = new NewWorkoutDto { Name = "Name", UserId = 1 }; mockMapper.Setup(m => m.Map <WorkoutEntry>(It.IsAny <NewWorkoutEntryDto>())).Returns(new WorkoutEntry()); userRepoMock.Setup(r => r.FindAsync(It.IsAny <int>())).ReturnsAsync((User)null); var SUT = new WorkoutService(loggerMock.Object, mockMapper.Object, userRepoMock.Object, workoutRepoMock.Object, exerciseRepoMock.Object, workoutEntryRepoMock.Object); //Act var result = await SUT.AddWorkoutAsync(dto); //Asert userRepoMock.Verify(r => r.UpdateAsync(It.IsAny <User>()), Times.Never); workoutRepoMock.Verify(r => r.CreateAsync(It.IsAny <Workout>()), Times.Never); exerciseRepoMock.Verify(r => r.FindAsync(It.IsAny <int>()), Times.Never); }