public async Task And_No_Records_To_Import_Then_No_Further_Processing(
            [Frozen] Mock <IRoatpApiService> mockRoatpApiService,
            [Frozen] Mock <IProviderRegistrationImportRepository> mockImportRepository,
            [Frozen] Mock <IProviderRegistrationRepository> mockRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackAttributeRepository> mockFeedbackAttributeRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackAttributeImportRepository> mockFeedbackAttributeImportRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackRatingRepository> mockFeedbackRatingRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackRatingImportRepository> mockFeedbackRatingImportRepository,
            ProviderRegistrationImportService importService)
        {
            mockRoatpApiService
            .Setup(service => service.GetProviderRegistrations())
            .ReturnsAsync(new List <ProviderRegistration>());

            await importService.ImportData();

            mockImportRepository.Verify(repository => repository.DeleteAll(), Times.Never);
            mockImportRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationImport> >()), Times.Never);
            mockRepository.Verify(repository => repository.DeleteAll(), Times.Never);
            mockRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <Domain.Entities.ProviderRegistration> >()), Times.Never);
            mockFeedbackAttributeRepository.Verify(repository => repository.DeleteAll(), Times.Never);
            mockFeedbackAttributeRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationFeedbackAttribute> >()), Times.Never);
            mockFeedbackAttributeImportRepository.Verify(repository => repository.DeleteAll(), Times.Never);
            mockFeedbackAttributeImportRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationFeedbackAttributeImport> >()), Times.Never);
            mockFeedbackRatingRepository.Verify(repository => repository.DeleteAll(), Times.Never);
            mockFeedbackRatingRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationFeedbackRating> >()), Times.Never);
            mockFeedbackRatingImportRepository.Verify(repository => repository.DeleteAll(), Times.Never);
            mockFeedbackRatingImportRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationFeedbackRatingImport> >()), Times.Never);
        }
        public async Task Then_Null_Provider_Feedback_Data_Is_Ignored(
            ProviderRegistration providerRegistrationFromRoatp,
            List <ProviderRegistrationFeedbackRatingImport> feedbackRatingImports,
            List <ProviderRegistrationFeedbackAttributeImport> feedbackAttributeImports,
            [Frozen] Mock <IRoatpApiService> mockRoatpApiService,
            [Frozen] Mock <IProviderRegistrationImportRepository> mockImportRepository,
            [Frozen] Mock <IProviderRegistrationRepository> mockRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackAttributeRepository> mockFeedbackAttributeRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackAttributeImportRepository> mockFeedbackAttributeImportRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackRatingRepository> mockFeedbackRatingRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackRatingImportRepository> mockFeedbackRatingImportRepository,
            ProviderRegistrationImportService importService)
        {
            providerRegistrationFromRoatp.Feedback.FeedbackRating     = null;
            providerRegistrationFromRoatp.Feedback.ProviderAttributes = null;
            var apiData = new List <ProviderRegistration> {
                providerRegistrationFromRoatp
            };

            mockRoatpApiService
            .Setup(service => service.GetProviderRegistrations())
            .ReturnsAsync(apiData);

            await importService.ImportData();

            mockFeedbackAttributeImportRepository.Verify(
                repository =>
                repository.InsertMany(It.Is <IEnumerable <ProviderRegistrationFeedbackAttributeImport> >(c =>
                                                                                                         c.Count().Equals(0))),
                Times.Once);
            mockFeedbackRatingImportRepository.Verify(
                repository => repository.InsertMany(It.Is <IEnumerable <ProviderRegistrationFeedbackRatingImport> >(s =>
                                                                                                                    s.Count().Equals(0))),
                Times.Once);
        }
        public async Task Then_Gets_Provider_Registrations_From_Roatp_Api(
            [Frozen] Mock <IRoatpApiService> mockRoatpApiService,
            ProviderRegistrationImportService importService)
        {
            await importService.ImportData();

            mockRoatpApiService.Verify(service => service.GetProviderRegistrations(), Times.Once);
        }
        public async Task Then_An_Audit_Record_Is_Added_After_Successful_Import(
            List <ProviderRegistration> providerRegistrationsFromRoatp,
            [Frozen] Mock <IRoatpApiService> mockRoatpApiService,
            [Frozen] Mock <IImportAuditRepository> mockAuditRepository,
            ProviderRegistrationImportService importService)
        {
            mockRoatpApiService
            .Setup(service => service.GetProviderRegistrations())
            .ReturnsAsync(providerRegistrationsFromRoatp);

            await importService.ImportData();

            mockAuditRepository.Verify(x => x.Insert(It.Is <ImportAudit>(c =>
                                                                         c.ImportType == ImportType.ProviderRegistrations &&
                                                                         c.RowsImported.Equals(providerRegistrationsFromRoatp.Count))));
        }
        public async Task Then_Adds_Roatp_Data_To_Import_Table(
            List <ProviderRegistration> providerRegistrationsFromRoatp,
            List <Domain.Entities.ProviderRegistrationImport> providerRegistrationImports,
            List <ProviderRegistrationFeedbackRatingImport> feedbackRatingImports,
            List <ProviderRegistrationFeedbackAttributeImport> feedbackAttributeImports,
            [Frozen] Mock <IRoatpApiService> mockRoatpApiService,
            [Frozen] Mock <IProviderRegistrationImportRepository> mockImportRepository,
            [Frozen] Mock <IProviderRegistrationRepository> mockRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackAttributeRepository> mockFeedbackAttributeRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackAttributeImportRepository> mockFeedbackAttributeImportRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackRatingRepository> mockFeedbackRatingRepository,
            [Frozen] Mock <IProviderRegistrationFeedbackRatingImportRepository> mockFeedbackRatingImportRepository,
            ProviderRegistrationImportService importService)
        {
            mockRoatpApiService
            .Setup(service => service.GetProviderRegistrations())
            .ReturnsAsync(providerRegistrationsFromRoatp);
            mockFeedbackAttributeImportRepository.Setup(x => x.GetAll())
            .ReturnsAsync(feedbackAttributeImports);
            mockFeedbackRatingImportRepository.Setup(x => x.GetAll())
            .ReturnsAsync(feedbackRatingImports);
            mockImportRepository.Setup(x => x.GetAll())
            .ReturnsAsync(providerRegistrationImports);

            var expectedProviderRegistrationImports = providerRegistrationsFromRoatp
                                                      .Select(registration => (ProviderRegistrationImport)registration)
                                                      .ToList();

            var actualProviderRegistrationImports = new List <ProviderRegistrationImport>();

            mockImportRepository
            .Setup(repository =>
                   repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationImport> >()))
            .Callback((IEnumerable <ProviderRegistrationImport> imports) =>
                      actualProviderRegistrationImports = imports.ToList())
            .Returns(Task.CompletedTask);

            await importService.ImportData();

            mockImportRepository.Verify(repository => repository.DeleteAll(), Times.Once);
            mockImportRepository.Verify(repository => repository.InsertMany(It.IsAny <IEnumerable <ProviderRegistrationImport> >()), Times.Once);
            mockFeedbackAttributeImportRepository.Verify(repository => repository.DeleteAll(), Times.Once);
            mockFeedbackAttributeImportRepository.Verify(
                repository =>
                repository.InsertMany(It.Is <IEnumerable <ProviderRegistrationFeedbackAttributeImport> >(c =>
                                                                                                         c.Count().Equals(providerRegistrationsFromRoatp.Sum(s => s.Feedback.ProviderAttributes.Count)))),
                Times.Once);
            mockFeedbackRatingImportRepository.Verify(repository => repository.DeleteAll(), Times.Once);
            mockFeedbackRatingImportRepository.Verify(
                repository => repository.InsertMany(It.Is <IEnumerable <ProviderRegistrationFeedbackRatingImport> >(s =>
                                                                                                                    s.Count().Equals(providerRegistrationsFromRoatp.Sum(c => c.Feedback.FeedbackRating.Count)))),
                Times.Once);
            actualProviderRegistrationImports.Should().BeEquivalentTo(expectedProviderRegistrationImports);
            mockRepository.Verify(repository => repository.DeleteAll(), Times.Once);
            mockFeedbackAttributeRepository.Verify(repository => repository.DeleteAll(), Times.Once);
            mockFeedbackRatingRepository.Verify(repository => repository.DeleteAll(), Times.Once);
            mockRepository.Verify(repository => repository.InsertMany(It.Is <IEnumerable <Domain.Entities.ProviderRegistration> >
                                                                          (c => c.Count().Equals(providerRegistrationImports.Count))), Times.Once);
            mockFeedbackAttributeRepository.Verify(repository => repository.InsertMany(It.Is <IEnumerable <ProviderRegistrationFeedbackAttribute> >
                                                                                           (c => c.Count().Equals(feedbackAttributeImports.Count))), Times.Once);
            mockFeedbackRatingRepository.Verify(repository => repository.InsertMany(It.Is <IEnumerable <ProviderRegistrationFeedbackRating> >
                                                                                        (c => c.Count().Equals(feedbackRatingImports.Count))), Times.Once);
        }