示例#1
0
        static void Main(string[] args)
        {
            // Get Flights
            var flightBuilder = new FlightBuilder();
            var flightList    = new ResultSet(flightBuilder.GetFlights());

            // Display List of Flights - not normally needed, for comparison with Filtered list
            Console.WriteLine("~ Initial Flight List ~");
            flightList.WriteToConsole();

            // Could ask User for filters like Departure Date here

            // Build Filters
            var filterBuilder = new FilterBuilder();

            // Was intending to use a new prototype interface to clone the Basic default
            // filter but ran out of time

            // Filter Flights
            flightList.ApplyFilters(filterBuilder.GetFilterSet("Basic"));

            // Display Final List of Flights
            Console.WriteLine("~ Filter Results ~");
            flightList.WriteToConsole();

            Console.WriteLine("Press any key to exit");
            Console.ReadLine();
        }
示例#2
0
        public void Check_FlightHasValidDates()
        {
            FlightProvider       flightBuilder = new FlightBuilder();
            IEnumerable <Flight> flights       = flightBuilder.GetFlights(FlightFilters.IsValid);

            Assert.DoesNotContain(flights, (f => f.Segments.Any(seg => seg.DepartureDate > seg.ArrivalDate)));
        }
示例#3
0
        public void Check_IsCurrentFlight()
        {
            FlightProvider       flightBuilder = new FlightBuilder();
            IEnumerable <Flight> flights       = flightBuilder.GetFlights(FlightFilters.IsCurrent);

            Assert.DoesNotContain(flights, (f => f.Segments.Any(seg => seg.DepartureDate < DateTime.Now)));
        }
示例#4
0
        public void Check_IsGroundTimeLessThan2HoursFlight()
        {
            FlightProvider       flightBuilder = new FlightBuilder();
            IEnumerable <Flight> flights       = flightBuilder.GetFlights(FlightFilters.IsGroundTimeLessThan2Hours);

            Assert.DoesNotContain(flights, FlightFilters.HasOverlappingSegments);
            Assert.DoesNotContain(flights, (flight => flight.GetTotalTravelTime().Subtract(flight.GetFlightTime()) > TimeSpan.FromHours(2)));
        }
示例#5
0
        static void Main(string[] args)
        {
            FlightBuilder  fb      = new FlightBuilder();
            IList <Flight> flights = fb.GetFlights();

            PrintFlights(flights);
            DepartBeforeCurrentDateTime(DateTime.Now, flights);
            SegmentsWithArrivalEarlierThanDepartureDate(flights);
            DepartureOver2HoursAfterArrival(flights);
        }
示例#6
0
        public void Check_FlightSegmentsAreOrdered()
        {
            FlightProvider       flightBuilder = new FlightBuilder();
            IEnumerable <Flight> flights       = flightBuilder.GetFlights();

            foreach (Flight f in flights)
            {
                for (int i = 1; i < f.Segments.Count; i++)
                {
                    Assert.False(f.Segments[i].DepartureDate < f.Segments[i - 1].DepartureDate, "Unordered Segments found in flights");
                }
            }
        }
示例#7
0
        private void button2_Click(object sender, EventArgs e)
        {
            FlightBuilder fb      = new FlightBuilder();
            var           flights = fb.GetFlights();

            //Have a segment with an arrival date before the departure date.
            var arrivalBefore = flights
                                .SelectMany(s => s.Segments
                                            .Where(i => DateTime.Compare(i.ArrivalDate, i.DepartureDate) < 0));

            foreach (var f in arrivalBefore)
            {
                Console.WriteLine("Arrival Date: " + f.ArrivalDate.ToString() + " departure date: " + f.DepartureDate.ToString());
            }
            FlightGridView.DataSource = arrivalBefore.ToList();
        }
