Example #1
0
        public async Task <IActionResult> Stroke(int userId, [FromBody] UserCommands.Stroke stroke)
        {
            var user = await _userRepository.GetByIdAsync(userId);

            if (user == null)
            {
                return(BadRequest($"User with id:{userId} doesn't exist."));
            }

            var animal = user.Animals.FirstOrDefault(a => a.Id == stroke.AnimalId);

            if (animal == null)
            {
                return(BadRequest($"User with id:{userId} doesn't own an animal with id:{stroke.AnimalId}."));
            }

            var animalStats = _animalOptions.Value.AnimalStats.FirstOrDefault(s => s.Code == animal.Code);

            if (animalStats == null)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong, please contact the administrator."));
            }

            animal.Stroke(animalStats.StrokeHappinessBoost);

            return(Ok());
        }
        public async Task Stroke_WhenAnimalFound_ShouldIncreaseHappiness()
        {
            var key      = nameof(User);
            var userId   = 1;
            var animalId = 1;
            var users    = _factory.FakeUsersCache.Get <List <User> >(key);
            var user     = users.FirstOrDefault(u => u.Id == userId);
            var animal   = user.Animals.FirstOrDefault(a => a.Id == animalId);
            var happinessBeforeStroke = animal.Metrics[MetricType.Happiness].Value;
            var stroke = new UserCommands.Stroke {
                AnimalId = animalId
            };

            var response = await _client.PostAsJsonAsync(string.Format(StrokeAnimalEndpoint, userId), stroke);

            var animalOptions    = _factory.Services.GetService <IOptions <AnimalOptions> >();
            var animalStat       = animalOptions.Value.AnimalStats.FirstOrDefault(s => s.Code == animal.Code);
            var currentHappiness = animal.Metrics[MetricType.Happiness].Value;

            Assert.Equal(animalStat.StrokeHappinessBoost, currentHappiness - happinessBeforeStroke);
        }