Exemple #1
0
        public async Task <IActionResult> Feed(int userId, [FromBody] UserCommands.Feed feed)
        {
            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 == feed.AnimalId);

            if (animal == null)
            {
                return(BadRequest($"User with id:{userId} doesn't own an animal with id:{feed.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.Feed(animalStats.FeedHungerBoost);

            return(Ok());
        }
        public async Task Feed_WhenAnimalFound_ShouldDecreaseHunger()
        {
            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 hungerBeforeFeed = animal.Metrics[MetricType.Hunger].Value;
            var feed             = new UserCommands.Feed {
                AnimalId = animalId
            };

            var response = await _client.PostAsJsonAsync(string.Format(FeedAnimalEndpoint, userId), feed);

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

            Assert.Equal(animalStat.FeedHungerBoost, currentHunger - hungerBeforeFeed);
        }