/// <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(); } } }
/// <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); } }
/// <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(); } } }