/// <summary> /// Get the items from successful response. /// </summary> /// <typeparam name="T">The type of item</typeparam> /// <param name="response">Response message from server.</param> /// <returns>Items contained in response.</returns> public static T[] GetItemsFromInfoResponse <T>(BaseResponseMessageType response) where T : ItemType, new() { T itemReturnedByServer = null; ArrayList arrayOfItems = new ArrayList(); ArrayOfResponseMessagesType responseMessages = response.ResponseMessages; foreach (ResponseMessageType responseMessage in responseMessages.Items) { if (responseMessage.ResponseCode != ResponseCodeType.NoError || responseMessage.ResponseClass != ResponseClassType.Success) { continue; } ItemInfoResponseMessageType itemRet = responseMessage as ItemInfoResponseMessageType; ArrayOfRealItemsType aorit = itemRet.Items; if (aorit.Items == null) { continue; } foreach (ItemType tempItem in aorit.Items) { itemReturnedByServer = tempItem as T; arrayOfItems.Add(itemReturnedByServer); } } return((T[])arrayOfItems.ToArray(typeof(T))); }
/// <summary> /// Create a message in inbox . /// </summary> /// <returns>Id of the created message.</returns> protected ItemIdType CreateMessage() { CreateItemType createItemRequest = new CreateItemType() { MessageDisposition = MessageDispositionType.SaveOnly, MessageDispositionSpecified = true, SavedItemFolderId = new TargetFolderIdType() { Item = new DistinguishedFolderIdType() { Id = DistinguishedFolderIdNameType.inbox } }, Items = new NonEmptyArrayOfAllItemsType() { Items = new ItemType[] { new MessageType() { Subject = Common.GenerateResourceName(this.Site, "Attachment parent message ") } } } }; CreateItemResponseType createItemResponse = this.COREAdapter.CreateItem(createItemRequest); ItemInfoResponseMessageType itemInfo = createItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType; MessageType message = (MessageType)itemInfo.Items.Items[0]; return(message.ItemId); }
/// <summary> /// Verify whether the response is a valid response message and extract the ResponseClass and ResponseCode. /// </summary> /// <param name="baseResponseMessage">The response message.</param> private void VerifyResponseMessage(BaseResponseMessageType baseResponseMessage) { this.InitializeCollections(); Site.Assert.IsNotNull(baseResponseMessage, @"The response should not be null."); Site.Assert.IsNotNull(baseResponseMessage.ResponseMessages, @"The ResponseMessages in response should not be null."); Site.Assert.IsNotNull(baseResponseMessage.ResponseMessages.Items, @"The items of ResponseMessages in response should not be null."); Site.Assert.IsTrue(baseResponseMessage.ResponseMessages.Items.Length > 0, @"The items of ResponseMessages in response should not be null."); int messageCount = baseResponseMessage.ResponseMessages.Items.Length; for (int i = 0; i < messageCount; i++) { ResponseMessageType responseMessage = baseResponseMessage.ResponseMessages.Items[i]; this.ResponseClass.Add(responseMessage.ResponseClass); if (responseMessage.ResponseCodeSpecified) { this.responseCode.Add(responseMessage.ResponseCode); } if (responseMessage.ResponseClass == ResponseClassType.Success && !(baseResponseMessage is DeleteItemResponseType)) { ItemInfoResponseMessageType itemInfo = responseMessage as ItemInfoResponseMessageType; Site.Assert.IsNotNull(itemInfo.Items, @"The items of ResponseMessages in response should not be null."); Site.Assert.IsNotNull(itemInfo.Items.Items, @"The task items in response should not be null."); Site.Assert.IsTrue(itemInfo.Items.Items.Length > 0, @"There is one task item at least in response."); foreach (ItemType item in itemInfo.Items.Items) { Site.Assert.IsNotNull(item.ItemId, @"The task item id in response should not be null."); } } } }
/// <summary> /// Get the items' id and change key from successful response. /// </summary> /// <param name="response">Response message from server.</param> /// <returns>Item ids contained in response.</returns> public static ItemIdType[] GetItemIdsFromInfoResponse(BaseResponseMessageType response) { ArrayList arrayOfItems = new ArrayList(); ArrayOfResponseMessagesType responseMessages = response.ResponseMessages; foreach (ResponseMessageType responseMessage in responseMessages.Items) { if (responseMessage.ResponseCode != ResponseCodeType.NoError || responseMessage.ResponseClass != ResponseClassType.Success) { continue; } ItemInfoResponseMessageType itemInfoResponseMessage = responseMessage as ItemInfoResponseMessageType; ArrayOfRealItemsType arrayOfRealItemsType = itemInfoResponseMessage.Items; if (arrayOfRealItemsType.Items == null) { continue; } foreach (ItemType tempItem in arrayOfRealItemsType.Items) { arrayOfItems.Add(tempItem.ItemId); } } return((ItemIdType[])arrayOfItems.ToArray(typeof(ItemIdType))); }
private ItemType[] HandleGetItemResponse(BaseResponseMessageType response) { ResponseMessageType[] array = this.HandleBaseResponseMessage(response); if (array == null) { Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "GetItem returned NULL responseType."); return(null); } List <ItemType> list = new List <ItemType>(); foreach (ResponseMessageType responseMessageType in array) { if (responseMessageType.ResponseCode != ResponseCodeType.NoError) { Globals.ConsistencyChecksTracer.TraceDebug <ResponseCodeType>((long)this.GetHashCode(), "Web request returned ResponseCodeType {0}.", responseMessageType.ResponseCode); } else { ItemInfoResponseMessageType itemInfoResponseMessageType = responseMessageType as ItemInfoResponseMessageType; if (itemInfoResponseMessageType == null || itemInfoResponseMessageType.Items == null || itemInfoResponseMessageType.Items.Items == null) { Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "GetItem web request returned NULL ItemType."); } else { list.AddRange(itemInfoResponseMessageType.Items.Items); } } } return(list.ToArray()); }
private ItemType[] HandleGetItemResponse(BaseResponseMessageType response) { ResponseMessageType responseMessageType = this.HandleBaseResponseMessage(response); ItemInfoResponseMessageType itemInfoResponseMessageType = responseMessageType as ItemInfoResponseMessageType; if (itemInfoResponseMessageType == null || itemInfoResponseMessageType.Items == null || itemInfoResponseMessageType.Items.Items == null) { Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "GetItem web request returned NULL ItemType."); return(null); } return(itemInfoResponseMessageType.Items.Items); }
/// <summary> /// Verify the WSDL port type specifications for the CreateItem operation and CreateItemResponseType structure. /// </summary> /// <param name="createItemResponse">The response got from server via CreateItem operation.</param> /// <param name="isSchemaValidated">The result of schema validation, true means valid.</param> private void VerifyCreateItemOperation(CreateItemResponseType createItemResponse, bool isSchemaValidated) { // If the validation event returns any error or warning, the schema validation is false, // which indicates the schema is not matched with the expected result. // So this requirement can be verified when the isSchemaValidation is true. // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMSG_R107"); // Verify MS-OXWSMSG requirement: MS-OXWSMSG_R107 Site.CaptureRequirementIfIsTrue( isSchemaValidated, 107, @"[In CreateItem] The following is the WSDL port type specification of the CreateItem operation. <wsdl:operation name=""CreateItem""> <wsdl:input message=""tns:CreateItemSoapIn"" /> <wsdl:output message=""tns:CreateItemSoapOut"" /> </wsdl:operation>"); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMSG_R109"); // Verify MS-OXWSMSG requirement: MS-OXWSMSG_R109 Site.CaptureRequirementIfIsTrue( isSchemaValidated, 109, @"[In CreateItem] The following is the WSDL binding specification of the CreateItem operation. <wsdl:operation name=""CreateItem""> <soap:operation soapAction=""http://schemas.microsoft.com/exchange/services/2006/messages/CreateItem"" /> <wsdl:input> <soap:header message=""tns:CreateItemSoapIn"" part=""Impersonation"" use=""literal""/> <soap:header message=""tns:CreateItemSoapIn"" part=""MailboxCulture"" use=""literal""/> <soap:header message=""tns:CreateItemSoapIn"" part=""RequestVersion"" use=""literal""/> <soap:header message=""tns:CreateItemSoapIn"" part=""TimeZoneContext"" use=""literal""/> <soap:body parts=""request"" use=""literal"" /> </wsdl:input> <wsdl:output> <soap:body parts=""CreateItemResult"" use=""literal"" /> <soap:header message=""tns:CreateItemSoapOut"" part=""ServerVersion"" use=""literal""/> </wsdl:output> </wsdl:operation>"); ItemInfoResponseMessageType item = createItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType; if (item.Items != null && item.Items.Items != null) { if (item.Items.Items[0] as MessageType != null) { MessageType messageItem = item.Items.Items[0] as MessageType; this.VerifyMessageType(messageItem, isSchemaValidated); } } }
public void MSOXWSMTGS_S03_TC01_CopySingleCalendar() { #region Define a calendar item to copy CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; #endregion #region Create the calendar item with CalendarItemCreateOrDeleteOperationType set to SendToNone ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToNone); Site.Assert.IsNotNull(item, "Create a calendar item should be successful."); ItemIdType calendarId = item.Items.Items[0].ItemId; #endregion #region Copy the calendar item to Drafts folder DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.drafts; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; ItemInfoResponseMessageType copiedItem = this.CopySingleCalendarItem(Role.Organizer, calendarId, targetFolderId); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R602"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R602 this.Site.CaptureRequirementIfIsNotNull( copiedItem, 602, @"[In Messages] CopyItemSoapIn: For each item being copied that is not a recurring calendar item, the ItemIds element MUST contain an ItemId child element ([MS-OXWSCORE] section 2.2.4.11)."); #endregion #region Call GetItem operation to verify whether the calendar item is really copied CalendarItemType calendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.drafts, "IPM.Appointment", calendarItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendar, "The calendar item should be in organizer's drafts folder."); CalendarItemType calendarInCalendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.calendar, "IPM.Appointment", calendarItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendarInCalendar, "The calendar item should also be in organizer's calendar folder."); #endregion #region Clean up organizer's drafts and calendar folders this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.drafts }); #endregion }
public void MSOXWSMTGS_S04_TC01_MoveSingleCalendar() { #region Define a calendar item to move CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; #endregion #region Create the calendar item ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToNone); ItemIdType calendarId = item.Items.Items[0].ItemId; #endregion #region Move the created calendar item to Inbox folder DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.inbox; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; ItemInfoResponseMessageType movedItem = this.MoveSingleCalendarItem(Role.Organizer, calendarId, targetFolderId); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R640"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R640 this.Site.CaptureRequirementIfIsNotNull( movedItem, 640, @"[In Messages] MoveItemSoapIn: For each item being moved that is not a recurring calendar item, the ItemIds element MUST contain an ItemId child element ([MS-OXWSCORE] section 2.2.4.11)."); #endregion #region Verify the calendar item is moved to Inbox folder CalendarItemType calendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.inbox, "IPM.Appointment", calendarItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendar, "The calendar item should be moved to Inbox folder."); CalendarItemType calendarInCalendar = this.SearchDeletedSingleItem(Role.Organizer, DistinguishedFolderIdNameType.calendar, "IPM.Appointment", calendarItem.UID) as CalendarItemType; Site.Assert.IsNull(calendarInCalendar, "The calendar item should not be in the Calendar folder."); #endregion #region Clean up organizer's inbox folder. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.inbox }); #endregion }
public void MSOXWSMTGS_S04_TC05_MoveItemErrorCalendarCannotUseIdForOccurrenceId() { #region Define a meeting int timeInterval = this.TimeInterval; CalendarItemType meetingItem = new CalendarItemType(); meetingItem.UID = Guid.NewGuid().ToString(); meetingItem.Subject = this.Subject; meetingItem.Start = DateTime.UtcNow; meetingItem.StartSpecified = true; timeInterval++; meetingItem.End = DateTime.Now.AddHours(timeInterval); meetingItem.EndSpecified = true; meetingItem.Location = this.Location; meetingItem.RequiredAttendees = new AttendeeType[] { GetAttendeeOrResource(this.AttendeeEmailAddress) }; // Create the meeting ItemInfoResponseMessageType itemInfo = this.CreateSingleCalendarItem(Role.Organizer, meetingItem, CalendarItemCreateOrDeleteOperationType.SendToAllAndSaveCopy); Site.Assert.IsNotNull(itemInfo, "Server should return success for creating a recurring meeting."); CalendarItemType calendarInOrganizer = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.calendar, "IPM.Appointment", meetingItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendarInOrganizer, "The meeting should be found in organizer's Calendar folder after organizer calls CreateItem with CalendarItemCreateOrDeleteOperationType set to SendToAllAndSaveCopy."); #endregion #region Define a recurring calendar item to move DateTime startTime = DateTime.Now; DailyRecurrencePatternType pattern = new DailyRecurrencePatternType(); pattern.Interval = this.PatternInterval; NumberedRecurrenceRangeType range = new NumberedRecurrenceRangeType(); range.NumberOfOccurrences = this.NumberOfOccurrences; range.StartDate = startTime; CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; calendarItem.Start = startTime; calendarItem.StartSpecified = true; calendarItem.End = startTime.AddHours(this.TimeInterval); calendarItem.EndSpecified = true; calendarItem.Recurrence = new RecurrenceType(); calendarItem.Recurrence.Item = pattern; calendarItem.Recurrence.Item1 = range; #endregion #region Create the recurring calendar item and extract the Id of an occurrence item ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToNone); OccurrenceItemIdType occurrenceItemId = new OccurrenceItemIdType(); occurrenceItemId.ChangeKey = item.Items.Items[0].ItemId.ChangeKey; occurrenceItemId.RecurringMasterId = item.Items.Items[0].ItemId.Id; occurrenceItemId.InstanceIndex = this.InstanceIndex; #endregion #region Get the Id of the occurrence item ItemInfoResponseMessageType getItem = this.GetSingleCalendarItem(Role.Organizer, occurrenceItemId); Site.Assert.IsNotNull(getItem, "Organizer should get the occurrence item successfully."); RecurringMasterItemIdType recurringMasterItemId = new RecurringMasterItemIdType(); recurringMasterItemId.ChangeKey = getItem.Items.Items[0].ItemId.ChangeKey; recurringMasterItemId.OccurrenceId = calendarInOrganizer.ItemId.Id; #endregion #region Move the recurring calendar item to Inbox folder DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.inbox; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; MoveItemType moveItemRequest = new MoveItemType(); moveItemRequest.ItemIds = new BaseItemIdType[] { recurringMasterItemId }; moveItemRequest.ToFolderId = targetFolderId; MoveItemResponseType response = this.MTGSAdapter.MoveItem(moveItemRequest); #endregion #region Capture code // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1232"); //Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1232 Site.CaptureRequirementIfAreEqual <ResponseCodeType>( ResponseCodeType.ErrorCalendarCannotUseIdForOccurrenceId, response.ResponseMessages.Items[0].ResponseCode, 1232, @"[In Messages] ErrorCalendarCannotUseIdForOccurrenceId: Specifies that the OccurrenceId ([MS-OXWSCORE] section 2.2.4.39) does not correspond to a valid occurrence of a recurring master item."); #endregion #region Clean up organizer's calendar, sentitems and deleteditems folders and attendee's calendar, inbox and deleteditems folders. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType> { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.sentitems, DistinguishedFolderIdNameType.deleteditems }); this.CleanupFoldersByRole(Role.Attendee, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.inbox, DistinguishedFolderIdNameType.deleteditems }); #endregion }
public void MSOXWSMTGS_S04_TC04_MoveItemErrorCalendarCannotMoveOrCopyOccurrence() { #region Define a recurring calendar item DateTime startTime = DateTime.Now; DailyRecurrencePatternType pattern = new DailyRecurrencePatternType(); pattern.Interval = this.PatternInterval; NumberedRecurrenceRangeType range = new NumberedRecurrenceRangeType(); range.NumberOfOccurrences = this.NumberOfOccurrences; range.StartDate = startTime; CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; calendarItem.Start = startTime; calendarItem.StartSpecified = true; calendarItem.End = startTime.AddHours(this.TimeInterval); calendarItem.EndSpecified = true; calendarItem.Recurrence = new RecurrenceType(); calendarItem.Recurrence.Item = pattern; calendarItem.Recurrence.Item1 = range; #endregion #region Create the recurring calendar item and extract the Id of an occurrence item ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToNone); OccurrenceItemIdType occurrenceItemId = new OccurrenceItemIdType(); occurrenceItemId.ChangeKey = item.Items.Items[0].ItemId.ChangeKey; occurrenceItemId.RecurringMasterId = item.Items.Items[0].ItemId.Id; occurrenceItemId.InstanceIndex = this.InstanceIndex; #endregion #region Copy one occurrence of the recurring calendar item DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.drafts; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; MoveItemType moveItemRequest = new MoveItemType(); moveItemRequest.ItemIds = new BaseItemIdType[] { occurrenceItemId }; moveItemRequest.ToFolderId = targetFolderId; MoveItemResponseType response = this.MTGSAdapter.MoveItem(moveItemRequest); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1228"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1228 Site.CaptureRequirementIfAreEqual <ResponseClassType>( ResponseClassType.Error, response.ResponseMessages.Items[0].ResponseClass, 1228, @"[In Messages] If the request is unsuccessful, the MoveItem operation returns a MoveItemResponse element with the ResponseClass attribute of the MoveItemResponseMessage element set to ""Error"". "); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1231"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1231 Site.CaptureRequirementIfAreEqual <ResponseCodeType>( ResponseCodeType.ErrorCalendarCannotMoveOrCopyOccurrence, response.ResponseMessages.Items[0].ResponseCode, 1231, @"[In Messages] ErrorCalendarCannotMoveOrCopyOccurrence: Specifies that an attempt was made to move or copy an occurrence of a recurring calendar item."); #endregion #region Clean up organizer's calendar folders. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar }); #endregion }
public void MSOXWSMTGS_S04_TC03_MoveRecurringCalendar() { #region Define a recurring calendar item to move DateTime startTime = DateTime.Now; DailyRecurrencePatternType pattern = new DailyRecurrencePatternType(); pattern.Interval = this.PatternInterval; NumberedRecurrenceRangeType range = new NumberedRecurrenceRangeType(); range.NumberOfOccurrences = this.NumberOfOccurrences; range.StartDate = startTime; CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; calendarItem.Start = startTime; calendarItem.StartSpecified = true; calendarItem.End = startTime.AddHours(this.TimeInterval); calendarItem.EndSpecified = true; calendarItem.Recurrence = new RecurrenceType(); calendarItem.Recurrence.Item = pattern; calendarItem.Recurrence.Item1 = range; #endregion #region Create the recurring calendar item and extract the Id of an occurrence item ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToNone); OccurrenceItemIdType occurrenceItemId = new OccurrenceItemIdType(); occurrenceItemId.ChangeKey = item.Items.Items[0].ItemId.ChangeKey; occurrenceItemId.RecurringMasterId = item.Items.Items[0].ItemId.Id; occurrenceItemId.InstanceIndex = this.InstanceIndex; #endregion #region Get the Id of the occurrence item ItemInfoResponseMessageType getItem = this.GetSingleCalendarItem(Role.Organizer, occurrenceItemId); Site.Assert.IsNotNull(getItem, "Organizer should get the occurrence item successfully."); RecurringMasterItemIdType recurringMasterItemId = new RecurringMasterItemIdType(); recurringMasterItemId.ChangeKey = getItem.Items.Items[0].ItemId.ChangeKey; recurringMasterItemId.OccurrenceId = getItem.Items.Items[0].ItemId.Id; #endregion #region Move the recurring calendar item to Inbox folder DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.inbox; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; ItemInfoResponseMessageType movedItem = this.MoveSingleCalendarItem(Role.Organizer, recurringMasterItemId, targetFolderId); Site.Assert.IsNotNull(movedItem, @"Server should return success for moving the recurring calendar item."); #endregion #region Call FindItem to verify the recurring calendar item is moved to Inbox folder CalendarItemType calendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.inbox, "IPM.Appointment", calendarItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendar, "The recurring calendar should be in organizer's inbox folder."); if (Common.IsRequirementEnabled(808, this.Site)) { // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R808"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R808 this.Site.CaptureRequirementIfAreEqual <CalendarItemTypeType>( CalendarItemTypeType.RecurringMaster, calendar.CalendarItemType1, 808, @"[In Appendix C: Product Behavior] MoveItemSoapIn: For each item being moved that is a recurring calendar item, implementation does contain a RecurringMasterItemId child element ([MS-OXWSCORE] section 2.2.4.11). (Exchange 2007 and above follow this behavior.)"); } #endregion #region Clean up organizer's inbox folder. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.inbox }); #endregion }
public void MSOXWSMTGS_S03_TC02_CopySingleMeetingItem() { #region Organizer creates a single meeting getItem with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll CalendarItemType meetingItem = new CalendarItemType(); meetingItem.Subject = this.Subject; meetingItem.UID = Guid.NewGuid().ToString(); meetingItem.RequiredAttendees = new AttendeeType[] { GetAttendeeOrResource(this.AttendeeEmailAddress) }; meetingItem.OptionalAttendees = new AttendeeType[] { GetAttendeeOrResource(this.OrganizerEmailAddress) }; meetingItem.Resources = new AttendeeType[] { GetAttendeeOrResource(this.RoomEmailAddress) }; ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, meetingItem, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll); Site.Assert.IsNotNull(item, "Create single meeting item should be successful."); #endregion #region Organizer copies the created single meeting item to Drafts folder CalendarItemType calendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.calendar, "IPM.Appointment", meetingItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendar, "The created calendar should exist in organizer's calendar folder."); ItemIdType itemId = calendar.ItemId; DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.drafts; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; ItemInfoResponseMessageType copiedItem = this.CopySingleCalendarItem(Role.Organizer, itemId, targetFolderId); Site.Assert.IsNotNull(copiedItem, @"Copy the single meeting item should be successful."); #endregion #region Organizer calls GetItem operation to verify whether the meeting item is really copied calendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.drafts, "IPM.Appointment", meetingItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendar, "The copied calendar should exist in organizer's Drafts folder."); #endregion #region Attendee gets the meeting request message in the Inbox folder MeetingRequestMessageType request = this.SearchSingleItem(Role.Attendee, DistinguishedFolderIdNameType.inbox, meetingItem.Subject, meetingItem.UID, UnindexedFieldURIType.itemSubject) as MeetingRequestMessageType; Site.Assert.IsNotNull(request, "The meeting request message should exist in attendee's inbox folder."); #endregion #region Attendee copies the meeting request message to the Drafts folder copiedItem = this.CopySingleCalendarItem(Role.Attendee, request.ItemId, targetFolderId); Site.Assert.IsNotNull(copiedItem, @"Copy the single meeting request message should be successful."); #endregion #region Attendee calls CreateItem to accept the meeting request with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll AcceptItemType acceptItem = new AcceptItemType(); acceptItem.ReferenceItemId = request.ItemId; Site.Assert.IsNotNull( this.CreateSingleCalendarItem(Role.Attendee, acceptItem, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll), "Attendee creates items for meeting request should succeed."); #endregion #region Organizer finds the meeting response message in his Inbox folder and copies it to the Drafts folder MeetingResponseMessageType response = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.inbox, "IPM.Schedule.Meeting.Resp", meetingItem.UID) as MeetingResponseMessageType; Site.Assert.IsNotNull(response, "The response message from Attendee should be in organizer's Inbox folder."); copiedItem = this.CopySingleCalendarItem(Role.Organizer, response.ItemId, targetFolderId); Site.Assert.IsNotNull(copiedItem, @"Copy the single meeting response message should be successful."); #endregion #region Organizer deletes the meeting item with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll ResponseMessageType deletedItem = this.DeleteSingleCalendarItem(Role.Organizer, itemId, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll); Site.Assert.IsNotNull(deletedItem, @"Delete the single meeting item should be successful."); #endregion #region Attendee finds the meeting cancellation message in the Inbox folder and copies it to the Drafts folder int upperBound = int.Parse(Common.GetConfigurationPropertyValue("RetryCount", this.Site)); int waitTime = int.Parse(Common.GetConfigurationPropertyValue("WaitTime", this.Site)); int count = 1; MeetingCancellationMessageType canceledItem = null; while (canceledItem == null && count++ <= upperBound) { canceledItem = this.SearchSingleItem(Role.Attendee, DistinguishedFolderIdNameType.inbox, "IPM.Schedule.Meeting.Canceled", meetingItem.UID) as MeetingCancellationMessageType; System.Threading.Thread.Sleep(waitTime); } Site.Assert.IsNotNull(canceledItem, "The cancellation meeting message should be in attendee's Inbox folder."); ItemIdType canceledItemId = canceledItem.ItemId; copiedItem = this.CopySingleCalendarItem(Role.Attendee, canceledItemId, targetFolderId); Site.Assert.IsNotNull(copiedItem, "Attendee should copy the meeting cancellation message to the Drafts folder."); #endregion #region Clean up inbox, drafts and deleteditems folders of both organizer and attendee. Attendee's sentitems and calendar should also be cleaned up. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.inbox, DistinguishedFolderIdNameType.drafts, DistinguishedFolderIdNameType.deleteditems }); this.CleanupFoldersByRole(Role.Attendee, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.inbox, DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.sentitems, DistinguishedFolderIdNameType.drafts, DistinguishedFolderIdNameType.deleteditems }); #endregion }
public void MSOXWSMTGS_S04_TC02_MoveMeeting() { #region Define the target folder to move // Define the Inbox folder as the target folder for moving meeting item. DistinguishedFolderIdType inboxFolder = new DistinguishedFolderIdType(); inboxFolder.Id = DistinguishedFolderIdNameType.inbox; TargetFolderIdType meetingTargetFolder = new TargetFolderIdType(); meetingTargetFolder.Item = inboxFolder; // Define the Calendar folder as the target folder for moving meeting request message, meeting response message and meeting cancellation message. DistinguishedFolderIdType calendarFolder = new DistinguishedFolderIdType(); calendarFolder.Id = DistinguishedFolderIdNameType.calendar; TargetFolderIdType msgTargetFolder = new TargetFolderIdType(); msgTargetFolder.Item = calendarFolder; #endregion #region Organizer creates a meeting with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll #region Define a meeting to be moved CalendarItemType meetingItem = new CalendarItemType(); meetingItem.Subject = this.Subject; meetingItem.UID = Guid.NewGuid().ToString(); meetingItem.RequiredAttendees = new AttendeeType[] { GetAttendeeOrResource(this.AttendeeEmailAddress) }; meetingItem.OptionalAttendees = new AttendeeType[] { GetAttendeeOrResource(this.OrganizerEmailAddress) }; meetingItem.Resources = new AttendeeType[] { GetAttendeeOrResource(this.RoomEmailAddress) }; #endregion ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, meetingItem, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll); ItemIdType meetingId = item.Items.Items[0].ItemId; #endregion #region Organizer moves the meeting item to Inbox folder ItemInfoResponseMessageType movedItem = this.MoveSingleCalendarItem(Role.Organizer, meetingId, meetingTargetFolder); Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, movedItem.ResponseClass, "Server should return success for moving the meeting item."); ItemIdType movedMeetingItemId = movedItem.Items.Items[0].ItemId; #endregion #region Organizer calls FindItem to verify the meeting item is moved to Inbox folder CalendarItemType calendar = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.inbox, "IPM.Appointment", meetingItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendar, "The meeting item should be moved into organizer's Inbox folder."); #endregion #region Attendee finds the meeting request message in his Inbox folder MeetingRequestMessageType request = this.SearchSingleItem(Role.Attendee, DistinguishedFolderIdNameType.inbox, "IPM.Schedule.Meeting.Request", meetingItem.UID) as MeetingRequestMessageType; Site.Assert.IsNotNull(request, "The meeting request message should exist in attendee's inbox folder."); #endregion #region Attendee moves the meeting request message to the Calendar folder movedItem = this.MoveSingleCalendarItem(Role.Attendee, request.ItemId, msgTargetFolder); Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, movedItem.ResponseClass, @"Server should return success for moving meeting request message."); #endregion #region Attendee calls FindItem to verify the meeting request message is moved to Calendar folder request = this.SearchSingleItem(Role.Attendee, DistinguishedFolderIdNameType.calendar, "IPM.Schedule.Meeting.Request", meetingItem.UID) as MeetingRequestMessageType; Site.Assert.IsNotNull(request, "The meeting request message should exist in attendee's calendar folder."); #endregion #region Attendee calls CreateItem to accept the meeting request with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll AcceptItemType acceptItem = new AcceptItemType(); acceptItem.ReferenceItemId = request.ItemId; item = this.CreateSingleCalendarItem(Role.Attendee, acceptItem, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll); #endregion #region Organizer finds the meeting response message in its Inbox folder MeetingResponseMessageType response = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.inbox, "IPM.Schedule.Meeting.Resp", meetingItem.UID) as MeetingResponseMessageType; Site.Assert.IsNotNull(response, "The meeting response message should exist in organizer's inbox folder."); #endregion #region Organizer moves the meeting response message to his Calendar folder movedItem = this.MoveSingleCalendarItem(Role.Organizer, response.ItemId, msgTargetFolder); Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, movedItem.ResponseClass, "EWS should return success for moving the meeting response message."); #endregion #region Organizer calls FindItem to verify the meeting response message is moved to Calendar folder response = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.calendar, "IPM.Schedule.Meeting.Resp", meetingItem.UID) as MeetingResponseMessageType; Site.Assert.IsNotNull(response, "The meeting response message should be in organizer's calendar folder."); #endregion #region Organizer calls DeleteItem to delete the meeting with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll ResponseMessageType deletedItem = this.DeleteSingleCalendarItem(Role.Organizer, movedMeetingItemId, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll); Site.Assert.IsNotNull(deletedItem, "Delete the meeting should be successful."); #endregion #region Attendee finds the meeting cancellation message in his Inbox folder MeetingCancellationMessageType canceledMeeting = this.SearchSingleItem(Role.Attendee, DistinguishedFolderIdNameType.inbox, "IPM.Schedule.Meeting.Canceled", meetingItem.UID) as MeetingCancellationMessageType; Site.Assert.IsNotNull(canceledMeeting, "The meeting cancellation message should be in attendee's inbox folder."); #endregion #region Attendee moves the meeting cancellation message to his Calendar folder movedItem = this.MoveSingleCalendarItem(Role.Attendee, canceledMeeting.ItemId, msgTargetFolder); Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, movedItem.ResponseClass, "EWS should return success for moving the meeting cancellation message."); #endregion #region Attendee calls FindItem to verify the meeting cancellation message is moved to Calendar folder canceledMeeting = this.SearchSingleItem(Role.Attendee, DistinguishedFolderIdNameType.calendar, "IPM.Schedule.Meeting.Canceled", meetingItem.UID) as MeetingCancellationMessageType; Site.Assert.IsNotNull(canceledMeeting, "The meeting cancellation message should be in attendee's calendar folder."); #endregion #region Attendee removes the meeting item RemoveItemType removeItem = new RemoveItemType(); removeItem.ReferenceItemId = canceledMeeting.ItemId; item = this.CreateSingleCalendarItem(Role.Attendee, removeItem, CalendarItemCreateOrDeleteOperationType.SendToNone); Site.Assert.IsNotNull(item, "The meeting item should be removed."); #endregion #region Clean up organizer's calendar and deleteditems folders, and attendee's sentitems and deleteditems folders this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.deleteditems }); this.CleanupFoldersByRole(Role.Attendee, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.sentitems, DistinguishedFolderIdNameType.deleteditems }); #endregion }
/// <summary> /// Create an item in the specified folder. /// </summary> /// <param name="parentFolderType">Type of the parent folder.</param> /// <param name="parentFolderId">ID of the parent folder.</param> /// <param name="itemSubject">Subject of the item which should be created.</param> /// <returns>ID of the created item.</returns> protected ItemIdType CreateItem(DistinguishedFolderIdNameType parentFolderType, string parentFolderId, string itemSubject) { // Create a request for the CreateItem operation and initialize the ItemType instance. CreateItemType createItemRequest = new CreateItemType(); ItemType item = null; // Get different values for item based on different parent folder type. switch (parentFolderType) { case DistinguishedFolderIdNameType.contacts: ContactItemType contact = new ContactItemType(); contact.Subject = itemSubject; contact.FileAs = itemSubject; item = contact; break; case DistinguishedFolderIdNameType.calendar: // Set the sendMeetingInvitations property. CalendarItemCreateOrDeleteOperationType sendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone; createItemRequest.SendMeetingInvitations = (CalendarItemCreateOrDeleteOperationType)sendMeetingInvitations; createItemRequest.SendMeetingInvitationsSpecified = true; CalendarItemType calendar = new CalendarItemType(); calendar.Subject = itemSubject; item = calendar; break; case DistinguishedFolderIdNameType.inbox: MessageType message = new MessageType(); message.Subject = itemSubject; item = message; break; case DistinguishedFolderIdNameType.tasks: TaskType taskItem = new TaskType(); taskItem.Subject = itemSubject; item = taskItem; break; default: Site.Assert.Fail("The parent folder type '{0}' is invalid and the valid folder types are: contacts, calendar, inbox and tasks.", parentFolderType.ToString()); break; } // Set the MessageDisposition property. MessageDispositionType messageDisposition = MessageDispositionType.SaveOnly; createItemRequest.MessageDisposition = (MessageDispositionType)messageDisposition; createItemRequest.MessageDispositionSpecified = true; // Specify the folder in which new items are saved. createItemRequest.SavedItemFolderId = new TargetFolderIdType(); FolderIdType folderId = new FolderIdType(); folderId.Id = parentFolderId; createItemRequest.SavedItemFolderId.Item = folderId; // Specify the collection of items to be created. createItemRequest.Items = new NonEmptyArrayOfAllItemsType(); createItemRequest.Items.Items = new ItemType[] { item }; // Initialize the ID of the created item. ItemIdType createdItemId = null; // Invoke the create item operation and get the response. CreateItemResponseType createItemResponse = this.COREAdapter.CreateItem(createItemRequest); if (createItemResponse != null && createItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success) { ItemInfoResponseMessageType info = createItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType; Site.Assert.IsNotNull(info, "The items in CreateItem response should not be null."); // Get the ID of the created item. createdItemId = info.Items.Items[0].ItemId; } return(createdItemId); }
// Token: 0x06000582 RID: 1410 RVA: 0x0002ACDC File Offset: 0x00028EDC public List <ElcEwsItem> GetItems(IList <ElcEwsItem> items) { GetItemType getItem = new GetItemType(); ItemResponseShapeType itemResponseShapeType = new ItemResponseShapeType(); itemResponseShapeType.BaseShape = DefaultShapeNamesType.Default; getItem.ItemShape = itemResponseShapeType; getItem.ItemIds = (from elcEwsItem in items select new ItemIdType { Id = elcEwsItem.Id }).ToArray <ItemIdType>(); List <ElcEwsItem> getItems = new List <ElcEwsItem>(getItem.ItemIds.Length); this.CallService(() => this.ServiceBinding.GetItem(getItem), delegate(ResponseMessageType responseMessage, int messageIndex) { ItemInfoResponseMessageType itemInfoResponseMessageType = (ItemInfoResponseMessageType)responseMessage; ElcEwsItem elcEwsItem = items[messageIndex]; if (itemInfoResponseMessageType.ResponseClass != ResponseClassType.Success) { ElcEwsClient.Tracer.TraceError <ResponseCodeType>(0L, "ElcEwsClient.GetItems: GetItem with error response message. ResponseCode : {0}", itemInfoResponseMessageType.ResponseCode); if (itemInfoResponseMessageType.ResponseCode == ResponseCodeType.ErrorItemNotFound) { getItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = null, Error = new ElcEwsException(ElcEwsErrorType.NotFound), StorageItemData = elcEwsItem.StorageItemData }); } else { getItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = null, Error = new ElcEwsException(ElcEwsErrorType.FailedToGetItem, itemInfoResponseMessageType.ResponseCode.ToString()), StorageItemData = elcEwsItem.StorageItemData }); } } else if (itemInfoResponseMessageType.Items != null && itemInfoResponseMessageType.Items.Items != null && itemInfoResponseMessageType.Items.Items.Length > 0) { getItems.Add(new ElcEwsItem { Id = itemInfoResponseMessageType.Items.Items[0].ItemId.Id, Data = null, Error = null, StorageItemData = elcEwsItem.StorageItemData }); } else { getItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = null, Error = new ElcEwsException(ElcEwsErrorType.NoItemReturned), StorageItemData = elcEwsItem.StorageItemData }); } return(true); }, (Exception exception) => ElcEwsClient.WrapElcEwsException(ElcEwsErrorType.FailedToGetItem, exception)); return(getItems); }
private ItemType[] InternalFindItems(FindItemType findItemType, ItemResponseShapeType itemShape) { if (itemShape == null) { itemShape = EwsAuditClient.DefaultItemShape; } List <ItemType> items = null; IEnumerable <BaseItemIdType> enumerable = this.InternalFindItemIds(findItemType); using (IEnumerator <BaseItemIdType> enumerator = enumerable.GetEnumerator()) { List <BaseItemIdType> list = new List <BaseItemIdType>(64); bool flag; do { flag = enumerator.MoveNext(); if (flag) { list.Add(enumerator.Current); } if (list.Count == 64 || (list.Count > 0 && !flag)) { GetItemType getItemType = new GetItemType { ItemShape = itemShape, ItemIds = list.ToArray() }; this.CallEwsWithRetries((LID)41148U, () => this.binding.GetItem(getItemType), delegate(ResponseMessageType responseMessage, int messageIndex) { ItemInfoResponseMessageType itemInfoResponseMessageType = responseMessage as ItemInfoResponseMessageType; if (itemInfoResponseMessageType != null && itemInfoResponseMessageType.ResponseClass == ResponseClassType.Success && itemInfoResponseMessageType.Items != null) { ItemType[] items = itemInfoResponseMessageType.Items.Items; foreach (ItemType item in items) { if (items == null) { items = new List <ItemType>(); } items.Add(item); } return(false); } return(false); }, delegate(ResponseMessageType responseMessage, int messageIndex) { if (responseMessage != null && responseMessage.ResponseClass == ResponseClassType.Error) { ResponseCodeType responseCode = responseMessage.ResponseCode; if (responseCode == ResponseCodeType.ErrorItemNotFound || responseCode == ResponseCodeType.ErrorMessageSizeExceeded) { return(true); } } return(false); }); list.Clear(); } }while (flag); } if (items != null && items.Count > 0) { return(items.ToArray()); } return(Array <ItemType> .Empty); }
public void MSOXWSMTGS_S03_TC05_CopyItemErrorCalendarCannotUseIdForRecurringMasterId() { #region Define a meeting int timeInterval = this.TimeInterval; CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; calendarItem.Start = DateTime.UtcNow; calendarItem.StartSpecified = true; timeInterval++; calendarItem.End = DateTime.Now.AddHours(timeInterval); calendarItem.EndSpecified = true; calendarItem.Location = this.Location; calendarItem.RequiredAttendees = new AttendeeType[] { GetAttendeeOrResource(this.AttendeeEmailAddress) }; ItemInfoResponseMessageType item1 = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToAllAndSaveCopy); Site.Assert.IsNotNull(item1, "Server should return success for creating a recurring meeting."); CalendarItemType calendarInOrganizer = this.SearchSingleItem(Role.Organizer, DistinguishedFolderIdNameType.calendar, "IPM.Appointment", calendarItem.UID) as CalendarItemType; Site.Assert.IsNotNull(calendarInOrganizer, "The meeting should be found in organizer's Calendar folder after organizer calls CreateItem with CalendarItemCreateOrDeleteOperationType set to SendToAllAndSaveCopy."); #endregion #region Define a recurring calendar item DateTime startTime = DateTime.Now; DailyRecurrencePatternType pattern = new DailyRecurrencePatternType(); pattern.Interval = this.PatternInterval; NumberedRecurrenceRangeType range = new NumberedRecurrenceRangeType(); range.NumberOfOccurrences = this.NumberOfOccurrences; range.StartDate = startTime; CalendarItemType meetingItem = new CalendarItemType(); meetingItem.UID = Guid.NewGuid().ToString(); meetingItem.Subject = this.Subject; meetingItem.Start = startTime; meetingItem.StartSpecified = true; meetingItem.End = startTime.AddHours(this.TimeInterval); meetingItem.EndSpecified = true; meetingItem.Location = this.Location; meetingItem.Recurrence = new RecurrenceType(); meetingItem.Recurrence.Item = pattern; meetingItem.Recurrence.Item1 = range; meetingItem.RequiredAttendees = new AttendeeType[] { GetAttendeeOrResource(this.AttendeeEmailAddress) }; meetingItem.OptionalAttendees = new AttendeeType[] { GetAttendeeOrResource(this.OrganizerEmailAddress) }; meetingItem.Resources = new AttendeeType[] { GetAttendeeOrResource(this.RoomEmailAddress) }; #endregion #region Organizer creates a recurring calendar item with CalendarItemCreateOrDeleteOperationType value set to SendOnlyToAll CreateItemType createItemRequest = new CreateItemType(); createItemRequest.Items = new NonEmptyArrayOfAllItemsType(); createItemRequest.Items.Items = new ItemType[] { meetingItem }; createItemRequest.MessageDispositionSpecified = true; createItemRequest.MessageDisposition = MessageDispositionType.SaveOnly; createItemRequest.SendMeetingInvitationsSpecified = true; createItemRequest.SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone; ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, meetingItem, CalendarItemCreateOrDeleteOperationType.SendOnlyToAll); #endregion #region Organizer copys the RecurringMasterId of the recurring calendar item #region Copy the recurring calendar item to Drafts folder through Id of recurring master getItem DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.drafts; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; OccurrenceItemIdType occurrenceId = new OccurrenceItemIdType(); occurrenceId.RecurringMasterId = calendarInOrganizer.ItemId.Id; occurrenceId.InstanceIndex = 1; CopyItemType copyItemRequest = new CopyItemType(); copyItemRequest.ItemIds = new BaseItemIdType[] { occurrenceId }; copyItemRequest.ToFolderId = targetFolderId; CopyItemResponseType response = this.MTGSAdapter.CopyItem(copyItemRequest); #endregion // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1223"); //Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1223 Site.CaptureRequirementIfAreEqual <ResponseCodeType>( ResponseCodeType.ErrorCalendarCannotUseIdForRecurringMasterId, response.ResponseMessages.Items[0].ResponseCode, 1223, @"[In Messages] ErrorCalendarCannotUseIdForRecurringMasterId: Specifies that the RecurringMasterId ([MS-OXWSCORE] section 2.2.4.35) does not correspond to a valid recurring master item."); #endregion #region Clean up organizer's calendar, sentitems and deleteditems folders and attendee's calendar, inbox and deleteditems folders. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType> { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.sentitems, DistinguishedFolderIdNameType.deleteditems }); this.CleanupFoldersByRole(Role.Attendee, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.inbox, DistinguishedFolderIdNameType.deleteditems }); #endregion }
public void MSOXWSMTGS_S05_TC02_UpdateMultipleCalendarItems() { #region Define two calendar items CalendarItemType calendarItem1 = new CalendarItemType(); calendarItem1.UID = Guid.NewGuid().ToString(); calendarItem1.Subject = Common.GenerateResourceName(this.Site, Common.GetConfigurationPropertyValue("MeetingSubject", this.Site)); calendarItem1.Location = this.Location; CalendarItemType calendarItem2 = new CalendarItemType(); calendarItem2.UID = Guid.NewGuid().ToString(); calendarItem2.Subject = Common.GenerateResourceName(this.Site, Common.GetConfigurationPropertyValue("MeetingSubject", this.Site)); calendarItem2.Location = this.Location; #endregion #region Create the two calendar items ItemInfoResponseMessageType[] calendars = this.CreateMultipleCalendarItems(Role.Organizer, new ItemType[] { calendarItem1, calendarItem2 }, CalendarItemCreateOrDeleteOperationType.SendToNone); Site.Assert.IsNotNull(calendars, "The calendars should be created successfully."); Site.Assert.IsTrue(calendars.Length == 2, "There should be only two calendars created."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1198"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1198 // The calendars are gotten successfully, it means the calendars are created successfully. Site.CaptureRequirement( 1198, @"[In Messages] A successful CreateItem operation returns a CreateItemResponse element, as specified in [MS-OXWSCORE] section 3.1.4.2.2.2, with the ResponseClass attribute of the CreateItemResponseMessage element, as specified in [MS-OXWSCDATA] section 2.2.4.12, set to ""Success""."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1199"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1199 // The calendars are gotten successfully, it means the calendars are created successfully. Site.CaptureRequirement( 1199, @"[In Messages] The ResponseCode element, as specified in [MS-OXWSCDATA] section 2.2.4.43, of the CreateItemResponseMessage element is set to ""NoError""."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1217"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1217 // The calendars are gotten successfully, this requirement can be captured. Site.CaptureRequirement( 1217, @"[In Messages] A successful GetItem operation returns a GetItemResponse element, as specified in [MS-OXWSCORE] section 3.1.4.4.2.2, with the ResponseClass attribute of the GetItemResponseMessage element, as specified in [MS-OXWSCDATA] section 2.2.4.12, set to ""Success"". "); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1218"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R1218 // The calendars are gotten successfully, this requirement can be captured. Site.CaptureRequirement( 1218, @"[In Messages] The ResponseCode element, as specified in [MS-OXWSCDATA] section 2.2.4.43, of the GetItemResponseMessage element is set to ""NoError""."); ItemIdType[] calendarIds = new ItemIdType[] { calendars[0].Items.Items[0].ItemId, calendars[1].Items.Items[0].ItemId }; #endregion #region Update the Location element of the two created calendar items List <AdapterHelper> itemsChangeInfo = new List <AdapterHelper>(); foreach (ItemIdType calendarId in calendarIds) { CalendarItemType calendarUpdate = new CalendarItemType(); calendarUpdate.Location = this.LocationUpdate; AdapterHelper itemChangeInfo = new AdapterHelper(); itemChangeInfo.FieldURI = UnindexedFieldURIType.calendarLocation; itemChangeInfo.Item = calendarUpdate; itemChangeInfo.ItemId = calendarId; itemsChangeInfo.Add(itemChangeInfo); } Site.Assert.IsNotNull( this.UpdateMultipleCalendarItems(Role.Organizer, itemsChangeInfo.ToArray(), CalendarItemUpdateOperationType.SendToNone), "Server should return success for updating multiple calendar items."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1235"); // Verify MS-OXWSMSG requirement: MS-OXWSMTGS_R1235 // The updated calendars are gotten successfully, this requirement can be captured. Site.CaptureRequirement( 1235, @"[In Messages] A successful UpdateItem operation returns an UpdateItemResponse element, as specified in [MS-OXWSCORE] section 3.1.4.9.2.2, with the ResponseClass attribute of the UpdateItemResponseMessage element, as specified in [MS-OXWSCDATA] section 2.2.4.12, set to ""Success""."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R1236"); // Verify MS-OXWSMSG requirement: MS-OXWSMTGS_R1236 // The updated calendars are gotten successfully, this requirement can be captured. Site.CaptureRequirement( 1236, @"[In Messages] The ResponseCode element, as specified in [MS-OXWSCDATA] section 2.2.4.43, of the UpdateItemResponseMessage element is set to ""NoError""."); #endregion #region Verify the Location elements of the two calendar items are updated ItemInfoResponseMessageType getItem1 = this.GetSingleCalendarItem(Role.Organizer, calendarIds[0]); Site.Assert.IsNotNull(getItem1, "The first updated item should exist."); CalendarItemType calendar1 = getItem1.Items.Items[0] as CalendarItemType; Site.Assert.AreEqual <string>( this.LocationUpdate, calendar1.Location, string.Format("The Location of the first updated calendar should be {0}. The actual value is {1}.", this.LocationUpdate, calendar1.Location)); ItemInfoResponseMessageType getItem2 = this.GetSingleCalendarItem(Role.Organizer, calendarIds[1]); Site.Assert.IsNotNull(getItem2, "The second updated item should exist."); CalendarItemType calendar2 = getItem2.Items.Items[0] as CalendarItemType; Site.Assert.AreEqual <string>( this.LocationUpdate, calendar2.Location, string.Format("The Location of the second updated calendar should be {0}. The actual value is {1}.", this.LocationUpdate, calendar2.Location)); #endregion #region Clean up organizer's calendar folder. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar }); #endregion }
public void MSOXWSMTGS_S03_TC03_CopyRecurringCalendar() { #region Define a recurring calendar item DateTime startTime = DateTime.Now; DailyRecurrencePatternType pattern = new DailyRecurrencePatternType(); pattern.Interval = this.PatternInterval; NumberedRecurrenceRangeType range = new NumberedRecurrenceRangeType(); range.NumberOfOccurrences = this.NumberOfOccurrences; range.StartDate = startTime; CalendarItemType calendarItem = new CalendarItemType(); calendarItem.UID = Guid.NewGuid().ToString(); calendarItem.Subject = this.Subject; calendarItem.Start = startTime; calendarItem.StartSpecified = true; calendarItem.End = startTime.AddHours(this.TimeInterval); calendarItem.EndSpecified = true; calendarItem.Recurrence = new RecurrenceType(); calendarItem.Recurrence.Item = pattern; calendarItem.Recurrence.Item1 = range; #endregion #region Create the recurring calendar item and extract the Id of an occurrence item ItemInfoResponseMessageType item = this.CreateSingleCalendarItem(Role.Organizer, calendarItem, CalendarItemCreateOrDeleteOperationType.SendToNone); OccurrenceItemIdType occurrenceItemId = new OccurrenceItemIdType(); occurrenceItemId.ChangeKey = item.Items.Items[0].ItemId.ChangeKey; occurrenceItemId.RecurringMasterId = item.Items.Items[0].ItemId.Id; occurrenceItemId.InstanceIndex = this.InstanceIndex; #endregion #region Get the targeted occurrence item ItemInfoResponseMessageType getItem = this.GetSingleCalendarItem(Role.Organizer, occurrenceItemId); Site.Assert.IsNotNull(getItem, @"Get the occurrence should be successful."); RecurringMasterItemIdType recurringMasterItemId = new RecurringMasterItemIdType(); recurringMasterItemId.ChangeKey = getItem.Items.Items[0].ItemId.ChangeKey; recurringMasterItemId.OccurrenceId = getItem.Items.Items[0].ItemId.Id; #endregion #region Copy the recurring calendar item to Drafts folder through Id of recurring master getItem DistinguishedFolderIdType folderId = new DistinguishedFolderIdType(); folderId.Id = DistinguishedFolderIdNameType.drafts; TargetFolderIdType targetFolderId = new TargetFolderIdType(); targetFolderId.Item = folderId; ItemInfoResponseMessageType copiedItem = this.CopySingleCalendarItem(Role.Organizer, recurringMasterItemId, targetFolderId); Site.Assert.IsNotNull(copiedItem, @"Copy recurring calendar item through RecurringMasterItemId should be successful."); ItemIdType calendarIdByCopied = copiedItem.Items.Items[0].ItemId; #endregion #region Call GetItem operation to verify whether the recurring calendar item is really copied getItem = this.GetSingleCalendarItem(Role.Organizer, calendarIdByCopied); if (Common.IsRequirementEnabled(806, this.Site)) { // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSMTGS_R806"); // Verify MS-OXWSMTGS requirement: MS-OXWSMTGS_R806 this.Site.CaptureRequirementIfIsNotNull( getItem, 806, @"[In Appendix C: Product Behavior] CopyItemSoapIn: For each item being copied that is a recurring calendar item, implementation does contain a RecurringMasterItemId child element ([MS-OXWSCORE] section 2.2.4.11). (Exchange 2007 and above follow this behavior.)"); } #endregion #region Clean up organizer's drafts and calendar folders. this.CleanupFoldersByRole(Role.Organizer, new List <DistinguishedFolderIdNameType>() { DistinguishedFolderIdNameType.calendar, DistinguishedFolderIdNameType.drafts }); #endregion }