Ejemplo n.º 1
0
        /// <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);
        }