/// <summary>
        ///     Creates a new challenge between two users
        /// </summary>
        /// <param name="dto">dto with challenge information</param>
        /// <returns>uid of created challenge</returns>
        public async Task <int> CreateChallengeAsync(NewChallengeDto dto)
        {
            //validate data
            if (dto.ChallengeeId == dto.ChallengerId)
            {
                LogError(nameof(CreateChallengeAsync),
                         $"Failed to create because user ids where the same: {dto.ChallengeeId}{dto.ChallengerId}");
                return(-1);
            }

            var challenger = await _userRepository.GetUser(dto.ChallengerId);

            var challengee = await _userRepository.GetUser(dto.ChallengeeId);

            var exercise = await _exerciseRepository.FindAsync(dto.ExerciseId);

            if (challenger == null || challengee == null || exercise == null)
            {
                LogError(nameof(CreateChallengeAsync),
                         $"Failed to create because entities was null{challenger}{challengee}{exercise}");
                return(-1);
            }

            //Create challenge
            var challenge = _mapper.Map <Challenge>(dto);

            challenge.ChallengerUser = challenger;
            challenge.ChallengeeUser = challengee;
            challenge.IsComplete     = false;
            challenge.CreationDate   = DateTime.Now;
            challenge.Exercise       = exercise;
            challenge.ResultReps     = 0;

            LogInformation(nameof(CreateChallengeAsync),
                           $"Challenge was created between challengerId {challenger.Id} and challengeeId{challengee.Id}");
            return(await _challengeRepository.CreateAsync(challenge));
        }
예제 #2
0
        public async Task ChallengePost_ReturnsViewError_ChallengeNotCreated()
        {
            // Arrange
            var newChallengeDto = new NewChallengeDto()
            {
                Weight = 10, ChallengeeId = 1, ChallengerId = 2, ExerciseId = 1, Reps = 10
            };
            var challengeableUserDtos = new List <ChallengeAbleUserDto>()
            {
                new ChallengeAbleUserDto {
                    DisplayName = "Test", Id = 1
                }
            };

            var challengeViewModel = new NewChallengeViewModel()
            {
                Id                    = 1,
                ExerciseId            = 1,
                ChallengeAbleUserDtos = challengeableUserDtos,
                ChallengeeId          = challengeableUserDtos.First().Id,
                ExerciseName          = "Squat",
                Reps                  = 10,
                Set                   = 10,
                Weight                = 10
            };

            var mockUserManager = new FakeUserManager();
            var mockMapper      = new Mock <IMapper>();

            mockMapper.Setup(m => m.Map <NewChallengeDto>(It.IsAny <NewChallengeViewModel>()))
            .Returns(newChallengeDto)
            .Verifiable();
            var mockLoggerFactory = new Mock <ILoggerFactory>();
            var mockLogger        = new Mock <ILogger>();

            mockLoggerFactory.Setup(l => l.CreateLogger(It.IsAny <string>())).Returns(mockLogger.Object);
            var mockWorkoutService   = new Mock <IWorkoutService>();
            var mockExerciseService  = new Mock <IExerciseService>();
            var mockChallengeService = new Mock <IChallengeService>();

            mockChallengeService.Setup(c => c.CreateChallengeAsync(It.IsAny <NewChallengeDto>()))
            .ReturnsAsync(0)     // Result challenge not created
            .Verifiable();
            var mockWorkoutRepository = new Mock <IWorkoutRepository>();

            var workoutController = new WorkoutController(
                mockLoggerFactory.Object,
                mockMapper.Object,
                mockWorkoutService.Object,
                mockExerciseService.Object,
                mockUserManager,
                mockWorkoutRepository.Object,
                mockChallengeService.Object);

            // Act
            var result = await workoutController.Challenge(challengeViewModel) as ViewResult;

            // Assert
            Assert.IsType <ViewResult>(result);
            Assert.Equal("/Error", result.ViewName);
        }