public async Task <KeyValuePair <bool, string> > GainAchievement(int userId, GainedAchievementForCreationDto gainedAchievementForCreationDto) { var achievement = await _unitOfWork.Achievements.GetAchievementByValue(gainedAchievementForCreationDto.Value); if (achievement == null) { return(new KeyValuePair <bool, string>(false, "Not valid achievement!")); } var gainedAchievement = await _unitOfWork.Achievements.GetGainedAchievement(userId, gainedAchievementForCreationDto.Value); if (gainedAchievement != null) { return(new KeyValuePair <bool, string>(false, "Already have gained that achievement!")); } gainedAchievement = new GainedAchievement { UserId = userId, User = await _unitOfWork.Users.GetById(userId), DateAchieved = DateTime.Now, Achievement = achievement, AchievementId = achievement.Id }; _unitOfWork.Users.GainAchievement(gainedAchievement); if (await _unitOfWork.Complete()) { return(new KeyValuePair <bool, string>(true, "Achievement successfully gained!")); } return(new KeyValuePair <bool, string>(false, "Problem gaining achievement!")); }
public async Task <IActionResult> GainAchievement(int userId, GainedAchievementForCreationDto gainedAchievementForCreationDto) { if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)) { return(Unauthorized()); } return(Ok(await _usersService.GainAchievement(userId, gainedAchievementForCreationDto))); }
public async Task GainAchievement_ShouldNotGainAchievement_WhenGainedAchievementIsNotSaved() { // Arrange var userId = 1; var user = new PowerUser { Id = userId }; var achievementName = "Top goal scorer"; var achievementId = 1; var achievementPoints = 5; var achievementIcon = "test"; var achievementValue = 10; var achievement = new Achievement { Id = achievementId, Name = achievementName, Points = achievementPoints, Icon = achievementIcon, Value = achievementValue }; var dateAchieved = DateTime.Now; var gainedAchievementDto = new GainedAchievementForCreationDto { UserId = userId, DateAchieved = dateAchieved, Value = achievementValue }; _unitOfWorkMock.Setup(x => x.Achievements.GetAchievementByValue(It.IsAny <int>())) .ReturnsAsync(achievement); _unitOfWorkMock.Setup(x => x.Achievements.GetGainedAchievement(It.IsAny <int>(), achievementValue)) .ReturnsAsync(() => null); _unitOfWorkMock.Setup(x => x.Users.GetById(It.IsAny <int>())) .ReturnsAsync(user); _unitOfWorkMock.Setup(x => x.Complete()) .ReturnsAsync(false); // Act KeyValuePair <bool, string> response = await _sut.GainAchievement(userId, gainedAchievementDto); // Assert Assert.False(response.Key); Assert.Equal("Problem gaining achievement!", response.Value); }