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();
        }
Ejemplo n.º 4
0
        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);
        }