示例#8
0
        private void button3_Click(object sender, EventArgs e)
        {
            FlightBuilder fb      = new FlightBuilder();
            var           flights = fb.GetFlights();

            //3.Spend more than 2 hours on the ground. i.e those with a total gap of over two hours between the
            //arrival date of one segment and the departure date of the next.
            var gapGround = flights
                            .Where(s => (s.Segments.Count >= 2))
                            .Where(FilterFlights);

            foreach (var f in gapGround)
            {
                //Console.WriteLine("Arrival Date: " + f.Segments.ToString() + " departure date: " + f.Segments.ToString());
            }
            FlightGridView.DataSource = gapGround.SelectMany(s => s.Segments).ToList();
        }
示例#9
0
        private void button1_Click(object sender, EventArgs e)
        {
            FlightBuilder fb      = new FlightBuilder();
            var           flights = fb.GetFlights();

            //Depart before the current date/time.
            var departBefore = flights
                               .SelectMany(s => s.Segments
                                           .Where(i => DateTime.Compare(i.DepartureDate, DateTime.Now) < 0));

            foreach (var f in departBefore)
            {
                Console.WriteLine("Arrival Date: " + f.ArrivalDate.ToString() + " departure date: " + f.DepartureDate.ToString());
            }

            FlightGridView.DataSource = departBefore.ToList();
        }
示例#10
0
        public void Check_FlightSegmentsAreOrderedForced()
        {
            FlightProvider flightBuilder = new FlightBuilder();

            flightBuilder.ShouldOrderSegments = false;
            IEnumerable <Flight> flights = flightBuilder.GetFlights();
            bool ordered = true;

            foreach (Flight f in flights)
            {
                for (int i = 1; i < f.Segments.Count; i++)
                {
                    if (f.Segments[i].DepartureDate < f.Segments[i - 1].DepartureDate)
                    {
                        ordered = false;
                        break;
                    }
                }
            }
            Assert.True(ordered, "Unordered Segments have been reordered in flights");
        }
示例#11
0
        //segment with an arrival date before the departure date
        public static void SegmentsWithArrivalEarlierThanDepartureDate(IList <Flight> flights)
        {
            FlightBuilder fb      = new FlightBuilder();
            List <string> message = new List <string>();
            int           counter = 1;

            foreach (Flight flight in flights)
            {
                message.Add(string.Format("Flight {0}", counter++));
                message.Add(" Arrival Date\tDeparture Date");
                foreach (Segment s in flight.Segments)
                {
                    if (s.ArrivalDate.CompareTo(s.DepartureDate) < 0)
                    {
                        message.Add(string.Format("{0}\t{1}", s.ArrivalDate, s.DepartureDate));
                    }
                }
            }
            File.Delete(SegmentsWithArrivalDepartureDatefile);
            File.WriteAllLines(SegmentsWithArrivalDepartureDatefile, message);
        }
示例#12
0
        public static void DepartureOver2HoursAfterArrival(IList <Flight> flights)
        {
            FlightBuilder fb      = new FlightBuilder();
            List <string> message = new List <string>();
            int           counter = 1;

            foreach (Flight flight in flights)
            {
                message.Add(string.Format("Flight {0}", counter++));
                message.Add(" Arrival Date\tDeparture Date");
                foreach (Segment s in flight.Segments)
                {
                    TimeSpan ts = s.DepartureDate.Subtract(s.ArrivalDate);
                    if (ts.TotalDays > 1 || ts.TotalHours > 2)
                    {
                        message.Add(string.Format("{0}\t{1}", s.ArrivalDate, s.DepartureDate));
                    }
                }
            }
            File.Delete(DepartureOver2HoursAfterArrivalfile);
            File.WriteAllLines(DepartureOver2HoursAfterArrivalfile, message);
        }
示例#13
0
            public IList <Flight> GetFlights()
            {
                FlightBuilder fb = new FlightBuilder();

                return(fb.GetFlights());
            }
示例#14
0
 private static IList <Flight> GetAllFlights(FlightBuilder flightBuilder)
 {
     return(flightBuilder.GetFlights());
 }