public async Task Daily_recurrence_clear() { var ewsTask = CreateSampleEwsTask(titleOnly: true); var ewsRecurrence = new EwsRecurrence { StartDate = DateTime.Now.AddDays(-DateTime.Now.Day + 1), RecurrenceType = ExchangeRecurrencePattern.Daily, Interval = 2, }; ewsTask.Recurrence = ewsRecurrence; await this.server.CreateItemAsync(ewsTask); var task = await this.server.GetTask(ewsTask.Subject, this.folderIdentifiers.TaskFolderIdentifier); task.Recurrence = null; task.IsRecurring = false; task.Changes = EwsFields.Recurrence; await this.server.UpdateItemAsync(task); task = await this.server.GetTask(ewsTask.Subject, this.folderIdentifiers.TaskFolderIdentifier); Assert.IsFalse(task.IsRecurring); Assert.IsNull(task.Recurrence); }
public static EwsTask BuildEwsTask(this ExchangeTask exchangeTask) { var ewsTask = new EwsTask { Subject = exchangeTask.Subject, Categories = new[] { exchangeTask.Category }, StartDate = exchangeTask.Start, CompleteDate = exchangeTask.Completed, Importance = (EwsImportance)(int)exchangeTask.Importance }; if (exchangeTask.Due.HasValue) { ewsTask.DueDate = exchangeTask.Due.Value.Date; } if (exchangeTask.Alarm.HasValue) { ewsTask.ReminderDate = exchangeTask.Alarm; ewsTask.ReminderIsSet = true; } if (!string.IsNullOrWhiteSpace(exchangeTask.Note)) { ewsTask.Body = exchangeTask.Note; ewsTask.BodyType = exchangeTask.Note.HasHtml() ? EwsBodyType.HTML : EwsBodyType.Text; } if (!exchangeTask.Properties.HasValue) { throw new NotSupportedException("Task has no properties set"); } if (exchangeTask.IsRecurring && exchangeTask.Due.HasValue) { var recurrence = new EwsRecurrence { RecurrenceType = exchangeTask.RecurrenceType, Interval = exchangeTask.Interval, DayOfMonth = exchangeTask.DayOfMonth, DayOfWeekIndex = exchangeTask.DayOfWeekIndex, DaysOfWeek = exchangeTask.DaysOfWeek, Month = exchangeTask.Month, }; if (!exchangeTask.Start.HasValue) { recurrence.StartDate = exchangeTask.Due.Value; } else { recurrence.StartDate = exchangeTask.Start.Value; } ewsTask.Recurrence = recurrence; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Title)) { ewsTask.Changes |= EwsFields.Subject; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Folder)) { ewsTask.Changes |= EwsFields.Categories; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Due)) { ewsTask.Changes |= EwsFields.DueDate; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Start)) { ewsTask.Changes |= EwsFields.StartDate; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Completed)) { ewsTask.Changes |= EwsFields.CompleteDate; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Priority)) { ewsTask.Changes |= EwsFields.Importance; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.RepeatFrom)) { ewsTask.Changes |= EwsFields.Recurrence; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Alarm)) { ewsTask.Changes |= EwsFields.Reminder; } if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Note)) { ewsTask.Changes |= EwsFields.Body; } if (!string.IsNullOrWhiteSpace(exchangeTask.Id)) { string id = exchangeTask.Id; if (exchangeTask.Id.StartsWith(ItemPrefix)) { id = id.Replace(ItemPrefix, string.Empty); ewsTask.Type = EwsItemType.Item; } var identifier = GetEwsItemIdentifier(id); ewsTask.Id = identifier.Id; ewsTask.ChangeKey = identifier.ChangeKey; } return(ewsTask); }
private async Task Recurrence_interval(ExchangeRecurrencePattern type, ExchangeDayOfWeek?days = ExchangeDayOfWeek.None, ExchangeDayOfWeekIndex?dayOfWeekIndex = null, int?dayOfMonth = null, int?month = null) { int[] intervals = new[] { 1, 2, 4 }; if (type == ExchangeRecurrencePattern.Yearly || type == ExchangeRecurrencePattern.YearlyRelative) { intervals = new[] { 1 } } ; foreach (int interval in intervals) { var ewsTask = CreateSampleEwsTask(titleOnly: true); var ewsRecurrence = new EwsRecurrence { StartDate = DateTime.Now.Date.AddDays(-DateTime.Now.Day + 1).AddHours(8), // use 8AM to prevent weird issue depending on when the test run RecurrenceType = type, Interval = interval, }; // set a valid start date if (dayOfWeekIndex != null) { if (month != null) { ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddMonths(month.Value - ewsRecurrence.StartDate.Month); } string day = days.ToString(); int occurence = (int)dayOfWeekIndex.Value + 1; int count = 0; if (ewsRecurrence.StartDate.DayOfWeek.ToString() == day) { count = 1; } while (ewsRecurrence.StartDate.DayOfWeek.ToString() != day || count != occurence) { ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddDays(1); if (ewsRecurrence.StartDate.DayOfWeek.ToString() == day) { count++; } } } else if (days != null && days != ExchangeDayOfWeek.None) { string day = days.ToString(); if (day.Contains(",")) { day = day.Split(new [] { ',' })[0]; } while (ewsRecurrence.StartDate.DayOfWeek.ToString() != day) { ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddDays(1); } } else if (dayOfMonth != null) { if (month != null) { ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddMonths(month.Value - ewsRecurrence.StartDate.Month); } ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddDays(dayOfMonth.Value - ewsRecurrence.StartDate.Day); } if (days != null) { ewsRecurrence.DaysOfWeek = days.Value; } if (dayOfWeekIndex != null) { ewsRecurrence.DayOfWeekIndex = dayOfWeekIndex.Value; } if (dayOfMonth != null) { ewsRecurrence.DayOfMonth = dayOfMonth.Value; } if (month != null) { ewsRecurrence.Month = month.Value; } ewsTask.Recurrence = ewsRecurrence; ewsTask.IsRecurring = true; await this.server.CreateItemAsync(ewsTask); var task = await this.server.GetTask(ewsTask.Subject, this.folderIdentifiers.TaskFolderIdentifier); Assert.IsTrue(task.IsRecurring); Assert.IsNotNull(task.Recurrence); Assert.AreEqual(ewsRecurrence, task.Recurrence); } } }