Beispiel #1
0
        public async Task Should_Get_One_Then_Zero_Flight()
        {
            _fixture.EmptyDatabase();

            var now     = DateTime.UtcNow;
            var options = new FlightPostOptions
            {
                DepartureAirportId = _fixture.SeedAirport(new AirportPostOptions {
                    Name = "Departure"
                }).PublicId,
                DepartureTime    = now.AddDays(1),
                ArrivalAirportId = _fixture.SeedAirport(new AirportPostOptions {
                    Name = "Arrival"
                }).PublicId,
                ArrivalTime = now.AddDays(1).AddHours(5),
                AircraftId  = _fixture.SeedAircraft(new AircraftPostOptions {
                    Number = "0001"
                }).PublicId,
            };
            var model = await _fixture.FlightManager.PostAsync(options);

            _fixture.FlightManager.SaveChanges();

            Assert.Equal(1, _fixture.FlightManager.GetPage().Data.Count());

            await _fixture.FlightManager.DeleteAsync(model.PublicId);

            _fixture.FlightManager.SaveChanges();

            Assert.Equal(0, _fixture.FlightManager.GetPage().Data.Count());
        }
Beispiel #2
0
        public async Task <IActionResult> PostAsync(FlightPostOptions options)
        {
            await _flightManager.PostAsync(options);

            await _flightManager.SaveChangesAsync();

            return(RedirectToAction("GetPage"));
        }
        public async Task <FlightModel> PostAsync(FlightPostOptions options)
        {
            options.DepartureTime = options.DepartureTime.ToUniversalTime();
            options.ArrivalTime   = options.ArrivalTime.ToUniversalTime();
            if (options.DepartureTime <= DateTime.UtcNow || options.DepartureTime >= options.ArrivalTime)
            {
                throw new InvalidParameterException();
            }
            var departureAirportModel = await Context.Airports.FirstOrDefaultAsync(airport => airport.PublicId == options.DepartureAirportId);

            if (departureAirportModel == null)
            {
                throw new NotFoundException();
            }
            var arrivalAirportModel = await Context.Airports.FirstOrDefaultAsync(airport => airport.PublicId == options.ArrivalAirportId);

            if (arrivalAirportModel == null)
            {
                throw new NotFoundException();
            }
            var aircraftModel = await Context.Aircrafts.FirstOrDefaultAsync(aircraft => aircraft.PublicId == options.AircraftId);

            if (aircraftModel == null)
            {
                throw new NotFoundException();
            }
            var isFlying = Context.Flights.Any(flight =>
                                               flight.AircraftId == aircraftModel.Id &&
                                               (flight.DepartureTime >= options.DepartureTime && flight.DepartureTime <options.ArrivalTime ||
                                                                                                                       flight.ArrivalTime> options.DepartureTime && flight.ArrivalTime <= options.ArrivalTime ||
                                                flight.DepartureTime <options.DepartureTime && flight.ArrivalTime> options.ArrivalTime));

            if (isFlying)
            {
                throw new AircraftAlreadyFlyingException();
            }

            var detail = FlightDetailManager.GetFlightDetail(departureAirportModel, arrivalAirportModel, aircraftModel);
            var model  = new FlightModel
            {
                DepartureAirport = departureAirportModel,
                DepartureTime    = options.DepartureTime,
                ArrivalAirport   = arrivalAirportModel,
                ArrivalTime      = options.ArrivalTime,
                Aircraft         = aircraftModel,
                DistanceInKm     = detail.DistanceInKm,
                FuelNeeded       = detail.FuelNeeded,
            };

            Context.Flights.Add(model);

            return(model);
        }