public void FlightValidationService_Should_Throw()
        {
            var now            = DateTime.Now;
            var fvs            = new FlightValidationService();
            var correctOptions =
                new FlightValidationServiceOptions(new GroundTimeMoreThanValidator(TimeSpan.FromSeconds(1)));

            Assert.Throws <ArgumentNullException>("flights", () => fvs.Validate(null, correctOptions).FirstOrDefault());

            var f = CreateFlights(5,
                                  i => Common.CreateFlight(now, TimeSpan.FromHours(i), TimeSpan.FromHours(i), TimeSpan.FromHours(i + 5),
                                                           TimeSpan.FromHours(i + 6)));

            Assert.Throws <ArgumentNullException>("options", () => fvs.Validate(f, null).FirstOrDefault());

            Assert.Throws <ArgumentNullException>("options",
                                                  () => fvs.Validate(f, new FlightValidationServiceOptions(null)).FirstOrDefault());

            Assert.Throws <ArgumentNullException>("flights",
                                                  () => fvs.Validate(f.Prepend(null), correctOptions).FirstOrDefault());

            Assert.Throws <ArgumentNullException>("flights",
                                                  () => fvs.Validate(f.Prepend(new Flight {
                Segments = null
            }), correctOptions).FirstOrDefault());

            Assert.Throws <ArgumentNullException>("flights",
                                                  () => fvs.Validate(f.Prepend(new Flight {
                Segments = new List <Segment> {
                    new Segment(), null
                }
            }),
                                                                     correctOptions).FirstOrDefault());
        }
        public void No_Flights_With_Zero_Ground_Time_Shoul_Be_Valid()
        {
            var now = DateTime.Now;
            var fvs = new FlightValidationService();
            var f   = CreateFlights(5,
                                    i => Common.CreateFlight(now, TimeSpan.FromHours(i * 2), TimeSpan.FromHours((i + 1) * 2),
                                                             TimeSpan.FromHours((i + 1) * 2), TimeSpan.FromHours((i + 2) * 2)));

            Assert.Empty(fvs.Validate(f,
                                      new FlightValidationServiceOptions(new GroundTimeMoreThanValidator(TimeSpan.FromSeconds(1)))));
        }
コード例 #3
0
        private static void Main(string[] args)
        {
            Console.WriteLine($"Текущее время: {DateTime.Now}");
            var flights          = new FlightBuilder().GetFlights();
            var flightFormatter  = new FlightFormatProvider();
            var validatorService = new FlightValidationService();

            WriteLineWithColors("Всего полетов:");
            foreach (var f in flights)
            {
                Console.WriteLine(string.Format(flightFormatter, "{0}", f));
            }

            WriteLineWithColors("Вылет до текущего момента времени:");
            foreach (var f in validatorService.Validate(flights, new FlightValidationServiceOptions(new AnyDepartureTimeEarlierThanValidator(DateTime.Now))))
            {
                Console.WriteLine(string.Format(flightFormatter, "{0}", f));
            }

            WriteLineWithColors("Имеются сегменты с датой прилёта раньше даты вылета:");
            foreach (var f in validatorService.Validate(flights, new FlightValidationServiceOptions(new AnyArrivalTimeEarlierThanDepartureValidator())))
            {
                Console.WriteLine(string.Format(flightFormatter, "{0}", f));
            }

            WriteLineWithColors("Общее время, проведённое на земле превышает два часа:");
            try
            {
                foreach (var f in validatorService.Validate(flights,
                                                            new FlightValidationServiceOptions(new GroundTimeMoreThanValidator(TimeSpan.FromHours(2)))))
                {
                    Console.WriteLine(string.Format(flightFormatter, "{0}", f));
                }
            }
            catch (ArgumentException ex)
            {
                WriteLineWithColors($"{ex.Message}", ConsoleColor.Red);
            }
            finally
            {
                WriteLineWithColors("Валидируем все полеты, имеющие не менее двух сегментов. Результат:");
                foreach (var f in validatorService.Validate(flights.Where(c => c.Segments.Count > 1),
                                                            new FlightValidationServiceOptions(new GroundTimeMoreThanValidator(TimeSpan.FromHours(2)))))
                {
                    Console.WriteLine(string.Format(flightFormatter, "{0}", f));
                }
            }
        }
        public void No_Flights_With_Zero_Ground_Time_Shoul_Be_Valid_And_Departure_Time_Earlier_Than_Passed()
        {
            var now = DateTime.Now;
            var fvs = new FlightValidationService();
            //ground time 0
            var f = CreateFlights(5,
                                  i => Common.CreateFlight(now, TimeSpan.FromHours(i), TimeSpan.FromHours(i), TimeSpan.FromHours(i),
                                                           TimeSpan.FromHours(i + 1)));

            var options = new FlightValidationServiceOptions(new GroundTimeMoreThanValidator(TimeSpan.FromHours(1)),
                                                             new AnyDepartureTimeEarlierThanValidator(now));

            Assert.Empty(fvs.Validate(f, options));

            //ground time 5
            f = CreateFlights(5,
                              i => Common.CreateFlight(now, TimeSpan.FromHours(i), TimeSpan.FromHours(i), TimeSpan.FromHours(i + 5),
                                                       TimeSpan.FromHours(i + 6)));
            options = new FlightValidationServiceOptions(new GroundTimeMoreThanValidator(TimeSpan.FromHours(1)),
                                                         new AnyDepartureTimeEarlierThanValidator(now.AddHours(2)));
            Assert.Equal(2, fvs.Validate(f, options).Count());
        }