Beispiel #1
0
        /// <summary>
        /// Validates the meeting invite.
        /// </summary>
        /// <param name="meetingNotificationItem">The meeting notification item.</param>
        /// <returns>A <see cref="ValidationResult"/>.</returns>
        public static ValidationResult ValidateMeetingInvite(this MeetingNotificationItem meetingNotificationItem)
        {
            var res = new ValidationResult();

            if (meetingNotificationItem == null)
            {
                res.Result = true;
            }
            else if (meetingNotificationItem.RecurrencePattern == MeetingRecurrencePattern.Weekly && string.IsNullOrEmpty(meetingNotificationItem.DaysOfWeek))
            {
                res.Result  = false;
                res.Message = $"DaysOfWeek cannot be null or empty, if RecurrencePattern is {MeetingRecurrencePattern.Weekly}";
            }
            else if (meetingNotificationItem.RecurrencePattern == MeetingRecurrencePattern.Monthly && !string.IsNullOrEmpty(meetingNotificationItem.DaysOfWeek) && string.IsNullOrEmpty(meetingNotificationItem.DayOfWeekByMonth))
            {
                res.Result  = false;
                res.Message = $"DayOfWeekByMonth cannot be null or empty, if RecurrencePattern is {MeetingRecurrencePattern.Monthly} and DaysOfWeek is mentioned";
            }
            else if (meetingNotificationItem.RecurrencePattern == MeetingRecurrencePattern.Yearly && string.IsNullOrEmpty(meetingNotificationItem.DaysOfWeek) && meetingNotificationItem.MonthOfYear == 0)
            {
                res.Result  = false;
                res.Message = $"MonthOfYear cannot be 0, if RecurrencePattern is {MeetingRecurrencePattern.Yearly} and DaysOfWeek is not mentioned";
            }
            else if (meetingNotificationItem.RecurrencePattern == MeetingRecurrencePattern.Yearly && !string.IsNullOrEmpty(meetingNotificationItem.DaysOfWeek) && (string.IsNullOrEmpty(meetingNotificationItem.DayOfWeekByMonth) || meetingNotificationItem.MonthOfYear == 0))
            {
                res.Result  = false;
                res.Message = $"MonthOfYear and DayOfWeekByMonth cannot be null or empty, if RecurrencePattern is {MeetingRecurrencePattern.Yearly} and DaysOfWeek is mentioned";
            }
            else
            {
                res.Result = true;
            }

            return(res);
        }
        public async Task SendMeetingInvitesWithAttachmentsTest()
        {
            var date = DateTime.UtcNow;
            var meetingInviteItems = new MeetingNotificationItem[]
            {
                new MeetingNotificationItem()
                {
                    From = this.Configuration[FunctionalConstants.ToAddress],
                    RequiredAttendees = this.Configuration[FunctionalConstants.ToAddress],
                    Subject           = "Functional Testing of Meeting Invites Send endpoint with attachments",
                    Body        = "Lets meet!",
                    Start       = date,
                    End         = date.AddHours(1),
                    Priority    = NotificationPriority.Normal,
                    Attachments = new List <NotificationAttachment>()
                    {
                        new NotificationAttachment()
                        {
                            FileBase64 = "VEhpcyBpcyBhIHRlc3QgYXR0YWNobWVudCBmaWxlLg==",
                            FileName   = "Test.txt",
                            IsInline   = false,
                        },
                    },
                }
            };

            var    stringContent = new StringContent(JsonConvert.SerializeObject(meetingInviteItems), Encoding.UTF8, FunctionalConstants.ContentType);
            string meetingInviteQueueEndpoint = $"{this.Configuration[FunctionalConstants.NotificationServiceUrl]}/v1/meetinginvite/send/{this.Configuration[FunctionalConstants.Application]}";

            using (HttpClient httpClient = new HttpClient())
            {
                string bearerToken = await this.tokenUtility.GetTokenAsync();

                if (bearerToken != null)
                {
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(FunctionalConstants.Bearer, bearerToken);

                    var response = await httpClient.PostAsync(meetingInviteQueueEndpoint, stringContent).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        Assert.Fail();
                    }
                    else
                    {
                        var Result = response.Content.ReadAsStringAsync().Result;
                        var notificationResponses = JsonConvert.DeserializeObject <List <NotificationResponse> >(Result);
                        var notificationResponse  = notificationResponses.FirstOrDefault();
                        Assert.IsTrue(notificationResponse.Status == NotificationItemStatus.Sent);
                    }
                }
                else
                {
                    Assert.Fail();
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Converts to entity.
 /// </summary>
 /// <param name="meetingNotificationItem">The meeting notification item.</param>
 /// <param name="applicationName">Name of the application.</param>
 /// <returns>A <see cref="MeetingNotificationItemEntity"/>.</returns>
 public static MeetingNotificationItemEntity ToEntity(this MeetingNotificationItem meetingNotificationItem, string applicationName)
 {
     if (meetingNotificationItem != null)
     {
         return(new MeetingNotificationItemEntity
         {
             Attachments = ToNotificationAttachmentEntities(meetingNotificationItem.Attachments),
             ICalUid = meetingNotificationItem.ICalUid,
             OptionalAttendees = meetingNotificationItem.OptionalAttendees,
             RequiredAttendees = meetingNotificationItem.RequiredAttendees,
             Body = meetingNotificationItem?.Body,
             NotificationId = meetingNotificationItem.NotificationId,
             DayofMonth = meetingNotificationItem.DayofMonth,
             DayOfWeekByMonth = meetingNotificationItem.DayOfWeekByMonth,
             DaysOfWeek = meetingNotificationItem.DaysOfWeek,
             From = meetingNotificationItem.From,
             EndDate = meetingNotificationItem.EndDate,
             End = meetingNotificationItem.End,
             Interval = meetingNotificationItem.Interval,
             IsOnlineMeeting = meetingNotificationItem.IsOnlineMeeting,
             IsResponseRequested = meetingNotificationItem.IsResponseRequested,
             IsPrivate = meetingNotificationItem.IsPrivate,
             OccurrenceId = meetingNotificationItem.OccurrenceId,
             SequenceNumber = meetingNotificationItem.SequenceNumber,
             Start = meetingNotificationItem.Start,
             Subject = meetingNotificationItem.Subject,
             ReminderMinutesBeforeStart = meetingNotificationItem.ReminderMinutesBeforeStart,
             IsAllDayEvent = meetingNotificationItem.IsAllDayEvent,
             IsCancel = meetingNotificationItem.IsCancel,
             Location = meetingNotificationItem.Location,
             MonthOfYear = meetingNotificationItem.MonthOfYear,
             Ocurrences = meetingNotificationItem.Ocurrences,
             Priority = meetingNotificationItem.Priority,
             RecurrencePattern = meetingNotificationItem.RecurrencePattern,
             TemplateId = meetingNotificationItem.TemplateId,
             TemplateData = meetingNotificationItem.TemplateData,
             Application = applicationName,
             TrackingId = meetingNotificationItem.TrackingId,
             Action = meetingNotificationItem.Action,
             ShowAs = meetingNotificationItem.ShowAs,
         });
     }
     else
     {
         return(null);
     }
 }
Beispiel #4
0
        /// <summary>
        /// sends invite using template
        /// </summary>
        /// <param name="mailTemplate"> template .</param>
        /// <param name="TemplateData">template  data params .</param>
        private async Task SendMeetingInviteTemplateTest(MailTemplate mailTemplate, string TemplateData)
        {
            var date = DateTime.UtcNow;
            var meetingInviteItems = new MeetingNotificationItem[]
            {
                new MeetingNotificationItem()
                {
                    From = this.Configuration[FunctionalConstants.ToAddress],
                    RequiredAttendees = this.Configuration[FunctionalConstants.ToAddress],
                    Subject           = "Meeting Invite Functional Testing of Template through send endpoint",
                    Start             = date,
                    End          = date.AddHours(1),
                    Priority     = NotificationPriority.Low,
                    TemplateId   = mailTemplate.TemplateId,
                    TemplateData = TemplateData
                }
            };

            var    stringContent = new StringContent(JsonConvert.SerializeObject(meetingInviteItems), Encoding.UTF8, FunctionalConstants.ContentType);
            string notificationServiceEndpoint = $"{this.Configuration[FunctionalConstants.NotificationServiceUrl]}/v1/meetinginvite/send/{this.Configuration[FunctionalConstants.Application]}";

            using (HttpClient httpClient = new HttpClient())
            {
                string bearerToken = await this.tokenUtility.GetTokenAsync();

                if (bearerToken != null)
                {
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(FunctionalConstants.Bearer, bearerToken);

                    var response = await httpClient.PostAsync(notificationServiceEndpoint, stringContent).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        Assert.Fail();
                    }
                    else
                    {
                        var Result = response.Content.ReadAsStringAsync().Result;
                        var notificationResponses = JsonConvert.DeserializeObject <List <NotificationResponse> >(Result);
                        var notificationResponse  = notificationResponses.FirstOrDefault();
                        Assert.IsTrue(notificationResponse.Status == NotificationItemStatus.Sent);
                        MeetingInviteMessage inviteMessage = await GetMeetingNotificationMessage(notificationResponse.NotificationId, httpClient);

                        if (inviteMessage != null)
                        {
                            var templateBody = ConvertText(mailTemplate.Content, TemplateData);
                            Assert.IsTrue(meetingInviteItems[0].Subject == inviteMessage.Subject);
                            Assert.IsTrue(templateBody == inviteMessage.Body);
                        }
                        else
                        {
                            Assert.Fail();
                        }
                    }
                }
                else
                {
                    Assert.Fail();
                }
            }
        }
        /// <summary>
        /// Test meeting invite queue, meeting invite report and meeting invite message including body
        /// </summary>
        public async Task MeetingInvitesQueueReportMessageTest()
        {
            var date = DateTime.UtcNow;
            var meetingInviteItems = new MeetingNotificationItem[]
            {
                new MeetingNotificationItem()
                {
                    From = this.Configuration[FunctionalConstants.ToAddress],
                    RequiredAttendees = this.Configuration[FunctionalConstants.ToAddress],
                    Subject           = "Functional Testing of Meeting Invites Queue endpoint",
                    Body     = "Lets meet!",
                    Start    = date,
                    End      = date.AddHours(1),
                    Priority = NotificationPriority.Normal
                }
            };

            var    stringContent = new StringContent(JsonConvert.SerializeObject(meetingInviteItems), Encoding.UTF8, FunctionalConstants.ContentType);
            string meetingInviteQueueEndpoint = $"{this.Configuration[FunctionalConstants.NotificationHandlerUrl]}/v1/meetinginvite/queue/{this.Configuration[FunctionalConstants.Application]}";

            using (HttpClient httpClient = new HttpClient())
            {
                string bearerToken = await this.tokenUtility.GetTokenAsync();

                if (bearerToken != null)
                {
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(FunctionalConstants.Bearer, bearerToken);

                    var response = await httpClient.PostAsync(meetingInviteQueueEndpoint, stringContent).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        Assert.Fail();
                    }
                    else
                    {
                        var Result = response.Content.ReadAsStringAsync().Result;
                        var notificationResponses = JsonConvert.DeserializeObject <List <NotificationResponse> >(Result);
                        var notificationResponse  = notificationResponses.FirstOrDefault();
                        Assert.IsTrue(notificationResponse.Status == NotificationItemStatus.Queued);

                        var notificationId = notificationResponse.NotificationId;
                        MeetingInviteMessage inviteMessage = await GetMeetingNotificationMessage(notificationId, httpClient);

                        if (inviteMessage != null)
                        {
                            Assert.IsTrue(meetingInviteItems[0].Subject == inviteMessage.Subject);
                            Assert.IsTrue(meetingInviteItems[0].Body == inviteMessage.Body);
                        }
                        else
                        {
                            Assert.Fail();
                        }

                        int retryCount = int.TryParse(Configuration[FunctionalConstants.RetryCount], out retryCount) ? retryCount : 2;
                        int delayTime  = int.TryParse(Configuration[FunctionalConstants.DelayTimeInMilliSeconds], out delayTime) ? delayTime : 5000;


                        for (int i = 0; i < retryCount; i++)
                        {
                            MeetingInviteReportResponse inviteReportResponse = await GetMeetingInviteReportTest(notificationId, httpClient);

                            if (inviteReportResponse != null)
                            {
                                NotificationItemStatus notificationItemStatus = Enum.TryParse <NotificationItemStatus>(inviteReportResponse.Status, out notificationItemStatus) ? notificationItemStatus : NotificationItemStatus.Queued;
                                switch (notificationItemStatus)
                                {
                                case NotificationItemStatus.Failed:
                                case NotificationItemStatus.FakeMail:
                                case NotificationItemStatus.Invalid:
                                {
                                    Assert.Fail();
                                    break;
                                }

                                case NotificationItemStatus.Sent:
                                {
                                    Assert.Pass();
                                    break;
                                }

                                case NotificationItemStatus.Queued:
                                case NotificationItemStatus.Processing:
                                case NotificationItemStatus.Retrying:
                                {
                                    if (i == retryCount - 1)
                                    {
                                        Assert.Fail();
                                        break;
                                    }
                                    await Task.Delay(delayTime);

                                    continue;
                                }
                                }
                            }
                            else
                            {
                                Assert.Fail();
                            }
                        }
                    }
                }
                else
                {
                    Assert.Fail();
                }
            }
        }