/// <summary> /// Get message related Item elements of ItemInfoResponseMessageType type in a response message returned from server. /// </summary> /// <param name="response">A response message returned by an operation: GetItem, CopyItem, CreateItem, MoveItem, or UpdateItem.</param> /// <returns>Message related Item elements of ItemInfoResponseMessageType type.</returns> public static ItemInfoResponseMessageType[] GetInfoItemsInResponse(BaseResponseMessageType response) { ItemInfoResponseMessageType[] infoItems = null; if (response != null && response.ResponseMessages != null && response.ResponseMessages.Items != null && response.ResponseMessages.Items.Length > 0) { List<ItemInfoResponseMessageType> infoItemList = new List<ItemInfoResponseMessageType>(); foreach (ResponseMessageType item in response.ResponseMessages.Items) { infoItemList.Add(item as ItemInfoResponseMessageType); } if (infoItemList.Count > 0) { infoItems = infoItemList.ToArray(); } } return infoItems; }
/// <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> /// Verify the requirements relate to all operations. /// </summary> /// <param name="isSchemaValidated"> A boolean value indicates the schema validation result."true" means success, "false" means failure.</param> /// <param name="responseMessage"> Common operation response.</param> private void VerifyAllRelatedRequirements(bool isSchemaValidated, BaseResponseMessageType responseMessage) { // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1036"); // Verify MS-OXWSCDATA requirement: MS-OXWSCDATA_R1036 Site.CaptureRequirementIfIsTrue( isSchemaValidated, "MS-OXWSCDATA", 1036, @"[In m:ArrayOfResponseMessagesType Complex Type] The type [ArrayOfResponseMessagesType] is defined as follow: <xs:complexType name=""ArrayOfResponseMessagesType""> <xs:choice maxOccurs=""unbounded"" > <xs:element name=""CreateItemResponseMessage"" type=""m:ItemInfoResponseMessageType"" /> <xs:element name=""DeleteItemResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""GetItemResponseMessage"" type=""m:ItemInfoResponseMessageType"" /> <xs:element name=""UpdateItemResponseMessage"" type=""m:UpdateItemResponseMessageType"" /> <xs:element name=""UpdateItemInRecoverableItemsResponseMessage"" type=""m:UpdateItemInRecoverableItemsResponseMessageType""/> <xs:element name=""SendItemResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""DeleteFolderResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""EmptyFolderResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""CreateFolderResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""GetFolderResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""FindFolderResponseMessage"" type=""m:FindFolderResponseMessageType"" /> <xs:element name=""UpdateFolderResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""MoveFolderResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""CopyFolderResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""CreateFolderPathResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""CreateAttachmentResponseMessage"" type=""m:AttachmentInfoResponseMessageType"" /> <xs:element name=""DeleteAttachmentResponseMessage"" type=""m:DeleteAttachmentResponseMessageType"" /> <xs:element name=""GetAttachmentResponseMessage"" type=""m:AttachmentInfoResponseMessageType"" /> <xs:element name=""UploadItemsResponseMessage"" type=""m:UploadItemsResponseMessageType"" /> <xs:element name=""ExportItemsResponseMessage"" type=""m:ExportItemsResponseMessageType"" /> <xs:element name=""MarkAllItemsAsReadResponseMessage"" type=""m:ResponseMessageType""/> <xs:element name=""GetClientAccessTokenResponseMessage"" type=""m:GetClientAccessTokenResponseMessageType""/> <xs:element name=""GetAppManifestsResponseMessage"" type=""m:ResponseMessageType""/> <xs:element name=""GetClientExtensionResponseMessage"" type=""m:ResponseMessageType""/> <xs:element name=""SetClientExtensionResponseMessage"" type=""m:ResponseMessageType""/> <xs:element name=""FindItemResponseMessage"" type=""m:FindItemResponseMessageType"" /> <xs:element name=""MoveItemResponseMessage"" type=""m:ItemInfoResponseMessageType"" /> <xs:element name=""ArchiveItemResponseMessage"" type=""m:ItemInfoResponseMessageType""/> <xs:element name=""CopyItemResponseMessage"" type=""m:ItemInfoResponseMessageType"" /> <xs:element name=""ResolveNamesResponseMessage"" type=""m:ResolveNamesResponseMessageType"" /> <xs:element name=""ExpandDLResponseMessage"" type=""m:ExpandDLResponseMessageType"" /> <xs:element name=""GetServerTimeZonesResponseMessage"" type=""m:GetServerTimeZonesResponseMessageType"" /> <xs:element name=""GetEventsResponseMessage"" type=""m:GetEventsResponseMessageType"" /> <xs:element name=""GetStreamingEventsResponseMessage"" type=""m:GetStreamingEventsResponseMessageType"" /> <xs:element name=""SubscribeResponseMessage"" type=""m:SubscribeResponseMessageType"" /> <xs:element name=""UnsubscribeResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""SendNotificationResponseMessage"" type=""m:SendNotificationResponseMessageType"" /> <xs:element name=""SyncFolderHierarchyResponseMessage"" type=""m:SyncFolderHierarchyResponseMessageType"" /> <xs:element name=""SyncFolderItemsResponseMessage"" type=""m:SyncFolderItemsResponseMessageType"" /> <xs:element name=""CreateManagedFolderResponseMessage"" type=""m:FolderInfoResponseMessageType"" /> <xs:element name=""ConvertIdResponseMessage"" type=""m:ConvertIdResponseMessageType"" /> <xs:element name=""GetSharingMetadataResponseMessage"" type=""m:GetSharingMetadataResponseMessageType"" /> <xs:element name=""RefreshSharingFolderResponseMessage"" type=""m:RefreshSharingFolderResponseMessageType"" /> <xs:element name=""GetSharingFolderResponseMessage"" type=""m:GetSharingFolderResponseMessageType"" /> <xs:element name=""CreateUserConfigurationResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""DeleteUserConfigurationResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""GetUserConfigurationResponseMessage"" type=""m:GetUserConfigurationResponseMessageType"" /> <xs:element name=""UpdateUserConfigurationResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""GetRoomListsResponse"" type=""m:GetRoomListsResponseMessageType"" /> <xs:element name=""GetRoomsResponse"" type=""m:GetRoomsResponseMessageType"" /> <xs:element name=""GetRemindersResponse"" type=""m:GetRemindersResponseMessageType""/> <xs:element name=""PerformReminderActionResponse"" type=""m:PerformReminderActionResponseMessageType""/> <xs:element name=""ApplyConversationActionResponseMessage"" type=""m:ResponseMessageType"" /> <xs:element name=""FindMailboxStatisticsByKeywordsResponseMessage"" type=""m:FindMailboxStatisticsByKeywordsResponseMessageType""/> <xs:element name=""GetSearchableMailboxesResponseMessage"" type=""m:GetSearchableMailboxesResponseMessageType""/> <xs:element name=""SearchMailboxesResponseMessage"" type=""m:SearchMailboxesResponseMessageType""/> <xs:element name=""GetDiscoverySearchConfigurationResponseMessage"" type=""m:GetDiscoverySearchConfigurationResponseMessageType""/> <xs:element name=""GetHoldOnMailboxesResponseMessage"" type=""m:GetHoldOnMailboxesResponseMessageType""/> <xs:element name=""SetHoldOnMailboxesResponseMessage"" type=""m:SetHoldOnMailboxesResponseMessageType""/> <xs:element name=""GetNonIndexableItemStatisticsResponseMessage"" type=""m:GetNonIndexableItemStatisticsResponseMessageType""/> <!-- GetNonIndexableItemDetails response --> <xs:element name=""GetNonIndexableItemDetailsResponseMessage"" type=""m:GetNonIndexableItemDetailsResponseMessageType""/> <!-- GetUserHoldSettings response --> <xs:element name=""FindPeopleResponseMessage"" type=""m:FindPeopleResponseMessageType""/> <xs:element name=""GetPasswordExpirationDateResponse"" type=""m:GetPasswordExpirationDateResponseMessageType"" /> <xs:element name=""GetPersonaResponseMessage"" type=""m:GetPersonaResponseMessageType""/> <xs:element name=""GetConversationItemsResponseMessage"" type=""m:GetConversationItemsResponseMessageType""/> <xs:element name=""GetUserRetentionPolicyTagsResponseMessage"" type=""m:GetUserRetentionPolicyTagsResponseMessageType""/> <xs:element name=""GetUserPhotoResponseMessage"" type=""m:GetUserPhotoResponseMessageType""/> <xs:element name=""MarkAsJunkResponseMessage"" type=""m:MarkAsJunkResponseMessageType""/> </xs:choice> </xs:complexType> "); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1094"); // Verify MS-OXWSCDATA requirement: MS-OXWSCDATA_R1094 this.Site.CaptureRequirementIfIsTrue( isSchemaValidated, "MS-OXWSCDATA", 1094, @"[In m:BaseResponseMessageType Complex Type] There MUST be only one ResponseMessages element in a response."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1434"); // Verify MS-OXWSCDATA requirement: MS-OXWSCDATA_R1434 this.Site.CaptureRequirementIfIsTrue( isSchemaValidated, "MS-OXWSCDATA", 1434, @"[In m:ResponseMessageType Complex Type] The type [ResponseMessageType] is defined as follow: <xs:complexType name=""ResponseMessageType""> <xs:sequence minOccurs=""0"" > <xs:element name=""MessageText"" type=""xs:string"" minOccurs=""0"" /> <xs:element name=""ResponseCode"" type=""m:ResponseCodeType"" minOccurs=""0"" /> <xs:element name=""DescriptiveLinkKey"" type=""xs:int"" minOccurs=""0"" /> <xs:element name=""MessageXml"" minOccurs=""0"" > <xs:complexType> <xs:sequence> <xs:any process_contents=""lax"" minOccurs=""0"" maxOccurs=""unbounded"" /> </xs:sequence> <xs:attribute name=""ResponseClass"" type=""t:ResponseClassType"" use=""required"" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType>"); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1436"); // Verify MS-OXWSCDATA requirement: MS-OXWSCDATA_R1436 bool isVerifiedR1436 = true; for (int i = 0; i < responseMessage.ResponseMessages.Items.Length; i++) { bool verifyValue = responseMessage.ResponseMessages.Items[i].ResponseClass == ResponseClassType.Error || responseMessage.ResponseMessages.Items[i].ResponseClass == ResponseClassType.Success || responseMessage.ResponseMessages.Items[i].ResponseClass == ResponseClassType.Warning; isVerifiedR1436 = isVerifiedR1436 && verifyValue; } this.Site.CaptureRequirementIfIsTrue( isVerifiedR1436, "MS-OXWSCDATA", 1436, @"[In m:ResponseMessageType Complex Type] [ResponseClass:] The following values are valid for this attribute: Success , Warning , Error."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1284"); // Since R1436 can be captured, this requirement will be captured too. this.Site.CaptureRequirement( "MS-OXWSCDATA", 1284, @"[In m:ResponseMessageType Complex Type] This attribute [ResponseClass] MUST be present."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1339"); // Verify MS-OXWSCDATA requirement: MS-OXWSCDATA_R1339 this.Site.CaptureRequirementIfIsTrue( isSchemaValidated, "MS-OXWSCDATA", 1339, @"[In t:ServerVersionInfo Element] <xs:element name=""t:ServerVersionInfo""> <xs:complexType> <xs:attribute name=""MajorVersion"" type=""xs:int"" use=""optional"" /> <xs:attribute name=""MinorVersion"" type=""xs:int"" use=""optional"" /> <xs:attribute name=""MajorBuildNumber"" type=""xs:int"" use=""optional"" /> <xs:attribute name=""MinorBuildNumber"" type=""xs:int"" use=""optional"" /> <xs:attribute name=""Version"" type=""xs:string"" use=""optional"" /> </xs:complexType> </xs:element>"); }
/// <summary> /// Verify ItemIdType structure. /// </summary> /// <param name="response">A BaseResponseMessageType instance.</param> private void VerifyItemId(BaseResponseMessageType response) { 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) { this.VerifyItemIdType(tempItem.ItemId); if (tempItem.ConversationId != null) { this.VerifyItemIdType(tempItem.ConversationId); } } } }
/// <summary> /// Verify the BaseResponseMessageType structure. /// </summary> /// <param name="baseResponseMessage">A BaseResponseMessageType instance.</param> private void VerifyBaseResponseMessageType(BaseResponseMessageType baseResponseMessage) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1092"); // Verify MS-OXWSCORE requirement: MS-OXWSCDATA_R1092 Site.CaptureRequirementIfIsNotNull( baseResponseMessage, "MS-OXWSCDATA", 1092, @"[In m:BaseResponseMessageType Complex Type] The type [BaseResponseMessageType] is defined as follow: <xs:complexType name=""BaseResponseMessageType""> <xs:sequence> <xs:element name=""ResponseMessages"" type=""m:ArrayOfResponseMessagesType"" /> </xs:sequence> </xs:complexType>"); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1623"); // Verify MS-OXWSCORE requirement: MS-OXWSCDATA_R1623 Site.CaptureRequirementIfIsNotNull( baseResponseMessage.ResponseMessages, "MS-OXWSCDATA", 1623, @"[In m:BaseResponseMessageType Complex Type] The element ""ResponseMessages"" is ""m:ArrayOfResponseMessagesType"" type (section 2.2.4.10)."); // Verify the ArrayOfResponseMessagesType schema. this.VerifyArrayOfResponseMessagesType(baseResponseMessage.ResponseMessages); // Because the requirement "MS-OXWSCDATA_R1092" contains the same information of this requirement, // If the requirement "MS-OXWSCDATA_R1092" is verified, this requirement has been verified at the same time. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1094"); // Verify MS-OXWSCORE requirement: MS-OXWSCDATA_R1094 Site.CaptureRequirementIfIsNotNull( baseResponseMessage, "MS-OXWSCDATA", 1094, @"[In m:BaseResponseMessageType Complex Type] There MUST be only one ResponseMessages element in a response."); foreach (ResponseMessageType message in baseResponseMessage.ResponseMessages.Items) { this.VerifyResponseMessageType(message); } // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1091"); // Verify MS-OXWSCORE requirement: MS-OXWSCDATA_R1091 // BaseResponseMessageType is not used directly in the schema of each operations, // if schema is validated, this requirement can be captured directly. Site.CaptureRequirement( "MS-OXWSCDATA", 1091, "[In m:BaseResponseMessageType Complex Type] The BaseResponseMessageType complex type MUST NOT be sent in a SOAP message because it is an abstract type."); }
/// <summary> /// Handle the server response. /// </summary> /// <param name="request">The request messages.</param> /// <param name="response">The response messages.</param> /// <param name="isSchemaValidated">Whether the schema is validated.</param> protected void ExchangeServiceBinding_ResponseEvent( BaseRequestType request, BaseResponseMessageType response, bool isSchemaValidated) { this.IsSchemaValidated = isSchemaValidated; }
/// <summary> /// Handle the server response. /// </summary> /// <param name="request">The request messages.</param> /// <param name="response">The response messages.</param> /// <param name="isSchemaValidated">Verify the schema.</param> private void ExchangeServiceBinding_ResponseEvent( BaseRequestType request, BaseResponseMessageType response, bool isSchemaValidated) { this.IsSchemaValidated = isSchemaValidated; // A flag represents the response contains the item information or not. bool hasItemInfo = false; if (response is SetUserPhotoResponseMessageType) { return; } foreach (ResponseMessageType responseMessage in response.ResponseMessages.Items) { if (responseMessage is ItemInfoResponseMessageType) { hasItemInfo = true; break; } } BaseItemIdType[] itemIds; if (hasItemInfo) { itemIds = Common.GetItemIdsFromInfoResponse(response); } else { itemIds = new BaseItemIdType[0]; return; } foreach (ItemIdType itemId in itemIds) { bool notExist = true; foreach (ItemIdType exist in this.ExistContactItems) { if (exist.Id == itemId.Id) { // Check if the Id of the item in response exists in previous recorded item list. notExist = false; break; } } // If the Id of Item is not exist, add the item into item list. if (notExist) { this.ExistContactItems.Add(itemId); } } }
/// <summary> /// Verify the UploadItemsResponseType related requirements when UploadItems executes unsuccessfully. /// </summary> /// <param name="uploadItemsResponse">The UploadItemsResponseType instance returned from the server.</param> protected void VerifyUploadItemsErrorResponse(BaseResponseMessageType uploadItemsResponse) { foreach (UploadItemsResponseMessageType responseMessage in uploadItemsResponse.ResponseMessages.Items) { // If the UploadItems operation is unsuccessful, the ResponseClass should be set to "Error", then requirement MS-OXWSBTRF_R2009 can be captured. // Add debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R2009"); // Verify requirement: MS-OXWSBTRF_R2009. Site.CaptureRequirementIfAreEqual<ResponseClassType>( ResponseClassType.Error, responseMessage.ResponseClass, 2009, @"[In tns:UploadItemsSoapOut Message] If the request [UploadItems request] is unsuccessful, the UploadItems operation returns an UploadItemsResponse element with the ResponseClass attribute of the UploadItemsResponseMessage element set to ""Error""."); // If the ResponseCode is correspond to the schema, the ResponseCode should be a value of the ResponseCodeType simple type, then requirement MS-OXWSBTRF_R2010 can be captured. // Add debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R2010"); // Verify requirement: MS-OXWSBTRF_R2010 Site.CaptureRequirementIfIsTrue( this.IsSchemaValidated, 2010, @"[In tns:UploadItemsSoapOut Message][If the request UploadItems request is unsuccessful]The ResponseCode element of the UploadItemsResponseMessage element is set to a value of the ResponseCodeType simple type, as specified in [MS-OXWSCDATA] section 2.2.5.24."); } }
/// <summary> /// Verify the UploadItemsResponseType related requirements when UploadItems operation executes successfully. /// </summary> /// <param name="uploadItemsResponse">The UploadItemsResponseType instance returned from the server.</param> protected void VerifyUploadItemsSuccessResponse(BaseResponseMessageType uploadItemsResponse) { foreach (UploadItemsResponseMessageType responseMessage in uploadItemsResponse.ResponseMessages.Items) { Site.Assert.IsNotNull(responseMessage, "The response got from server should not be null."); // If the length of items in UploadItems response is equal to this.ItemCount, and uploaded Items' subject are the same as created items' subject then requirement MS-OXWSBTRF_R207 can be captured. Site.Assert.AreEqual<int>(uploadItemsResponse.ResponseMessages.Items.Length, this.ItemCount, "The count of uploaded items should be the same as the count of created items"); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R2007."); // Verify requirement: MS-OXWSBTRF_R2007 Site.CaptureRequirementIfAreEqual<ResponseClassType>( ResponseClassType.Success, responseMessage.ResponseClass, 2007, @"[In tns:UploadItemsSoapOut Message]If the request [UploadItems request] is successful, the UploadItems operation returns an UploadItemsResponse element with the ResponseClass attribute of the UploadItemsResponseMessage element set to ""Success""."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R2008."); // Verify requirement: MS-OXWSBTRF_R2008 Site.CaptureRequirementIfAreEqual<ResponseCodeType>( ResponseCodeType.NoError, responseMessage.ResponseCode, 2008, @"[In tns:UploadItemsSoapOut Message][If the UploadItems request is successful] The ResponseCode element of the UploadItemsResponseMessage element is set to ""NoError""."); } }
/// <summary> /// Verify the ExportItemsResponseType related requirements when the ExportItems operation executes successfully. /// </summary> /// <param name="exportItemsResponse">The ExportItemsResponseType instance returned from the server.</param> protected void VerifyExportItemsSuccessResponse(BaseResponseMessageType exportItemsResponse) { foreach (ResponseMessageType responseMessage in exportItemsResponse.ResponseMessages.Items) { ExportItemsResponseMessageType exportResponse = responseMessage as ExportItemsResponseMessageType; Site.Assert.IsNotNull(exportResponse, "The response got from server should not be null."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R2107."); // Verify requirement: MS-OXWSBTRF_R2107 Site.CaptureRequirementIfAreEqual<ResponseClassType>( ResponseClassType.Success, responseMessage.ResponseClass, 2107, @"[In tns:ExportItemsSoapOut Message]If the request is successful, the ExportItems operation returns an ExportItemsResponse element with the ResponseClass attribute of the ExportItemsResponseMessage element set to ""Success""."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R170."); // If the ItemId in exportResponse is not null, then requirement MS-OXWSBTRF_R170 can be verified. // Verify requirement: MS-OXWSBTRF_R170 Site.CaptureRequirementIfIsNotNull( exportResponse.ItemId, 170, @"[In m:ExportItemsResponseMessageType Complex Type]This element[ItemId] MUST be present if the export operation is successful."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R172."); // If the data in exportResponse is not null, then requirement MS-OXWSBTRF_R172 and MS-OXWSBTRF_R173 can be verified. // Verify requirement: MS-OXWSBTRF_R172 Site.CaptureRequirementIfIsNotNull( exportResponse.Data, 172, @"[In m:ExportItemsResponseMessageType Complex Type][Data] specifies the data of a single exported item."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R173."); // Verify requirement: MS-OXWSBTRF_R173 Site.CaptureRequirementIfIsNotNull( exportResponse.Data, 173, @"[In m:ExportItemsResponseMessageType Complex Type]This element[Data] MUST be present if the export operation is successful."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R2108."); // Verify requirement: MS-OXWSBTRF_R2108 Site.CaptureRequirementIfAreEqual<ResponseCodeType>( ResponseCodeType.NoError, responseMessage.ResponseCode, 2108, @"[In tns:ExportItemsSoapOut Message][If the request is successful]The ResponseCode element of the ExportItemsResponseMessage element is set to ""NoError""."); } // If the length of items in ExportItems response is equal to this.ItemCount, and the exported items' id are same as created items' id then requirement MS-OXWSBTRF_R179 can be captured. Site.Assert.AreEqual<int>(exportItemsResponse.ResponseMessages.Items.Length, this.ItemCount, "The exported items' count should be the same with created items' count"); bool isSameId = false; for (int i = 0; i < this.ItemCount; i++) { Site.Log.Add( LogEntryKind.Debug, "The exported items' id: '{0}' should be same with the created items' id: {1}.", (exportItemsResponse.ResponseMessages.Items[i] as ExportItemsResponseMessageType).ItemId.Id, this.CreatedItemId[i].Id); if ((exportItemsResponse.ResponseMessages.Items[i] as ExportItemsResponseMessageType).ItemId.Id == this.CreatedItemId[i].Id) { isSameId = true; } else { isSameId = false; break; } } Site.Assert.IsTrue(isSameId, "The exported items' id should be same to the created items' id. "); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R179."); // After verify the length of items in ExportItems response is equal to this.ItemCount, and the exported items' id are same as created items' id then requirement MS-OXWSBTRF_R179 can be captured. Site.CaptureRequirement( 179, @"[In ExportItemsType Complex Type][ItemIds] specifies the item identifier array of the items to export."); }
/// <summary> /// Verify the response returned by server when the operating multiple items. /// </summary> /// <param name="response">A response returned by server.</param> /// <returns>The validation result.</returns> protected bool VerifyMultipleResponse(BaseResponseMessageType response) { bool isValidResponse = false; if (response != null && response.ResponseMessages != null && response.ResponseMessages.Items != null && response.ResponseMessages.Items.Length > 0) { Site.Assert.AreEqual<int>(2, response.ResponseMessages.Items.Length, "There should be two Items elements in the operation response because this case only design for operate two items"); bool isValidFirstItemsofResponse = string.Equals(response.ResponseMessages.Items[0].ResponseClass.ToString(), "Success", System.StringComparison.CurrentCultureIgnoreCase); if (!isValidFirstItemsofResponse) { Site.Assert.Fail("The operation failed with response code '{0}'", response.ResponseMessages.Items[0].ResponseCode.ToString()); } bool isValidSecondItemsofResponse = string.Equals(response.ResponseMessages.Items[1].ResponseClass.ToString(), "Success", System.StringComparison.CurrentCultureIgnoreCase); if (!isValidSecondItemsofResponse) { Site.Assert.Fail("The operation failed with response code '{0}'", response.ResponseMessages.Items[1].ResponseCode.ToString()); } isValidResponse = isValidFirstItemsofResponse && isValidSecondItemsofResponse; } return isValidResponse; }
/// <summary> /// Verify the validation of a response returned by server. /// </summary> /// <param name="response">A response returned by server.</param> /// <returns>The validation result.</returns> protected bool VerifyResponse(BaseResponseMessageType response) { bool isValidResponse = false; if (response != null && response.ResponseMessages != null && response.ResponseMessages.Items != null && response.ResponseMessages.Items.Length > 0 && response.ResponseMessages.Items[0] != null) { isValidResponse = string.Equals(response.ResponseMessages.Items[0].ResponseClass.ToString(), "Success", StringComparison.CurrentCultureIgnoreCase); if (!isValidResponse && response.ResponseMessages.Items[0].ResponseCodeSpecified) { Site.Assert.Fail("The operation failed with response code '{0}'", response.ResponseMessages.Items[0].ResponseCode.ToString()); } } return isValidResponse; }