예제 #1
0
        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));
        }