/// <summary>
 /// Run the activity.
 /// It updates the export data.
 /// </summary>
 /// <param name="context">Durable orchestration context.</param>
 /// <param name="exportDataEntity">export data entity.</param>
 /// <param name="log">Logging service.</param>
 /// <returns>instance of metadata.</returns>
 public async Task RunAsync(
     IDurableOrchestrationContext context,
     ExportDataEntity exportDataEntity,
     ILogger log)
 {
     await context.CallActivityWithRetryAsync <Task>(
         nameof(UpdateExportDataActivity.UpdateExportDataActivityAsync),
         ActivitySettings.CommonActivityRetryOptions,
         exportDataEntity);
 }
        public async Task UpdateExportDataActivityAsyncNullArgumentTest()
        {
            // Arrange
            var activityInstance = this.GetUpdateExportDataActivity();
            ExportDataEntity exportDataEntity = new ExportDataEntity();

            // Act
            Func <Task> task = async() => await activityInstance.UpdateExportDataActivityAsync(null /*exportDataEntity*/);

            // Assert
            await task.Should().ThrowAsync <ArgumentNullException>("exportDataEntity is null");
        }
Exemple #3
0
        public async Task RunActivity_NullParameters_ThrowsAgrumentNullException(
            NotificationDataEntity notificationDataEntity,
            ExportDataEntity exportDataEntity)
        {
            // Arrange
            var activityInstance = this.GetMetadataActivity();

            // Act
            Func <Task> task = async() => await activityInstance.GetMetadataActivityAsync((notificationDataEntity, exportDataEntity));

            // Assert
            await task.Should().ThrowAsync <ArgumentNullException>();
        }
Exemple #4
0
        public async Task HandleFailureActivityAsync(
            [ActivityTrigger] ExportDataEntity exportDataEntity)
        {
            if (exportDataEntity == null)
            {
                throw new ArgumentNullException(nameof(exportDataEntity));
            }

            await this.DeleteFileAsync(exportDataEntity.FileName);

            await this.SendFailureMessageAsync(exportDataEntity.PartitionKey);

            await this.exportDataRepository.DeleteAsync(exportDataEntity);
        }
        public async Task UpdateExportDataActivity_RunAsyncNullArgumentTest()
        {
            // Arrange
            var activityInstance = this.GetUpdateExportDataActivity();
            ExportDataEntity exportDataEntity = new ExportDataEntity();

            // Act
            Func <Task> task1 = async() => await activityInstance.RunAsync(null /*context*/, It.IsAny <ExportDataEntity>(), log.Object);

            Func <Task> task2 = async() => await activityInstance.RunAsync(context.Object, null /*exportDataEntity*/, log.Object);

            // Assert
            await task1.Should().ThrowAsync <ArgumentNullException>("context is null");

            await task2.Should().ThrowAsync <ArgumentNullException>("exportDataEntity is null");
        }
        public async Task RunAsyncSuccessTest()
        {
            // Arrange
            var activityInstance = GetUpdateExportDataActivity();
            ExportDataEntity exportDataEntity = new ExportDataEntity();

            context.Setup(x => x.CallActivityWithRetryAsync <Task>(It.IsAny <string>(), It.IsAny <RetryOptions>(), It.IsAny <ExportDataEntity>()));

            // Act
            Func <Task> task = async() => await activityInstance.RunAsync(context.Object, exportDataEntity, log.Object);

            // Assert
            await task.Should().NotThrowAsync();

            context.Verify(x => x.CallActivityWithRetryAsync <Task>(It.Is <string>(x => x.Equals(nameof(UpdateExportDataActivity.UpdateExportDataActivityAsync))), It.IsAny <RetryOptions>(), It.IsAny <ExportDataEntity>()), Times.Once);
        }
        public async Task GetNotication_CorrectMapping_ReturnsSentNotificationObject()
        {
            // Arrange
            var    controller         = this.GetControllerInstance();
            string id                 = "invalidId";
            var    notificationEntity = this.GetNotification();
            var    groupList          = new List <Group>()
            {
                new Group()
                {
                    DisplayName = "group1"
                }, new Group()
                {
                    DisplayName = "group2"
                }
            };
            var exportDataEntity = new ExportDataEntity();

            this.notificationDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(notificationEntity);
            this.groupsService.Setup(x => x.GetByIdsAsync(It.IsAny <IEnumerable <string> >())).Returns(groupList.ToAsyncEnumerable());
            this.exportDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(exportDataEntity);
            this.teamDataRepository.Setup(x => x.GetTeamNamesByIdsAsync(It.IsAny <IEnumerable <string> >())).ReturnsAsync(notificationEntity.Teams);

            // Act
            var result = await controller.GetSentNotificationByIdAsync(id);

            var sentNotification = (SentNotification)((ObjectResult)result).Value;

            // Assert
            Assert.Equal(notificationEntity.Id, sentNotification.Id);
            Assert.Equal(notificationEntity.Title, sentNotification.Title);
            Assert.Equal(notificationEntity.ImageLink, sentNotification.ImageLink);
            Assert.Equal(notificationEntity.Summary, sentNotification.Summary);
            Assert.Equal(notificationEntity.Author, sentNotification.Author);
            Assert.Equal(notificationEntity.ButtonTitle, sentNotification.ButtonTitle);
            Assert.Equal(notificationEntity.ButtonLink, sentNotification.ButtonLink);
            Assert.Equal(notificationEntity.SentDate, sentNotification.SentDate);
            Assert.Equal(notificationEntity.CreatedDate, sentNotification.CreatedDateTime);
            Assert.Equal(notificationEntity.Teams, sentNotification.TeamNames);
            Assert.Equal(notificationEntity.Rosters, sentNotification.RosterNames);
            Assert.Equal(notificationEntity.Groups, sentNotification.GroupNames);
            Assert.Equal(notificationEntity.AllUsers, sentNotification.AllUsers);
            Assert.Equal(notificationEntity.SendingStartedDate, sentNotification.SendingStartedDate);
            Assert.Equal(notificationEntity.ErrorMessage, sentNotification.ErrorMessage);
            Assert.Equal(notificationEntity.WarningMessage, sentNotification.WarningMessage);
        }
        public async Task UpdateExportDataActivityAsyncSuccessTest()
        {
            // Arrange
            var activityInstance = GetUpdateExportDataActivity();
            ExportDataEntity exportDataEntity = new ExportDataEntity()
            {
                FileConsentId = "fileConsentId"
            };

            exportDataRepository.Setup(x => x.CreateOrUpdateAsync(It.IsAny <ExportDataEntity>())).Returns(Task.CompletedTask);

            // Act
            Func <Task> task = async() => await activityInstance.UpdateExportDataActivityAsync(exportDataEntity);

            // Assert
            await task.Should().NotThrowAsync();

            exportDataRepository.Verify(x => x.CreateOrUpdateAsync(It.Is <ExportDataEntity>(x => x.FileConsentId == exportDataEntity.FileConsentId)), Times.Once);
        }
