Esempio n. 1
0
        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!"));
        }
Esempio n. 2
0
        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);
        }