public Task <string> GetBestRoute(BestRouteRequest action) { StartNode = new Node() { Name = action.From.ToUpper() }; EndNode = new Node() { Name = action.To.ToUpper() }; DataSource = action.DataSource; DijkstraSearch(); BuildShortestPath(BestRoute, EndNode); BestRoute.AddFirst(StartNode); var itinerary = new BestRouteResponse() { BestRoute = BestRoute }; var message = itinerary.BestRoute.Last() == EndNode ? $"Best route found: {itinerary} > $ {itinerary.Total}" : "No routes found for this params :("; return(Task.FromResult(message)); }
public async Task <ActionResult> GetBestRoute([FromQuery] BestRouteRequest action) { var errors = new List <ValidationResult>(); Validator.TryValidateObject(action, new ValidationContext(action, null, null), errors, true); if (errors.Count > 0) { return(BadRequest(errors.First())); } var result = await _service.GetBestRoute(action); return(Ok(result)); }
public async Task GetBestRoute_Should_Return_BadRequest_DataSource(string dataSource, string from, string to) { //Arrange var fakeRequest = new BestRouteRequest() { DataSource = dataSource, From = from, To = to }; //Act var result = await _controller.GetBestRoute(fakeRequest); var okResult = result as BadRequestObjectResult; //Assert Assert.Equal(400, okResult.StatusCode); Assert.Equal("The field DataSource is required.", okResult.Value.ToString()); }
public async Task GetBestRoute_Should_Return_Ok(string dataSource, string from, string to) { //Arrange var fakeRequest = new BestRouteRequest() { DataSource = dataSource, From = from, To = to }; //Act var result = await _controller.GetBestRoute(fakeRequest); var okResult = result as OkObjectResult; var resultData = okResult.Value; //Assert Assert.NotNull(resultData); Assert.Equal(200, okResult.StatusCode); Assert.StartsWith("Best route found: GRU -> ", resultData.ToString()); }
static async Task Main() { using IHost host = CreateHostBuilder().Build(); ISearchService service = CreateScope(host.Services); var request = new BestRouteRequest(); var errors = new List <ValidationResult>(); Stopwatch stopWatch = new Stopwatch(); do { Console.Write($"Enter the CSV filename. Ex: input-file.csv: "); string dataSource = Console.ReadLine(); Console.Write($"Enter the route in format \"FROM-TO\". Ex: GRU-SCL: "); string route = Console.ReadLine(); if (route.Split("-").Length == 2) { request = new BestRouteRequest() { From = route.Split("-")[0], To = route.Split("-")[1], DataSource = dataSource }; } Validator.TryValidateObject(request, new ValidationContext(request, null, null), errors, true); }while (errors.Count > 0); stopWatch.Start(); var result = await service.GetBestRoute(request); stopWatch.Stop(); Console.WriteLine($"{result} \n RunTime: " + stopWatch.Elapsed.ToString()); await Task.Run(() => host.RunAsync()); }