Example #1
0
        public void CreateTripShouldThrowIfBookingIsInvalid()
        {
            var pickupLocation = new GeoCoordinate(12.99711, 77.61469);
            var booking        = new Domain.Booking(
                "1",
                "1234",
                "100",
                pickupLocation,
                new GeoCoordinate(13, 77),
                DateTime.Today.AddDays(-1),
                BookingStatus.Cancelled
                );

            var tripRepo             = new Mock <ITripRepository>();
            var cabLocationService   = new Mock <ICabLocationService>();
            var availableCabsService = new Mock <IAvailableCabsService>();
            var bookingService       = new Mock <IBookingService>();

            bookingService.Setup(b => b.GetBooking("1")).Returns(booking);

            var tripService      = new TripService(tripRepo.Object, availableCabsService.Object, bookingService.Object, cabLocationService.Object);
            var startTripRequest = new StartTripRequest()
            {
                BookingId     = booking.Id,
                StartLocation = pickupLocation,
                StartTime     = DateTime.Now
            };

            Assert.Throws <Exception>(() => tripService.StartTrip(startTripRequest));
        }
Example #2
0
        public void RemoveBooking(Booking booking)
        {
            BookingMethods bookingService = new BookingMethods();

            var removedBooking = new Domain.Booking
            {
                Id         = booking.Id,
                CarId      = booking.CarId,
                CustomerId = booking.CustomerId,
                FromDate   = booking.FromDate,
                ToDate     = booking.ToDate,
                IsReturned = booking.IsReturned
            };

            bookingService.Remove(removedBooking);
        }
Example #3
0
        public Domain.Booking CreateBooking(CreateBookingRequest createBookingRequest)
        {
            var cabTypes = new List <CabType>();

            if (!string.IsNullOrEmpty(createBookingRequest.CabType))
            {
                CabType cabType;
                Enum.TryParse(createBookingRequest.CabType, true, out cabType);
                cabTypes.Add(cabType);
            }
            else
            {
                cabTypes.Add(CabType.Regular);
                cabTypes.Add(CabType.Pink);
            }
            var availableCab = AvailableCabsService.GetNearestCab(createBookingRequest.PickupLocation, cabTypes.ToArray());

            if (availableCab != null)
            {
                try
                {
                    var booking = new Domain.Booking(
                        Guid.NewGuid().ToString(),
                        createBookingRequest.UserId,
                        availableCab.Id,
                        createBookingRequest.PickupLocation,
                        createBookingRequest.Destination,
                        createBookingRequest.Time,
                        BookingStatus.Accepted
                        );
                    BookingRepository.Save(booking);
                    return(booking);
                }
                catch (Exception)
                {
                    AvailableCabsService.ReturnCabToPool(availableCab);
                    throw;
                }
            }
            throw new Exception("No cars available");
        }
Example #4
0
        public void ShouldGetBookingById()
        {
            var expectedBooking = new Domain.Booking(
                "100",
                "1234",
                "101",
                new GeoCoordinate(13, 77),
                new GeoCoordinate(14, 77),
                DateTime.Now,
                BookingStatus.Accepted
                );
            var bookingRepo = new Mock <IBookingRepository>();

            bookingRepo.Setup(b => b.Get("100")).Returns(expectedBooking);
            var availableCabsService = new Mock <IAvailableCabsService>();

            var bookingService = new BookingService(bookingRepo.Object, availableCabsService.Object);
            var actual         = bookingService.GetBooking("100");

            bookingRepo.Verify(b => b.Get("100"));
        }
Example #5
0
        public void CreateTripShouldUpdateCabLocation()
        {
            var pickupLocation = new GeoCoordinate(12.99711, 77.61469);
            var booking        = new Domain.Booking(
                "1",
                "1234",
                "100",
                pickupLocation,
                new GeoCoordinate(13, 77),
                DateTime.Today.AddDays(-1),
                BookingStatus.Accepted
                );

            var tripRepo             = new Mock <ITripRepository>();
            var cabLocationService   = new Mock <ICabLocationService>();
            var availableCabsService = new Mock <IAvailableCabsService>();
            var bookingService       = new Mock <IBookingService>();

            bookingService.Setup(b => b.GetBooking("1")).Returns(booking);

            var tripService      = new TripService(tripRepo.Object, availableCabsService.Object, bookingService.Object, cabLocationService.Object);
            var startTripRequest = new StartTripRequest()
            {
                BookingId     = booking.Id,
                StartLocation = pickupLocation,
                StartTime     = DateTime.Now
            };

            tripService.StartTrip(startTripRequest);

            tripRepo.Verify(t => t.Save(It.Is <Domain.Trip>(
                                            trip => trip.BookingId.Equals(booking.Id) && trip.StartLocation.Equals(pickupLocation) &&
                                            trip.CabId.Equals(booking.CabId) && trip.Status == TripStatus.InProgress &&
                                            trip.StartTime.Equals(startTripRequest.StartTime))));
            cabLocationService.Verify(c => c.SetCabLocation(booking.CabId, pickupLocation));
        }