コード例 #1
0
        public void GetCidadeValida_APIInvalidaComDados()
        {
            var cidade = "Sorriso";

            _apiExternalWeatherMapsMock.Setup(x => x.GetTempByCity(cidade))
            .Throws(new HttpRequestException("Mensagem"));
            var cityEntity = new Application.Entidades.City.City()
            {
                CityName = "Sorriso",
                Temp     = "26.67",
                coord    = new Coord()
                {
                    lat = "-18.5653",
                    lon = "-46.5373"
                },
                UltimaAtualizacao = DateTime.Now
            };
            var objMappe = new CityViewModelResponse()
            {
                Nome     = "Sorriso",
                Temp     = "26.67",
                lat      = "-18.5653",
                lon      = "-46.5373",
                Mensagem = "API indisponível no momento, ultimo dado consultado foi de " +
                           cityEntity.UltimaAtualizacao + "."
            };

            _mapperMock.Setup(x => x.Map <CityViewModelResponse>(cityEntity))
            .Returns(objMappe);
            _cityRepositoryMock.Setup(x => x.GetByCidade("Sorriso")).Returns(cityEntity);
            var result = _cityService.GetTempCidade(cidade);

            _cityRepositoryMock.Verify(x => x.GetByCidade(cidade), Times.Once);
            Assert.Equal(result.Result, objMappe);
        }
コード例 #2
0
        public void GetCidadeValida_Sucesso()
        {
            var objCityViewModel = new CityViewModelResponse()
            {
                Nome     = "Sorriso",
                Temp     = "26.67",
                lon      = "-46.5373",
                lat      = "-18.5653",
                Mensagem = "Valor buscado pelo API"
            };
            var cidade = "Sorriso";

            _apiExternalWeatherMapsMock.Setup(x => x.GetTempByCity(cidade))
            .ReturnsAsync(objCityViewModel);
            _mapperMock.Setup(x => x.Map <Application.Entidades.City.City>(objCityViewModel))
            .Returns(new Application.Entidades.City.City
            {
                CityName = "Sorriso",
                Temp     = "26.67",
                coord    = new Coord()
                {
                    lat = "-18.5653",
                    lon = "-46.5373"
                }
            });
            _cityRepositoryMock.Setup(x => x.Add(new Application.Entidades.City.City()
            {
                CityName = "Sorriso",
                Temp     = "26.67",
                coord    = new Coord()
                {
                    lat = "-18.5653",
                    lon = "-46.5373"
                }
            }));
            _cityRepositoryMock.Setup(x => x.GetByCidade("Sorriso")).Returns(new Application.Entidades.City.City()
            {
                CityName = "Sorriso",
                Temp     = "26.67",
                coord    = new Coord()
                {
                    lat = "-18.5653",
                    lon = "-46.5373"
                }
            });

            _cityRepositoryMock.Verify(x => x.GetByCidade(cidade), Times.AtMostOnce);
            _apiExternalWeatherMapsMock.Verify(x => x.GetTempByCity(cidade), Times.AtMostOnce);
            var result = _cityService.GetTempCidade(cidade);

            Assert.True(result.Result.Nome == "Sorriso");
            Assert.True(result.Result.Temp == "26.67");
        }
コード例 #3
0
        public async Task <CityViewModelResponse> GetTempCidade(string cidade)
        {
            var cityResponse = new CityViewModelResponse();

            try
            {
                cityResponse = await _apiExternalWeatherMaps.GetTempByCity(cidade);
            }catch (HttpRequestException)
            {
                var cityEntity = _cityRepository.GetByCidade(cidade);
                if (cityEntity == null)
                {
                    throw new Exception(MessagerAPI.APIandBDNotDate.ToString());
                }
                cityResponse          = _mapper.Map <CityViewModelResponse>(cityEntity);
                cityResponse.Mensagem = "API indisponível no momento, ultimo dado consultado foi de " +
                                        cityEntity.UltimaAtualizacao + ".";
                return(cityResponse);
            }
            try
            {
                var obj = _mapper.Map <City>(cityResponse);
                if (_cityRepository.GetByCidade(obj.CityName) == null)
                {
                    await Add(obj);
                }
                else
                {
                    var objupdate = _cityRepository.GetByCidade(obj.CityName);
                    objupdate.Temp              = obj.Temp;
                    objupdate.coord             = obj.coord;
                    objupdate.UltimaAtualizacao = DateTime.Now;
                    await Update(objupdate);
                }
                return(cityResponse);
            }
            catch (Exception)
            {
                return(cityResponse);
            }
        }
コード例 #4
0
        public async Task <CityViewModelResponse> GetTempByLonLat(string lat, string lon)
        {
            var teste   = new CityViewModelResponse();
            var request = new HttpRequestMessage(HttpMethod.Get,
                                                 "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&units=metric&appid=142d374d2ea6105f400f36546592a3d4");
            var client = _clientFactory.CreateClient();

            var response = await client.SendAsync(request);

            Stream responseStream;
            JsonSerializerOptions options;

            if (!response.IsSuccessStatusCode)
            {
                responseStream = await response.Content.ReadAsStreamAsync();

                options = new JsonSerializerOptions
                {
                    DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
                    WriteIndented       = true
                };
                var objBadRequest = await JsonSerializer.DeserializeAsync
                                    <BadRequestViewModelAPI>(responseStream, options);

                throw new Exception(objBadRequest.message);
            }
            responseStream = await response.Content.ReadAsStreamAsync();

            options = new JsonSerializerOptions
            {
                DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
                WriteIndented       = true
            };
            var objApi = await JsonSerializer.DeserializeAsync
                         <CityAPI>(responseStream, options);

            teste = _mapper.Map <CityViewModelResponse>(objApi);
            return(teste);
        }