public void Initialize() { rotaModel = new RotaModel { CustoCombustivel = 10, CustoTotal = 20, Distancia = 30, TempoTotal = 40 }; var mockMapLinkApiFactory = new Mock<AbstractMapLinkApiFactory>("v0"); var mockGeocodificacaoApi = new Mock<IGeocodificacaoApi>(); var mockRoteirizacaoApi = new Mock<IRoteirizacaoApi>(); mockGeocodificacaoApi .Setup(t => t.CoordendasPorEndereco(It.IsAny<EnderecoModel>())) .ReturnsAsync(new CoordenadasModel { Latitude = 100, Longitude = 200 }); mockRoteirizacaoApi .Setup(t => t.ObterRota(It.IsAny<List<CoordenadasModel>>(), It.IsAny<double>(), It.IsAny<string>())) .ReturnsAsync(rotaModel); mockMapLinkApiFactory.Setup(t => t.GetGeocodificacao()).Returns(mockGeocodificacaoApi.Object); mockMapLinkApiFactory.Setup(t => t.GetRoteirizacao()).Returns(mockRoteirizacaoApi.Object); mapLinkApiFactory = mockMapLinkApiFactory.Object; }
private async Task<RotaModel> ObterRota(AbstractMapLinkApiFactory mapLinkFactory, List<CoordenadasModel> coordendas, double kmlitros, string veiculo) { try { var roterizacao = mapLinkFactory.GetRoteirizacao(); return await roterizacao.ObterRota(coordendas, kmlitros, veiculo); } catch (Exception ex) { throw new Exception(string.Format("Erro ao calcular a rota '{0}'", ex.Message)); } }
private async Task<List<CoordenadasModel>> ObterCoordenadas(AbstractMapLinkApiFactory mapLinkFactory, List<EnderecoModel> enderecos) { if (enderecos == null || enderecos.Count < 2) { throw new ArgumentException("Deve-se conter pelo menos dois endereços para se calcular a rota"); } var geocodificacao = mapLinkFactory.GetGeocodificacao(); var listaCoordenadas = new List<CoordenadasModel>(); foreach (var endereco in enderecos) { var coordenadas = await geocodificacao.CoordendasPorEndereco(endereco); if (coordenadas != null) { listaCoordenadas.Add(coordenadas); } } return listaCoordenadas; }
public async Task<RotaModel> Calcular(AbstractMapLinkApiFactory mapLinkFactory, CalcularRotaModel calcularRotaModel) { var coordendas = await ObterCoordenadas(mapLinkFactory, calcularRotaModel.Enderecos); return await ObterRota(mapLinkFactory, coordendas, calcularRotaModel.KmLitro, calcularRotaModel.Veiculo); }