public void If_Has_Only_One_Address_Should_Call_The_Finder_Only_Once()
        {
            var address = new AddressSearch("asd", 100, "asd", "asd", "123");

            var list = new List<AddressSearch>() { address };

            _routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);

            _mockFinder.Verify(x => x.FindCoordinateAsync(address), Times.Once);
        }
        public void If_Not_Null_Object_Was_Passed_Should_Call_The_Route_Calculator()
        {
            var address = new AddressSearch("asd", 100, "asd", "asd", "123");

            var list = new List<AddressSearch>() { address };

            _routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);

            _mockRouteCalculator.Verify(x => x.CalcuteRouteAsync(It.IsAny<IList<AddressSearch>>(), RouteType.DefaultRouteFaster) ,Times.Once());
        }
        public void If_Not_Null_Object_Was_Passed_Should_Call_The_Coordinate_Finder()
        {
            var address = new AddressSearch("asd", 100, "asd", "asd", "123");

            var list = new List<AddressSearch>() { address };

            _routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);

            _mockFinder.Verify(x => x.FindCoordinateAsync(address));
        }
        public void If_Has_Only_Two_Addresses_Should_Call_The_Finder_Only_Teice()
        {
            var address1 = new AddressSearch("asd", 100, "asd", "asd", "123");
            var address2 = new AddressSearch("asd", 100, "asd", "asd", "123");

            var list = new List<AddressSearch>() { address1, address2 };

            _routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);

            _mockFinder.Verify(x => x.FindCoordinateAsync(It.IsAny<AddressSearch>()), Times.Exactly(2));
        }
        public async Task<Coordinate> FindCoordinateAsync(AddressSearch search)
        {
            using (var addressFinderSoapClient = new AddressFinderSoapClient())
            {
                
                var address = Mapper.Map<AddressSearch, Address>(search);
                
                var response = await addressFinderSoapClient.findAddressAsync(address, _config.GetAddressOptions(), _token.Tokenvalue);

                if (response.Body.findAddressResult.addressLocation.Length > 0)
                {
                    var point = response.Body.findAddressResult.addressLocation[0].point;
                    return new Coordinate(point.y, point.x);
                }
            }
            return await Task.FromResult(Coordinate.Empty());
        }
 public void SetUp()
 {
     _search = new AddressSearch("Avenida Nove de Julho", 100, "São Paulo", "SP", "01103-000");
 }
        public async void Should_Calculate_The_Route_For_A_Known_Address()
        {


            var routeService = new RouteService(new MapLinkCoordinateFinder(new MapLinkToken()), new MapLinkRouteCalculator(new MapLinkToken()));

            var address1 = new AddressSearch("Avenida Paulista", 1000, "São Paulo", "SP");
            var address2 = new AddressSearch("Avenida Paulista", 2000, "São Paulo", "SP");

            var list = new List<AddressSearch>() { address1, address2 };

            var route = await routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);

            Assert.IsTrue(route.TotalCost > 0);
            Assert.IsTrue(route.TotalDistance > 0);
            Assert.IsTrue(route.TotalFuelCost > 0);
            Assert.IsTrue(route.TotalTime != string.Empty);
        }
        public async void Should_Set_Coordinates_For_A_Known_Address()
        {


            var routeService = new RouteService(new MapLinkCoordinateFinder(new MapLinkToken()), new MapLinkRouteCalculator(new MapLinkToken()));

            var address1 = new AddressSearch("Avenida Paulista", 1000, "São Paulo", "SP");
            var address2 = new AddressSearch("Avenida Paulista", 2000, "São Paulo", "SP");

            var list = new List<AddressSearch>() { address1, address2 };

            await routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);

            Assert.IsTrue(address1.Latitude != 0 && address1.Longitude != 0);
        }
        public async void Should_Throw_An_Exception_If_The_Token_Is_Invalid()
        {
            var mockToken = new Mock<IToken>();

            mockToken.Setup(x => x.Tokenvalue).Returns(string.Empty);

            _routeService = new RouteService(new MapLinkCoordinateFinder(mockToken.Object), _mockRouteCalculator.Object);

            var address1 = new AddressSearch("Avenida Paulista", 1000, "São Paulo", "SP");

            var list = new List<AddressSearch>() { address1 };

            await _routeService.CalculateRouteAsync(list, RouteType.DefaultRouteFaster);
        }