Beispiel #1
0
        public void UpdatePublishedProviderStatus_GivenAssembledPublishedProviderCreateVersionRequestButCreateVersionCausesException_ThrowsRetriableException()
        {
            //Arrange
            const string jobId         = null;
            const string correlationId = null;
            IEnumerable <PublishedProvider> publishedProviders = Enumerable.Empty <PublishedProvider>();

            IEnumerable <PublishedProviderCreateVersionRequest> publishedProviderCreateVersionRequests = new[]
            {
                new PublishedProviderCreateVersionRequest()
            };

            Mock <ILogger> logger = CreateLogger();

            Mock <IPublishedProviderVersioningService> providerVersioningService = CreateVersioningService();

            providerVersioningService
            .Setup(x =>
                   x.AssemblePublishedProviderCreateVersionRequests(
                       It.IsAny <IEnumerable <PublishedProvider> >(),
                       It.Is <Reference>(_ => _ == author),
                       It.Is <PublishedProviderStatus>(_ => _ == PublishedProviderStatus.Approved),
                       It.Is <string>(_ => _ == jobId),
                       It.Is <string>(_ => _ == correlationId),
                       false))
            .Returns(publishedProviderCreateVersionRequests);

            providerVersioningService.Setup(x =>
                                            x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(_ => _ == publishedProviderCreateVersionRequests)))
            .Throws(new Exception());

            PublishedProviderStatusUpdateService publishedProviderStatusUpdateService =
                CreatePublishedProviderStatusUpdateService(providerVersioningService.Object, logger.Object);

            string errorMessage = $"Failed to create versions when updating status:' {PublishedProviderStatus.Approved}' on published providers.";

            //Assert
            Func <Task> test = async() => await publishedProviderStatusUpdateService.UpdatePublishedProviderStatus(publishedProviders, author, PublishedProviderStatus.Approved, jobId, correlationId);

            test
            .Should()
            .ThrowExactly <RetriableException>()
            .Which
            .Message
            .Should()
            .Be(errorMessage);

            logger.Verify(x =>
                          x.Error(It.IsAny <Exception>(), It.Is <string>(_ => _ == errorMessage)),
                          Times.Once);
        }
Beispiel #2
0
        public async Task UpdatePublishedProviderStatus_GivenNoVersionsCreated_DoesNotSave()
        {
            //Arrange
            const string jobId         = null;
            const string correlationId = null;
            IEnumerable <PublishedProvider> publishedProviders = Enumerable.Empty <PublishedProvider>();

            IEnumerable <PublishedProviderCreateVersionRequest> publishedProviderCreateVersionRequests = new[]
            {
                new PublishedProviderCreateVersionRequest()
            };

            Mock <ILogger> logger = CreateLogger();

            Mock <IPublishedProviderVersioningService> providerVersioningService = CreateVersioningService();

            providerVersioningService
            .Setup(x =>
                   x.AssemblePublishedProviderCreateVersionRequests(
                       It.IsAny <IEnumerable <PublishedProvider> >(),
                       It.Is <Reference>(_ => _ == author),
                       It.Is <PublishedProviderStatus>(_ => _ == PublishedProviderStatus.Approved),
                       It.Is <string>(_ => _ == jobId),
                       It.Is <string>(_ => _ == correlationId),
                       false))
            .Returns(publishedProviderCreateVersionRequests);
            providerVersioningService.Setup(x =>
                                            x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(_ => _ == publishedProviderCreateVersionRequests)))
            .ReturnsAsync(publishedProviders);

            PublishedProviderStatusUpdateService publishedProviderStatusUpdateService =
                CreatePublishedProviderStatusUpdateService(providerVersioningService.Object, logger.Object);

            string errorMessage = $"Failed to save versions when updating status:' {PublishedProviderStatus.Approved}' on published providers.";

            //Assert
            await publishedProviderStatusUpdateService.UpdatePublishedProviderStatus(publishedProviders, author, PublishedProviderStatus.Approved, jobId, correlationId);

            providerVersioningService
            .Verify(x => x.SaveVersions(It.IsAny <IEnumerable <PublishedProvider> >()),
                    Times.Never());
        }
