public async Task IsCarAvailable_WhenMoreEmployeesThanSeatsInCar_ReturnsSuccessFalse() { var cars = SeedData.GenerateCars(1); await DbContext.AddRangeAsync(cars); await DbContext.SaveChangesAsync(); var locations = SeedData.GenerateLocations(2); await DbContext.AddRangeAsync(locations); var locationA = locations[0].LocationId; var locationB = locations[1].LocationId; var carService = CarServiceFactory(); int moreThanAvailableInCar = 7; var carOptions = new IsCarAvailableOptions() { CarId = cars.First().CarId, StartLocationId = locationA, EndLocationId = locationB, StartDateUtc = DateTime.Parse("2021-02-01"), EndDateUtc = DateTime.Parse("2021-03-1"), EmployeesOnTrip = moreThanAvailableInCar }; var(success, errorMessage) = await carService.IsCarAvailable(carOptions); success.Should().BeFalse(); errorMessage.Should().NotBeEmpty(); }
public async Task IsCarAvailable_WhenCarAvailable_ReturnsSuccessTrue() { var cars = SeedData.GenerateCars(1); await DbContext.AddRangeAsync(cars); await DbContext.SaveChangesAsync(); var locations = SeedData.GenerateLocations(2); await DbContext.AddRangeAsync(locations); var locationA = locations[0].LocationId; var locationB = locations[1].LocationId; var carService = CarServiceFactory(); var carOptions = new IsCarAvailableOptions() { CarId = cars.First().CarId, StartLocationId = locationA, EndLocationId = locationB, StartDateUtc = DateTime.Parse("2021-02-01"), EndDateUtc = DateTime.Parse("2021-03-1"), }; var(success, errorMessage) = await carService.IsCarAvailable(carOptions); success.Should().BeTrue(); }
public async Task IsCarAvailable_WhenCarNotAvailable_ReturnsFalseWithErrorMessage() { // Arrange var cars = SeedData.GenerateCars(1); await DbContext.AddRangeAsync(cars); var car1 = cars[0]; var locations = SeedData.GenerateLocations(2); await DbContext.AddRangeAsync(locations); var locationA = locations[0].LocationId; var locationB = locations[1].LocationId; var previousTravelPlan = new TravelPlan() { StartLocationId = locationA, EndLocationId = locationB, CarId = car1.CarId, StartTimeUtc = new DateTime(2021, 2, 3), EndTimeUtc = new DateTime(2021, 2, 10) }; await DbContext.TravelPlans.AddRangeAsync(previousTravelPlan); await DbContext.SaveChangesAsync(); var carService = CarServiceFactory(); var carOptions = new IsCarAvailableOptions() { CarId = car1.CarId, StartLocationId = locationA, EndLocationId = locationB, StartDateUtc = DateTime.Parse("2021-02-01"), EndDateUtc = DateTime.Parse("2021-03-1"), }; // Act var(success, errorMessage) = await carService.IsCarAvailable(carOptions); // Assert success.Should().BeFalse(); errorMessage.Should().NotBeEmpty(); }
public async Task <(bool success, string message)> IsCarAvailable(IsCarAvailableOptions isCarAvailableOptions) { var(success, cars) = await GetAvailableCarsAsync(isCarAvailableOptions.Adapt <AvailableCarsOptions>()); var car = cars.FirstOrDefault(c => c.CarId == isCarAvailableOptions.CarId); if (car == null) { return(false, CarUnavailableMessage); } var employeesOnTrip = isCarAvailableOptions.EmployeesOnTrip; if (employeesOnTrip > car.Seats) { return(false, NotEnoughRoomMessage); } return(true, string.Empty); }