public async Task PublishCourseUpload_StatusIsProcessedWithErrors_ReturnsUploadHasErrors()
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var user = await TestData.CreateUser(providerId : provider.ProviderId);

            await TestData.CreateCourseUpload(
                provider.ProviderId,
                createdBy : user,
                UploadStatus.ProcessedWithErrors);

            var fileUploadProcessor = new FileUploadProcessor(
                SqlQueryDispatcherFactory,
                Mock.Of <BlobServiceClient>(),
                Clock,
                new RegionCache(SqlQueryDispatcherFactory),
                new ExecuteImmediatelyBackgroundWorkScheduler(Fixture.ServiceScopeFactory));

            // Act
            var result = await fileUploadProcessor.PublishCourseUploadForProvider(provider.ProviderId, user);

            // Assert
            result.Status.Should().Be(PublishResultStatus.UploadHasErrors);
        }
        public async Task PublishCourseUpload_StatusIsProcessedWithErrorsAfterRevalidation_ReturnsUploadHasErrors()
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var user = await TestData.CreateUser(providerId : provider.ProviderId);

            var venue = await TestData.CreateVenue(provider.ProviderId, createdBy : user, venueName : "My Venue", providerVenueRef : "VENUE1");

            var learnAimRef = (await TestData.CreateLearningDelivery()).LearnAimRef;

            var(courseUpload, _) = await TestData.CreateCourseUpload(
                provider.ProviderId,
                createdBy : user,
                UploadStatus.ProcessedSuccessfully,
                rowBuilder =>
            {
                rowBuilder.AddRow(learnAimRef, record =>
                {
                    record.DeliveryMode         = "classroom based";
                    record.ResolvedDeliveryMode = CourseDeliveryMode.ClassroomBased;
                    record.ProviderVenueRef     = venue.ProviderVenueRef;
                    record.VenueId = venue.VenueId;
                });
            });

            // Delete the venue linked to the row in the upload, triggering revalidation
            // (which should fail since the venue has gone away)

            Clock.UtcNow += TimeSpan.FromDays(1);

            await WithSqlQueryDispatcher(dispatcher => dispatcher.ExecuteQuery(new DeleteVenue()
            {
                VenueId   = venue.VenueId,
                DeletedBy = user,
                DeletedOn = Clock.UtcNow
            }));

            var fileUploadProcessor = new FileUploadProcessor(
                SqlQueryDispatcherFactory,
                Mock.Of <BlobServiceClient>(),
                Clock,
                new RegionCache(SqlQueryDispatcherFactory),
                new ExecuteImmediatelyBackgroundWorkScheduler(Fixture.ServiceScopeFactory));

            // Act
            var result = await fileUploadProcessor.PublishCourseUploadForProvider(provider.ProviderId, user);

            // Assert
            result.Status.Should().Be(PublishResultStatus.UploadHasErrors);
        }