public async Task <IActionResult> CreateBooking([FromBody] NewBookingForm newBookingForm) { try { var result = await _mediator.Send(new CreateBookingCommand(newBookingForm)); return(Ok(result)); } catch (ArgumentException e) when(e.Message.Contains("not found")) { Console.WriteLine(e); return(BadRequest($"The resource of parameter {e.ParamName} not found. ({e.Message})")); } catch (ArgumentNullException e) { return(BadRequest($"Missing form parameter: ({e.ParamName})")); } catch (ArgumentException e) { return(BadRequest($"Invalid form parameter: ({e.ParamName}), Msg ({e.Message})")); } catch (InvalidOperationException e) { return(StatusCode(500, e.Message)); } }
public async Task Test_WithValidForm() { // Arrange var customer = Fixture.Create <Customer>(); var airport1 = new Airport(1, "IST", "TR", "IST"); var airport2 = new Airport(1, "AMS", "NL", "AMS"); var airline = new Airline(1, "TK", "THY", "Istanbul"); // var bookingForm = new NewBookingForm { BookingNumber = "BN1X3", CustomerId = customer.Id, DateBooking = DateTime.UtcNow, Flight = new NewFlightForm { FlightNumber = "TK1953", DepartureDate = DateTime.Today, DepartureAirportId = 1, ArrivalDate = DateTime.Today.AddDays(1), ArrivalAirportId = 2, Price = 99, CarrierId = 1 }, Passengers = new List <NewPassengerForm> { new NewPassengerForm { Email = "*****@*****.**", Address = "Some address", Name = "Some Name", Gender = Gender.Female, DateBirth = new DateTime(2000, 1, 1) } } }; // var mockBooking = new Mock <IBookingRepository>(); mockBooking.Setup(repo => repo.GetNextBookingId()).Returns(1); mockBooking.Setup(repo => repo.GetNextFlightId()).Returns(1); mockBooking.Setup(repo => repo.GetNextPassengerId()).Returns(1); // var mockCustomer = new Mock <ICustomerRepository>(); mockCustomer.Setup(repo => repo.GetById(customer.Id)).Returns(customer); // var mockAirports = new Mock <IAirportRepository>(); mockAirports.Setup(repo => repo.GetById(1)).Returns(airport1); mockAirports.Setup(repo => repo.GetById(2)).Returns(airport2); // var mockAirlines = new Mock <IAirlineRepository>(); mockAirlines.Setup(repo => repo.GetById(1)).Returns(airline); // var command = new CreateBookingCommand(bookingForm); var commandHandler = new CreateBookingCommandHandler(mockBooking.Object, mockAirlines.Object, mockAirports.Object, mockCustomer.Object); // Act var result = await commandHandler.Handle(command, CancellationToken.None); // Assert Assert.NotNull(result); Assert.Equal(bookingForm.BookingNumber, result.BookingNumber); Assert.Equal(bookingForm.DateBooking, result.DateBooking); Assert.Equal(bookingForm.CustomerId, result.CustomerId); Assert.NotNull(result.Flight); Assert.Equal(bookingForm.Flight.FlightNumber, result.Flight.FlightNumber); Assert.NotNull(result.Passengers); Assert.NotEmpty(result.Passengers); }
public CreateBookingCommand(NewBookingForm form) { Form = form ?? throw new ArgumentNullException(nameof(form)); }