Example #1
0
        public async Task GetPokemonListAsync_SendRequestApi_ApiReturnsList()
        {
            var pokeApiServiceMock = new Mock <IPokeApiService>();
            var cacheMock          = new Mock <IDistributedCache>();

            PokeApiPokemonListResponse pokemonListResponse = new PokeApiPokemonListResponse();

            pokeApiServiceMock.Setup(x => x.GetPokemonListAsync())
            .Returns(Task.FromResult(pokemonListResponse));

            PokemonRepository pokemonRepository = new PokemonRepository(pokeApiServiceMock.Object, cacheMock.Object);
            var response = await pokemonRepository.GetPokemonListAsync();

            Assert.IsType <List <Pokemon> >(response);
        }
Example #2
0
        public async Task <List <Pokemon> > GetPokemonListAsync()
        {
            var dataCache = await _cache.GetStringAsync(KeyPokemonList);

            if (!string.IsNullOrWhiteSpace(dataCache))
            {
                return(JsonConvert.DeserializeObject <List <Pokemon> >(dataCache));
            }

            PokeApiPokemonListResponse result = await _pokeApiService.GetPokemonListAsync();

            if (result is null)
            {
                return(null);
            }

            var pokemonList = new List <Pokemon>();

            foreach (var item in result.Results)
            {
                PokeApiPokemonDetailResponse detailResponse = await _pokeApiService.GetPokemonDetailAsync(item.Name);

                if (detailResponse != null)
                {
                    pokemonList.Add(new Pokemon {
                        Id       = detailResponse.Id,
                        Name     = detailResponse.Name,
                        UrlImage = detailResponse.Sprites.front_default,
                        TypeOne  = detailResponse.Types.Find(t => t.Slot == 1).Type.Name,
                        TypeTwo  = detailResponse.Types.Exists(t => t.Slot == 2)
                            ? detailResponse.Types.Find(t => t.Slot == 2).Type.Name
                            : ""
                    });
                }
            }

            // Se guarda la respuesta en cache
            var cacheSettings = new DistributedCacheEntryOptions();

            cacheSettings.SetAbsoluteExpiration(TimeSpan.FromMinutes(TimeExpiration));
            var itemJson = JsonConvert.SerializeObject(pokemonList);
            await _cache.SetStringAsync(KeyPokemonList, itemJson, cacheSettings);

            return(pokemonList);
        }