public IActionResult IndexPost(HistoricalQuery query) { // Historical Data HistoricalServicePerformanceClient historicalClient = new HistoricalServicePerformanceClient(_config["Keys:NationalRail:Email"], _config["Keys:NationalRail:Password"]); List <ServiceDetailsResponse> details = new List <ServiceDetailsResponse>(); List <ServiceMetricResponse> historicalResponses = new List <ServiceMetricResponse>(); List <Service> services = new List <Service>(); DateTime date; DateTime.TryParseExact(query.Date, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date); DateTime endDate = date.AddDays(1); while (date < endDate && date < DateTime.Now) { string fromTime = date.TimeOfDay.ToString("hhmm"); string toTime = date.AddHours(1).TimeOfDay.ToString("hhmm"); if (toTime == "0000") { toTime = "2359"; } ServiceMetric metric = new ServiceMetric() { FromLocation = query.FromCrs, ToLocation = query.ToCrs, FromTime = fromTime, ToTime = toTime, FromDate = date.ToString("yyyy-MM-dd"), ToDate = date.ToString("yyyy-MM-dd") }; if (date.DayOfWeek == DayOfWeek.Saturday) { metric.Days = "SATURDAY"; } else if (date.DayOfWeek == DayOfWeek.Sunday) { metric.Days = "SUNDAY"; } else { metric.Days = "WEEKDAY"; } ServiceMetricResponse historicalResponse = historicalClient.GetServiceMetrics(metric).Result; historicalResponses.Add(historicalResponse); foreach (Service service in historicalResponse.Services) { services.Add(service); foreach (string rid in service.ServiceAttributesMetrics.RIDs) { ServiceDetailsResponse detail = historicalClient.GetServiceDetails(new ServiceDetailsRID(rid)).Result; details.Add(detail); } } date = date.AddHours(1); } TempData.Put("Stations", _stations); TempData.Put("Services", services); TempData.Put("Details", details); TempData.Put("DelayReasons", _delayReasons); return(View("~/Views/Projects/NationalRail/Index.cshtml", query)); }
public async Task CallsGetServiceDetailsEndpoint_ForEachRid() { const string startLocation = "TND"; const string endLocation = "OFM"; var startDate = new DateTime(2021, 03, 31, 5, 3, 0); var endDate = new DateTime(2021, 03, 31, 5, 20, 0); var serviceMetricsResponse = new ServiceMetricsResponse { Services = { new Service { ServiceAttributesMetrics = new ServiceAttributesMetrics { Rids ={ "123", "456" } } }, new Service { ServiceAttributesMetrics = new ServiceAttributesMetrics { Rids ={ "789" } } } } }; var serviceDetailsResponse = new ServiceDetailsResponse { ServiceAttributesDetails = new ServiceAttributesDetails { Locations = { new LocationDetail { Location = startLocation }, new LocationDetail { Location = endLocation } } } }; var mockHttp = new MockHttpMessageHandler(); mockHttp.When(serviceMetricsUrl.ToString()) .Respond("application/json", JsonConvert.SerializeObject(serviceMetricsResponse)); var serviceDetailsRequest = mockHttp.When(serviceDetailsUrl.ToString()) .Respond("application/json", JsonConvert.SerializeObject(serviceDetailsResponse)); var mockclient = mockHttp.ToHttpClient(); var clientFactory = Mock.Of <IHttpClientFactory>(i => i.CreateClient(darwinClientName) == mockclient); var options = Mock.Of <IOptionsMonitor <HistoricServiceUris> >(i => i.CurrentValue == new HistoricServiceUris { ServiceDetails = serviceDetailsUrl, ServiceMetrics = serviceMetricsUrl }); var repository = new HistoricServiceRepository(clientFactory, options); await repository.GetTrainTimes( startDate, endDate, startLocation, endLocation, CancellationToken.None); Assert.Equal(3, mockHttp.GetMatchCount(serviceDetailsRequest)); }