Beispiel #3
0
        public async Task UpdatePublishedProviderStatus_GivenPublishedProviderCreateVersionRequestsWithJobIdAndCorrelationId_AssemblePublishedProviderRequestsWithJobIdAndCorrelationId()
        {
            //Arrange
            const string jobId         = "JobId-abc-123";
            const string correlationId = "CorrelationId-xyz-123";
            IEnumerable <PublishedProvider> publishedProviders = new[] { new PublishedProvider() };

            IEnumerable <PublishedProviderCreateVersionRequest> publishedProviderCreateVersionRequests =
                new[] { new PublishedProviderCreateVersionRequest() };

            Mock <ILogger> logger = CreateLogger();

            Mock <IPublishedProviderVersioningService> providerVersioningService = CreateVersioningService();

            providerVersioningService
            .Setup(x =>
                   x.AssemblePublishedProviderCreateVersionRequests(
                       It.IsAny <IEnumerable <PublishedProvider> >(),
                       It.Is <Reference>(_ => _ == author),
                       It.Is <PublishedProviderStatus>(_ => _ == PublishedProviderStatus.Approved),
                       It.Is <string>(_ => _ == jobId),
                       It.Is <string>(_ => _ == correlationId),
                       false))
            .Returns(publishedProviderCreateVersionRequests);

            PublishedProviderStatusUpdateService publishedProviderStatusUpdateService =
                CreatePublishedProviderStatusUpdateService(providerVersioningService.Object, logger.Object);

            //Assert
            int updateCount = await publishedProviderStatusUpdateService.UpdatePublishedProviderStatus(publishedProviders, author, PublishedProviderStatus.Approved, jobId, correlationId);

            providerVersioningService.Verify(x => x.AssemblePublishedProviderCreateVersionRequests(
                                                 It.IsAny <IEnumerable <PublishedProvider> >(),
                                                 It.Is <Reference>(_ => _ == author),
                                                 It.Is <PublishedProviderStatus>(_ => _ == PublishedProviderStatus.Approved),
                                                 It.Is <string>(_ => _ == jobId),
                                                 It.Is <string>(_ => _ == correlationId),
                                                 false), Times.Once);
        }
Beispiel #4
0
        public async Task UpdatePublishedProviderStatus_GivenNoPublishedProviderCreateVersionRequestsAssembled_ReturnsZeroUpdatedCount()
        {
            //Arrange
            IEnumerable <PublishedProvider> publishedProviders = Enumerable.Empty <PublishedProvider>();

            IEnumerable <PublishedProviderCreateVersionRequest> publishedProviderCreateVersionRequests =
                Enumerable.Empty <PublishedProviderCreateVersionRequest>();

            Mock <ILogger> logger = CreateLogger();

            string jobId         = new RandomString();
            string correlationId = new RandomString();

            Mock <IPublishedProviderVersioningService> providerVersioningService = CreateVersioningService();

            providerVersioningService
            .Setup(x =>
                   x.AssemblePublishedProviderCreateVersionRequests(
                       It.Is <IEnumerable <PublishedProvider> >(_ => _ == publishedProviders),
                       It.Is <Reference>(_ => _ == author),
                       It.Is <PublishedProviderStatus>(_ => _ == PublishedProviderStatus.Approved),
                       It.Is <string>(_ => _ == jobId),
                       It.Is <string>(_ => _ == correlationId),
                       false))
            .Returns(publishedProviderCreateVersionRequests);

            PublishedProviderStatusUpdateService publishedProviderStatusUpdateService =
                CreatePublishedProviderStatusUpdateService(providerVersioningService.Object, logger.Object);

            //Assert
            int updateCount = await publishedProviderStatusUpdateService.UpdatePublishedProviderStatus(publishedProviders, author, PublishedProviderStatus.Approved);

            updateCount
            .Should()
            .Be(0);
        }
