/// <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)); }
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); }