Exemplo n.º 1
0
        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));
 }