/// <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.");
                    }
                }
            }
        }
예제 #3
0
        /// <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.");
        }
예제 #11
0
        /// <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;
        }
예제 #12
0
        /// <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;
        }