Exemple #9
0
        /// <summary>
        /// Run the activity.
        /// It updates the export data.
        /// </summary>
        /// <param name="context">Durable orchestration context.</param>
        /// <param name="exportDataEntity">Export data entity.</param>
        /// <param name="log">Logging service.</param>
        /// <returns>Instance of metadata.</returns>
        public async Task RunAsync(
            IDurableOrchestrationContext context,
            ExportDataEntity exportDataEntity,
            ILogger log)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (exportDataEntity == null)
            {
                throw new ArgumentNullException(nameof(exportDataEntity));
            }

            await context.CallActivityWithRetryAsync <Task>(
                nameof(UpdateExportDataActivity.UpdateExportDataActivityAsync),
                FunctionSettings.DefaultRetryOptions,
                exportDataEntity);
        }
        public async Task Export_InvalidData_ShouldInvokeNever()
        {
            // Arrange
            var    activityInstance = this.GetExportFunction();
            string messageContent   = "{\"NotificationId\":\"notificationId\",\"UserId\" : \"userId\"}";
            var    exportDataEntity = new ExportDataEntity();

            this.notificationDataRepository
            .Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(Task.FromResult(default(NotificationDataEntity)));
            this.exportDataRepository
            .Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(exportDataEntity);
            this.starter.Setup(x => x.StartNewAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(It.IsAny <string>());

            // Act
            await activityInstance.Run(messageContent, this.starter.Object, this.logger.Object);

            // Assert
            this.starter.Verify(x => x.StartNewAsync(It.Is <string>(x => x.Equals(FunctionNames.ExportOrchestration)), It.IsAny <ExportDataRequirement>()), Times.Never());
        }
Exemple #11
0
        public async Task ExportNotification_validInput_ReturnsStatusCodeOk()
        {
            // Arrange
            var controller     = this.GetControllerInstance();
            var userDataEntity = new UserDataEntity();
            var exportRequest  = new ExportRequest()
            {
                Id = "Id"
            };
            var statusCodeOk     = 200;
            var exportDataEntity = new ExportDataEntity()
            {
                RowKey   = exportRequest.Id,
                SentDate = DateTime.UtcNow,
                Status   = ExportStatus.New.ToString(),
            };

            var userDataList = new List <UserDataEntity>()
            {
                new UserDataEntity()
                {
                    AadId = null
                }
            };

            this.userDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(userDataEntity);
            this.sentNotificationDataRepository.Setup(x => x.EnsureSentNotificationDataTableExistsAsync()).Returns(Task.CompletedTask);
            this.exportDataRepository.Setup(x => x.EnsureExportDataTableExistsAsync()).Returns(Task.CompletedTask);
            this.exportDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).Returns(Task.FromResult(default(ExportDataEntity)));
            this.exportDataRepository.Setup(x => x.CreateOrUpdateAsync(It.IsAny <ExportDataEntity>())).Returns(Task.CompletedTask);
            this.exportQueue.Setup(x => x.SendAsync(It.IsAny <ExportQueueMessageContent>())).Returns(Task.CompletedTask);

            // Act
            var result = await controller.ExportNotificationAsync(exportRequest);

            var statusCode = ((StatusCodeResult)result).StatusCode;

            // Assert
            Assert.Equal(statusCode, statusCodeOk);
        }
