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()); }
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); }