private void ValidarModel(EnderecoModel endereco) { if(string.IsNullOrEmpty(endereco.Rua) || endereco.Numero == 0 || string.IsNullOrEmpty(endereco.Cidade) || string.IsNullOrEmpty(endereco.Estado)) { throw new ArgumentException("Endereço inválido"); } }
public async Task<CoordenadasModel> CoordendasPorEndereco(EnderecoModel endereco) { ValidarModel(endereco); string signatureUrl = MontarUri(endereco); string json = await requestJSON.GetJSON(apiConfig.GetGeocodificacaoLink(), signatureUrl); if(json != null) { return ParseJSON(json); } throw new CoordenadasNaoEcontradasException(string.Format("Endereços não encontrados, rua: '{0}', numero: '{1}', cidade: '{2}', estado: '{3}'", endereco.Rua, endereco.Numero, endereco.Cidade, endereco.Estado)); }
public async Task CoordendasPorEnderecoTest() { var mockRequestJSON = new Mock<IRequestJSON>(); mockRequestJSON.Setup(t => t.GetJSON(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync("{ addresses: [{ addressLine: { location: { coordinates : [100, 200] } } }]}"); IGeocodificacaoApi geocodificacaoApi = new GeocodificacaoApiV0(mapLinkSignature, mockRequestJSON.Object, apiConfig); var endereco = new EnderecoModel { Rua = "Rua", Numero = 100, Cidade = "Cidade", Estado = "Estado" }; var coordendas = await geocodificacaoApi.CoordendasPorEndereco(endereco); Assert.AreEqual(coordendas.Latitude, 200.0); Assert.AreEqual(coordendas.Longitude, 100.0); }
public async Task CoordendasPorEnderecoNaoEncontradoTest() { var mockRequestJSON = new Mock<IRequestJSON>(); mockRequestJSON.Setup(t => t.GetJSON(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(null); IGeocodificacaoApi geocodificacaoApi = new GeocodificacaoApiV0(mapLinkSignature, mockRequestJSON.Object, apiConfig); var endereco = new EnderecoModel { Rua = "Rua", Numero = 100, Cidade = "Cidade", Estado = "Estado" }; try { var coordendas = await geocodificacaoApi.CoordendasPorEndereco(endereco); } catch(CoordenadasNaoEcontradasException ex) { Assert.AreEqual(ex.Message, "Endereços não encontrados, rua: 'Rua', numero: '100', cidade: 'Cidade', estado: 'Estado'"); throw ex; } }
public async Task CoordendasPorEnderecoSemEnderecoTest() { var mockRequestJSON = new Mock<IRequestJSON>(); mockRequestJSON.Setup(t => t.GetJSON(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(null); IGeocodificacaoApi geocodificacaoApi = new GeocodificacaoApiV0(mapLinkSignature, mockRequestJSON.Object, apiConfig); var endereco = new EnderecoModel { Rua = "Rua", Estado = "Estado" }; try { var coordendas = await geocodificacaoApi.CoordendasPorEndereco(endereco); } catch (ArgumentException ex) { Assert.AreEqual(ex.Message, "Endereço inválido"); throw ex; } }
public async Task CoordendasPorEnderecoJSONInvalidoTest() { var mockRequestJSON = new Mock<IRequestJSON>(); mockRequestJSON.Setup(t => t.GetJSON(It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync("{ addresses: { addressLine: { location: { coordinates : [100, 200] } } }}"); IGeocodificacaoApi geocodificacaoApi = new GeocodificacaoApiV0(mapLinkSignature, mockRequestJSON.Object, apiConfig); var endereco = new EnderecoModel { Rua = "Rua", Numero = 100, Cidade = "Cidade", Estado = "Estado" }; try { var coordendas = await geocodificacaoApi.CoordendasPorEndereco(endereco); } catch (ArgumentException ex) { Assert.AreEqual(ex.Message, "Erro ao realizar a busca de um dos endereços"); throw ex; } }
private string MontarUri(EnderecoModel endereco) { string urlPattern = "{0}/geocode?streetName={1}&houseNumber={2}&city={3}&state={4}&applicationCode={5}"; var requestUrl = string.Format(urlPattern, apiConfig.GetGeocodificacaoLink(), endereco.Rua, endereco.Numero, endereco.Cidade, endereco.Estado, apiConfig.GetApplicationCode()); return mapLinkSignature.GenerateSignature(requestUrl, apiConfig.GetToken()); }