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); }
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); }