예제 #1
0
        /// <summary>
        /// Make Booking
        /// </summary>
        /// <param name="booking"></param>
        /// <returns></returns>
        public async Task <Tuple <HttpStatusCode, string> > MakeBooking(CreateBookingRequestDeatils booking)
        {
            if (booking.FlightDetails != null && !String.IsNullOrEmpty(booking.FlightDetails.DepartureDate) &&
                !String.IsNullOrEmpty(booking.FlightDetails.ArrivalDate) &&
                !String.IsNullOrEmpty(booking.FlightDetails.DepartureCityCode) &&
                !String.IsNullOrEmpty(booking.FlightDetails.ArrivalCityCode) &&
                !String.IsNullOrEmpty(booking.FlightDetails.DepartureTime) &&
                !String.IsNullOrEmpty(booking.FlightDetails.ArrivalTime))
            {
                var flightDetails = await flightManager.GetFlightDetails(booking.FlightDetails);

                if (flightDetails != null && booking.Passenger != null && booking.Passenger.Count() > 0)
                {
                    var passengerCount = booking.Passenger.Count();
                    if (flightDetails.Capacity > booking.Passenger.Count())
                    {
                        var pnr    = String.Format("{0:000000}", new Random().Next(000000, 999999));
                        var status = await UpdateBooking(pnr, flightDetails, passengerCount);

                        if (status)
                        {
                            foreach (Passenger passenger in booking.Passenger)
                            {
                                var passengerId = await passengerManager.CreatePassenger(passenger);

                                await passengerManager.UpdatePassengerBookingRecord(passengerId, pnr);
                            }
                            return(new Tuple <HttpStatusCode, string>(HttpStatusCode.OK, pnr));
                        }
                        else
                        {
                            return(new Tuple <HttpStatusCode, string>(HttpStatusCode.BadRequest, "something went wrong while creating booking"));
                        }
                    }
                    else
                    {
                        return(new Tuple <HttpStatusCode, string>(HttpStatusCode.NotFound, "capacity exceeded"));
                    }
                }
                else
                {
                    return(new Tuple <HttpStatusCode, string>(HttpStatusCode.BadRequest, "flight details not valid"));
                }
            }
            else
            {
                return(new Tuple <HttpStatusCode, string>(HttpStatusCode.BadRequest, "Supplied flight details are not correct"));
            }
        }
        public async Task <IHttpActionResult> MakeBooking(CreateBookingRequestDeatils booking)
        {
            var result = await bookingManager.MakeBooking(booking);

            if (result != null && result.Item1 == HttpStatusCode.OK)
            {
                return(Ok(new BookingResponse {
                    PNR = result.Item2
                }));
            }
            else
            {
                return(BadRequest(result.Item2));
            }
        }
        public void BookingController_CheckForValidPNR_Are_Equal()
        {
            //Arrange
            var mockRepository = new Mock <IBookingManager>();
            CreateBookingRequestDeatils moqdata = new CreateBookingRequestDeatils();

            mockRepository.Setup(x => x.MakeBooking(moqdata)).ReturnsAsync(new Tuple <HttpStatusCode, string>(HttpStatusCode.OK, "27373"));
            var controller = new BookingsController(mockRepository.Object);

            //Act
            var result        = controller.MakeBooking(moqdata);
            var contentResult = result.Result as OkNegotiatedContentResult <BookingResponse>;

            //Assert
            Assert.IsNotNull(contentResult);
            Assert.IsNotNull(contentResult.Content);
            Assert.AreEqual(contentResult.Content.PNR, "27373");
        }
        public void BookingController_NotValidFlightDetail_BAD_REQUEST()
        {
            //Arrange
            var mockRepository = new Mock <IBookingManager>();
            CreateBookingRequestDeatils moqdata = new CreateBookingRequestDeatils();

            moqdata.FlightDetails = new FlightDetailRequest
            {
                DepartureCityCode = "DXB",
                ArrivalCityCode   = ""
            };

            mockRepository.Setup(x => x.MakeBooking(moqdata)).ReturnsAsync(new Tuple <HttpStatusCode, string>(HttpStatusCode.BadRequest, "bad request"));

            var controller = new BookingsController(mockRepository.Object);

            //Act
            var result        = controller.MakeBooking(moqdata);
            var contentResult = result.Result as BadRequestErrorMessageResult;

            //Assert
            Assert.IsInstanceOfType(contentResult, typeof(BadRequestErrorMessageResult));
            Assert.AreEqual(contentResult.Message, "bad request");
        }