public async Task DownloadMeetingTests()
        {
            this.EncryptionService = new Mock <IEncryptionService>();
            var notificationId = Guid.NewGuid().ToString();
            var notifications  = new List <MeetingNotificationItemEntity> {
                new MeetingNotificationItemEntity {
                    NotificationId = notificationId
                }
            };
            var blobEmailData = new BlobEmailData
            {
                NotificationId = notificationId,
                Body           = "Test Body",
                Attachments    = new List <NotificationAttachmentEntity> {
                    new NotificationAttachmentEntity {
                        FileBase64 = "VEhpcyBpcyBhIHRlc3QgYXR0YWNobWVudCBmaWxlLg==", FileName = "Test.txt", IsInline = true
                    }
                },
            };

            _ = this.MockedCloudStorageClient.Setup(x => x.DownloadBlobAsync($"TestApp/{ApplicationConstants.MeetingNotificationsFolderName}/{notificationId}")).ReturnsAsync("Test Encrypted String");
            _ = this.EncryptionService.Setup(x => x.Decrypt(It.Is <string>(x => x == "Test Encrypted String"))).Returns(JsonConvert.SerializeObject(blobEmailData));
            var repo = new MailAttachmentRepository(this.Logger, this.MockedCloudStorageClient.Object, this.EncryptionService.Object);
            var updatednotifications = await repo.DownloadMeetingInvite(notifications, "TestApp").ConfigureAwait(false);

            Assert.IsTrue(updatednotifications.Count == 1);
            Assert.IsTrue(updatednotifications.First().Body.Equals("Test Body"));
            Assert.IsTrue(updatednotifications.First().Attachments.Any(x => x.FileBase64.Equals("VEhpcyBpcyBhIHRlc3QgYXR0YWNobWVudCBmaWxlLg==")));
            Assert.IsTrue(updatednotifications.First().Attachments.Any(x => x.FileName.Equals("Test.txt")));
            Assert.IsTrue(updatednotifications.First().Attachments.Any(x => x.IsInline));
            this.MockedCloudStorageClient.Verify(x => x.DownloadBlobAsync($"TestApp/{ApplicationConstants.MeetingNotificationsFolderName}/{notificationId}"), Times.Once);
            this.EncryptionService.Verify(x => x.Decrypt(It.Is <string>(x => x == "Test Encrypted String")), Times.Once);
        }
        /// <inheritdoc/>
        public async Task <IList <MeetingNotificationItemEntity> > UploadMeetingInvite(IList <MeetingNotificationItemEntity> meetingNotificationItemEntities, string applicationName)
        {
            var traceProps = new Dictionary <string, string>();

            traceProps[AIConstants.Application] = applicationName;
            traceProps[AIConstants.MeetingNotificationCount] = meetingNotificationItemEntities?.Count.ToString(CultureInfo.InvariantCulture);

            this.logger.TraceInformation($"Started {nameof(this.UploadMeetingInvite)} method of {nameof(MailAttachmentRepository)}.", traceProps);
            IList <MeetingNotificationItemEntity> notificationEntities = new List <MeetingNotificationItemEntity>();

            if (!(meetingNotificationItemEntities is null) && meetingNotificationItemEntities.Count > 0)
            {
                foreach (var item in meetingNotificationItemEntities)
                {
                    var notificationEntity = item;
                    var blobEmailData      = new BlobEmailData
                    {
                        NotificationId = item.NotificationId,
                        Body           = item.Body,
                        Attachments    = item.Attachments,
                        TemplateData   = item.TemplateData,
                    };
                    var blobpath        = this.GetBlobPath(applicationName, item.NotificationId, ApplicationConstants.MeetingNotificationsFolderName);
                    var uloadedblobpath = await this.cloudStorageClient.UploadBlobAsync(blobpath, this.encryptionService.Encrypt(JsonConvert.SerializeObject(blobEmailData))).ConfigureAwait(false);

                    notificationEntities.Add(item);
                }
            }

            this.logger.TraceInformation($"Finished {nameof(this.UploadEmail)} method of {nameof(MailAttachmentRepository)}.", traceProps);
            return(notificationEntities);
        }
Exemplo n.º 3
0
        /// <inheritdoc/>
        public async Task <IList <EmailNotificationItemEntity> > UploadEmail(IList <EmailNotificationItemEntity> emailNotificationItemEntities, string notificationType, string applicationName)
        {
            this.logger.TraceInformation($"Started {nameof(this.UploadEmail)} method of {nameof(MailAttachmentRepository)}.");
            IList <EmailNotificationItemEntity> notificationEntities = new List <EmailNotificationItemEntity>();

            if (!(emailNotificationItemEntities is null) && emailNotificationItemEntities.Count > 0)
            {
                foreach (var item in emailNotificationItemEntities)
                {
                    var notificationEntity = item;
                    var blobEmailData      = new BlobEmailData
                    {
                        NotificationId = item.NotificationId,
                        Body           = item.Body,
                        Attachments    = item.Attachments,
                        TemplateData   = item.TemplateData,
                    };
                    var blobpath        = this.GetBlobPath(applicationName, item.NotificationId, Constants.EmailNotificationsFolderName);
                    var uloadedblobpath = await this.cloudStorageClient.UploadBlobAsync(blobpath, this.encryptionService.Encrypt(JsonConvert.SerializeObject(blobEmailData))).ConfigureAwait(false);

                    notificationEntities.Add(notificationEntity);
                }
            }

            this.logger.TraceInformation($"Finished {nameof(this.UploadEmail)} method of {nameof(MailAttachmentRepository)}.");
            return(notificationEntities);
        }