Exemple #12
0
        public async Task ExportNotification_NotificationExistsInAzureStorage_ReturnsStatusCodeConflict()
        {
            // Arrange
            var controller        = this.GetControllerInstance();
            var userDataEntity    = new UserDataEntity();
            var exportRequest     = new ExportRequest();
            var exportDataEntity  = new ExportDataEntity();
            var statusCodeConfict = 409;

            this.userDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(userDataEntity);
            this.sentNotificationDataRepository.Setup(x => x.EnsureSentNotificationDataTableExistsAsync()).Returns(Task.CompletedTask);
            this.exportDataRepository.Setup(x => x.EnsureExportDataTableExistsAsync()).Returns(Task.CompletedTask);
            this.exportDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(exportDataEntity);

            // Act
            var result = await controller.ExportNotificationAsync(exportRequest);

            var statusCode = ((StatusCodeResult)result).StatusCode;

            // Assert
            Assert.Equal(statusCode, statusCodeConfict);
        }
        public async Task GetNotication_ValidIdParam_ReturnsOkResult()
        {
            // Arrange
            var    controller             = this.GetControllerInstance();
            string id                     = "invalidId";
            var    notificationDataEntity = this.GetNotification();
            var    groupList              = new List <Group>()
            {
                new Group()
            };
            var exportDataEntity = new ExportDataEntity();

            this.notificationDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(notificationDataEntity);
            this.groupsService.Setup(x => x.GetByIdsAsync(It.IsAny <IEnumerable <string> >())).Returns(groupList.ToAsyncEnumerable());
            this.exportDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(exportDataEntity);
            this.teamDataRepository.Setup(x => x.GetTeamNamesByIdsAsync(It.IsAny <IEnumerable <string> >())).ReturnsAsync(notificationDataEntity.Teams);

            // Act
            var result = await controller.GetSentNotificationByIdAsync(id);

            // Assert
            Assert.IsType <OkObjectResult>(result);
        }
Exemple #14
0
        public async Task Delete_ValidFile_DeleteIfExistsAsyncShouldNeveOnce()
        {
            // Arrange
            var activityInstance = this.GetHandleExportFailureActivity();
            var exportDataEntity = new ExportDataEntity()
            {
                FileName = "fileName", PartitionKey = "partitionKey"
            };
            var userDataEntity = new UserDataEntity()
            {
                ServiceUrl = "serviceUrl", ConversationId = "conversationId"
            };
            var blobContainerClientmock = GetBlobContainerClientMock();

            this.storageClientFactory.Setup(x => x.CreateBlobContainerClient()).Returns(blobContainerClientmock.Object);
            this.userDataRepository.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(userDataEntity);

            // Act
            await activityInstance.HandleFailureActivityAsync(exportDataEntity);

            // Assert
            blobContainerClientmock.Verify(x => x.GetBlobClient(It.IsAny <string>()).DeleteIfExistsAsync(It.IsAny <DeleteSnapshotsOption>(), It.IsAny <BlobRequestConditions>(), It.IsAny <CancellationToken>()), Times.Once);
        }
 public async Task UpdateExportDataActivityAsync(
     [ActivityTrigger] ExportDataEntity exportDataEntity)
 {
     await this.exportDataRepository.CreateOrUpdateAsync(exportDataEntity);
 }