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); }
public AdminCityService(RentalCarsDbContext db) { this.db = db; }
public AgencyCarServiceTest() { Tests.Initialize(); db = Tests.GetDatabase(); }
public CustomerService(RentalCarsDbContext context) { _context = context; }
public AgencyService(RentalCarsDbContext db) { this.db = db; }
public CarService(RentalCarsDbContext db) { this.db = db; }
public BookingService(RentalCarsDbContext db) { this.db = db; }