Beispiel #5
0
        public async Task UpdatePublishedProviderStatus_BatchesInto200sIfJobIdSupplied()
        {
            //Arrange
            List <PublishedProvider> publishedProviders = Enumerable.Range(1, 605)
                                                          .Select(_ => new PublishedProvider())
                                                          .ToList();

            List <PublishedProviderCreateVersionRequest> publishedProviderCreateVersionRequests = Enumerable.Range(1, 605)
                                                                                                  .Select(_ => new PublishedProviderCreateVersionRequest())
                                                                                                  .ToList();

            string jobId         = new RandomString();
            string correlationId = new RandomString();

            Mock <ILogger> logger = CreateLogger();
            Mock <IPublishedProviderVersioningService> providerVersioningService = CreateVersioningService();
            Mock <IJobTracker> jobTracker = CreateJobTracker();

            providerVersioningService
            .Setup(x =>
                   x.AssemblePublishedProviderCreateVersionRequests(
                       It.IsAny <IEnumerable <PublishedProvider> >(),
                       It.Is <Reference>(_ => _ == author),
                       It.Is <PublishedProviderStatus>(_ => _ == PublishedProviderStatus.Approved),
                       It.Is <string>(_ => _ == jobId),
                       It.Is <string>(_ => _ == correlationId),
                       false))
            .Returns(publishedProviderCreateVersionRequests);

            providerVersioningService
            .Setup(x =>
                   x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(
                                        _ => _ == publishedProviderCreateVersionRequests)))
            .ReturnsAsync(publishedProviders);

            providerVersioningService
            .Setup(x =>
                   x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(_
                                                                                                 => _.SequenceEqual(publishedProviderCreateVersionRequests.Take(200)))))
            .ReturnsAsync(publishedProviders.Take(200));

            providerVersioningService
            .Setup(x =>
                   x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(_
                                                                                                 => _.SequenceEqual(publishedProviderCreateVersionRequests.Skip(200).Take(200)))))
            .ReturnsAsync(publishedProviders.Skip(200).Take(200));

            providerVersioningService
            .Setup(x => x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(_
                                                                                                      => _.SequenceEqual(publishedProviderCreateVersionRequests.Skip(400).Take(200)))))
            .ReturnsAsync(publishedProviders.Skip(400).Take(200));

            providerVersioningService
            .Setup(x => x.CreateVersions(It.Is <IEnumerable <PublishedProviderCreateVersionRequest> >(_
                                                                                                      => _.SequenceEqual(publishedProviderCreateVersionRequests.Skip(600).Take(200)))))
            .ReturnsAsync(publishedProviders.Skip(600).Take(200));


            PublishedProviderStatusUpdateService publishedProviderStatusUpdateService =
                CreatePublishedProviderStatusUpdateService(providerVersioningService.Object, logger.Object, jobTracker.Object);


            //Act
            await publishedProviderStatusUpdateService.UpdatePublishedProviderStatus(publishedProviders, author, PublishedProviderStatus.Approved, jobId, correlationId);

            //Assert
            // TODO - fix due to further batching because of optmisation
            //await providerVersioningService
            //    .Received(1)
            //    .SaveVersions(It.Is<IEnumerable<PublishedProvider>>(_ =>
            //        _.SequenceEqual(publishedProviders.Take(200))));

            //await providerVersioningService
            //    .Received(1)
            //    .SaveVersions(It.Is<IEnumerable<PublishedProvider>>(_ =>
            //        _.SequenceEqual(publishedProviders.Skip(200).Take(200))));

            //await providerVersioningService
            //    .Received(1)
            //    .SaveVersions(It.Is<IEnumerable<PublishedProvider>>(_ =>
            //        _.SequenceEqual(publishedProviders.Skip(400).Take(200))));

            //await providerVersioningService
            //    .Received(1)
            //    .SaveVersions(It.Is<IEnumerable<PublishedProvider>>(_ =>
            //        _.SequenceEqual(publishedProviders.Skip(600).Take(200))));

            jobTracker.Verify(x => x.NotifyProgress(200, jobId), Times.Once);
            jobTracker.Verify(x => x.NotifyProgress(400, jobId), Times.Once);
            jobTracker.Verify(x => x.NotifyProgress(600, jobId), Times.Once);
            jobTracker.Verify(x => x.NotifyProgress(605, jobId), Times.Once);
        }