public async void UpdateDocumentAsyncTest()
        {
            var             vehicleRepo = new VehicleIndexingRepositoryService();
            VehicleDocument document    = new VehicleDocument {
                VehicleId = "043aec55-9708-4629-9df8-a6a0d9a50843", BaseVehicleId = 138244
            };
            DocumentIndexResult result = await vehicleRepo.UpdateDocumentAsync(document);

            Assert.NotNull(result);
            Assert.True(result.Results.Count > 0);
            Assert.True(result.Results.All(item => item.Succeeded));
        }
        public async void UpdateDocument_AllExistingVehicles_Test()
        {
            var  vehicleRepo  = new VehicleIndexingRepositoryService();
            var  context      = new VehicleConfigurationContext();
            bool isEndReached = false;
            int  batch        = 0;

            context.Database.CommandTimeout = 180;
            //Use this if requried: context.Database.CommandTimeout = 180;
            do
            {
                var vehiclesBatch = context.Vehicles.OrderBy(item => item.Id).Skip(batch * 1000).Take(1000);
                var documents     = vehiclesBatch.Select(item => new VehicleDocument
                {
                    VehicleId = item.Id.ToString(),

                    BaseVehicleId              = item.BaseVehicleId,
                    MakeId                     = item.BaseVehicle.MakeId,
                    MakeName                   = item.BaseVehicle.Make.Name,
                    ModelId                    = item.BaseVehicle.ModelId,
                    ModelName                  = item.BaseVehicle.Model.Name,
                    YearId                     = item.BaseVehicle.YearId,
                    RegionId                   = item.RegionId,
                    RegionName                 = item.Region.Name,
                    Source                     = null,
                    SubModelId                 = item.SubModelId,
                    SubModelName               = item.SubModel.Name,
                    VehicleTypeId              = item.BaseVehicle.Model.VehicleTypeId,
                    VehicleTypeName            = item.BaseVehicle.Model.VehicleType.Name,
                    VehicleTypeGroupId         = item.BaseVehicle.Model.VehicleType.VehicleTypeGroupId,
                    VehicleTypeGroupName       = item.BaseVehicle.Model.VehicleType.VehicleTypeGroup.Name,
                    VehicleChangeRequestId     = item.ChangeRequestId,
                    BaseVehicleChangeRequestId = item.BaseVehicle.ChangeRequestId,
                }).ToList();

                if (documents != null && documents.Any())
                {
                    DocumentIndexResult result = await vehicleRepo.UpdateDocumentsAsync(documents);

                    Assert.NotNull(result);
                    Assert.True(result.Results.Count > 0);
                    Assert.True(result.Results.All(item => item.Succeeded == true));
                }
                else
                {
                    isEndReached = true;
                }

                batch++;
            }while (!isEndReached);


            //upload base vehicles that do not have any vehicles
            isEndReached = false;
            batch        = 0;
            do
            {
                var baseVehiclesBatch = context.BaseVehicles.Where(item => item.Vehicles.Count == 0).OrderBy(item => item.Id).Skip(batch * 1000).Take(1000).ToList();
                var documents         = baseVehiclesBatch.Select(item => new VehicleDocument
                {
                    VehicleId     = Guid.NewGuid().ToString(),
                    BaseVehicleId = item.Id,
                    MakeId        = item.MakeId,
                    MakeName      = item.Make.Name,
                    ModelId       = item.ModelId,
                    ModelName     = item.Model.Name,
                    YearId        = item.YearId,
                    BaseVehicleChangeRequestId = item.ChangeRequestId
                }).ToList();

                if (documents != null && documents.Any())
                {
                    DocumentIndexResult result = await vehicleRepo.UpdateDocumentsAsync(documents);

                    Assert.NotNull(result);
                    Assert.True(result.Results.Count > 0);
                    Assert.True(result.Results.All(item => item.Succeeded == true));
                }
                else
                {
                    isEndReached = true;
                }

                batch++;
            }while (!isEndReached);
        }