Exemple #1
0
 public CarRentalService(
     IRentalPriceCalculator priceCalculator,
     RentalCarsDbContext context)
 {
     _priceCalculator = priceCalculator;
     _context         = context;
 }
        private void Seed()
        {
            using var context = new RentalCarsDbContext(ContextOptions);

            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            context.Bookings.RemoveRange(context.Bookings);
            context.Cars.RemoveRange(context.Cars);
            context.Customers.RemoveRange(context.Customers);
            context.Returns.RemoveRange(context.Returns);

            var cars = new Car[]
            {
                new() { Id = Guid.NewGuid(), Category = CarCategory.Compact, Model = "Zaporozhets" },
                new() { Id = Guid.NewGuid(), Category = CarCategory.Premium, Model = "Lamborghini Huracán" },
                new() { Id = Guid.NewGuid(), Category = CarCategory.Minivan, Model = "Volvo" },
            };
            var customers = new Customer[]
            { new() { Id = Guid.NewGuid(), Email = "test", DateOfBirth = DateTime.Parse("1990-01-01") } };

            context.Cars.AddRange(cars);
            context.Customers.AddRange(customers);
            context.SaveChanges();
        }
        private void Seed()
        {
            using var context = new RentalCarsDbContext(ContextOptions);

            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();
            context.SaveChanges();
        }
        public async void ReturnCar_AddsRentalReturn_ForExistingBookings()
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var service  = new CarRentalService(new Mock <IRentalPriceCalculator>().Object, context);
            var customer = context.Customers.First();

            var booking =
                await AddBooking(context, context.Cars.First(), "2021-05-05", "2021-06-05");

            var returnDate   = DateTime.Parse("2021-06-01");
            var rentalReturn =
                await service.ReturnCar(new ReturnCarModel(booking.BookingNumber, customer.Email, returnDate, 100.0f));

            Assert.True(context.Returns.Contains(rentalReturn));
        }
        public async void FindAvailableCars_ExcludesCars_IfDateRangeOverlapsWithAnotherBooking(string bookingStartDate, string bookingEndDate)
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var service  = new CarRentalService(new Mock <IRentalPriceCalculator>().Object, context);
            var firstCar = context.Cars.First();

            await AddBooking(context, firstCar, bookingStartDate, bookingEndDate);

            var startDate   = DateTime.Parse("2021-04-10");
            var endDate     = DateTime.Parse("2021-05-10");
            var currentDate = DateTime.Parse("2021-04-10");

            var availableCars =
                await service.FindAvailableCars(firstCar.Category, startDate, endDate, currentDate);

            Assert.DoesNotContain(availableCars, car => car.Id == firstCar.Id);
        }
        public async void RegisterCustomer_SavesCustomerInfo()
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var service  = new CustomerService(context);
            var customer = new Customer()
            {
                Id = Guid.NewGuid(), Email = "*****@*****.**", DateOfBirth = DateTime.Parse("1980-05-05")
            };

            await service.RegisterCustomer(customer);

            var registeredCustomer =
                await context.Customers.SingleAsync(c => c.Id == customer.Id);

            Assert.Equal(customer.DateOfBirth, registeredCustomer.DateOfBirth);
            Assert.Equal(customer.Email, registeredCustomer.Email);
        }
        public async void FindAvailableCars_ReturnsCars_AvailableForTheBookingRange(string bookingStartDate, string bookingEndDate)
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var service  = new CarRentalService(new Mock <IRentalPriceCalculator>().Object, context);
            var firstCar = context.Cars.First();

            await AddBooking(context, firstCar, bookingStartDate, bookingEndDate);

            var startDate   = DateTime.Parse("2021-04-30");
            var endDate     = DateTime.Parse("2021-05-09");
            var currentDate = DateTime.Parse("2021-04-10");

            var availableCars =
                await service.FindAvailableCars(firstCar.Category, startDate, endDate, currentDate);

            Assert.Single(availableCars);
            Assert.Contains(availableCars, car => car.Id == firstCar.Id);
        }
        private static async Task <RentalBooking> AddBooking(RentalCarsDbContext context, Car car, string startDate, string endDate)
        {
            var customer = context.Customers.First();

            var booking = new RentalBooking
            {
                Id            = Guid.NewGuid(),
                CarId         = car.Id,
                BookingNumber = "ABC",
                StartDate     = DateTime.Parse(startDate),
                EndDate       = DateTime.Parse(endDate),
                CustomerId    = customer.Id
            };

            await context.Bookings.AddAsync(booking);

            await context.SaveChangesAsync();

            return(booking);
        }
        public async void RentCar_ThrowsNonAvailable_IfDateRangeOverlapsWithAnotherBooking(string bookingStartDate, string bookingEndDate)
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var service  = new CarRentalService(new Mock <IRentalPriceCalculator>().Object, context);
            var firstCar = context.Cars.First();
            var customer = context.Customers.First();

            await AddBooking(context, firstCar, bookingStartDate, bookingEndDate);

            var startDate   = DateTime.Parse("2021-04-10");
            var endDate     = DateTime.Parse("2021-05-10");
            var currentDate = DateTime.Parse("2021-04-04");

            async Task RentCarFn() =>
            await service.RentCar(new RentCarModel(
                                      Guid.NewGuid(), firstCar.Id, customer.Email, "ABC", startDate, endDate), currentDate);

            await Assert.ThrowsAsync <CarNotAvailable>(RentCarFn);
        }
        public async void RentCar_RegistersBooking_For_Available_Car()
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var service  = new CarRentalService(new Mock <IRentalPriceCalculator>().Object, context);
            var firstCar = context.Cars.First();
            var customer = context.Customers.First();

            var startDate   = DateTime.Parse("2021-05-05");
            var endDate     = DateTime.Parse("2021-06-05");
            var currentDate = DateTime.Parse("2021-05-04");

            await service.RentCar(new RentCarModel(
                                      Guid.NewGuid(), firstCar.Id, customer.Email, "ABC", startDate, endDate), currentDate);

            var booking = context.Bookings.First();

            Assert.Equal(firstCar.Id, booking.CarId);
            Assert.Equal(customer.Id, booking.CustomerId);
            Assert.Equal(startDate, booking.StartDate);
            Assert.Equal(endDate, booking.EndDate);
            Assert.Equal("ABC", booking.BookingNumber);
        }
        public async void ReturnCar_CalculatesReturnPriceCorrectly_ForRentalPeriodAndMileage()
        {
            await using var context = new RentalCarsDbContext(ContextOptions);

            var car = context.Cars.First();

            var priceCalculator = new Mock <IRentalPriceCalculator>();

            priceCalculator
            .Setup(x => x.CalculatePrice(car.Category, 12, 89.3f))
            .Returns(345.0m);

            var service  = new CarRentalService(priceCalculator.Object, context);
            var customer = context.Customers.First();

            var booking =
                await AddBooking(context, car, "2021-05-05", "2021-06-05");

            var returnDate   = DateTime.Parse("2021-05-17");
            var rentalReturn =
                await service.ReturnCar(new ReturnCarModel(booking.BookingNumber, customer.Email, returnDate, 89.3f));

            Assert.Equal(345.0m, rentalReturn.Price);
        }
Exemple #12
0
 public AdminCityService(RentalCarsDbContext db)
 {
     this.db = db;
 }
Exemple #13
0
 public AgencyCarServiceTest()
 {
     Tests.Initialize();
     db = Tests.GetDatabase();
 }
Exemple #14
0
 public CustomerService(RentalCarsDbContext context)
 {
     _context = context;
 }
Exemple #15
0
 public AgencyService(RentalCarsDbContext db)
 {
     this.db = db;
 }
 public CarService(RentalCarsDbContext db)
 {
     this.db = db;
 }
Exemple #17
0
 public BookingService(RentalCarsDbContext db)
 {
     this.db = db;
 }