Microsoft.Protocols.TestSuites.MS_OXWSATT.S01_AttachmentProcessing.MSOXWSATT_S01_TC02_ProcessMessageTypeItemAttachment C# (CSharp) Method

MSOXWSATT_S01_TC02_ProcessMessageTypeItemAttachment() private method

        public void MSOXWSATT_S01_TC02_ProcessMessageTypeItemAttachment()
        {
            Site.Assume.IsTrue(Common.IsRequirementEnabled(318013, this.Site), "Exchange 2007 does not use the FilterHtmlContent element.");

            #region Step 1 Create an item attachment, which contains a MessageType item as the child item, on an item.

            // Create an item attachment by CreateAttachment operation.
            CreateAttachmentResponseType createAttachmentResponse = this.CallCreateAttachmentOperation(this.ItemId.Id, AttachmentTypeValue.MessageAttachment);
            AttachmentInfoResponseMessageType createAttachmentInfoResponse = createAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType;

            // Check the response.
            Common.CheckOperationSuccess(createAttachmentResponse, 1, this.Site);

            this.VerifyCreateAttachmentSuccessfulResponse(createAttachmentResponse);

            // Gets the ID of the created attachment.
            AttachmentType createdAttachment = createAttachmentInfoResponse.Attachments[0];
            AttachmentIdType createdAttachmentId = createdAttachment.AttachmentId;

            #endregion

            #region Step 2 Get the item attachment created in step 1 by the GetAttachment operation.
            GetAttachmentType getAttachmentRequest = new GetAttachmentType()
            {
                AttachmentIds = new AttachmentIdType[] { createdAttachmentId },
                AttachmentShape = new AttachmentResponseShapeType()
                {
                    BodyType = BodyTypeResponseType.Text,
                    BodyTypeSpecified = true,
                    IncludeMimeContent = true,
                    IncludeMimeContentSpecified = true,
                }
            };

            GetAttachmentResponseType getAttachmentResponse = this.ATTAdapter.GetAttachment(getAttachmentRequest);
            AttachmentInfoResponseMessageType getAttachmentInfoResponse = getAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType;

            // Check the response.
            Common.CheckOperationSuccess(getAttachmentResponse, 1, this.Site);
            #endregion

            if (Common.IsRequirementEnabled(55001, this.Site))
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R55001");

                // Verify MS-OXWSATT requirement: MS-OXWSATT_R55001
                // If the MIMEContent of returned attachment is not null, this requirement can be captured.
                Site.CaptureRequirementIfIsNotNull(
                    ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item.MimeContent,
                    55001,
                    @"[In Appendix C: Product Behavior]  Implementation does return MIME content.(<10> Section 3.1.4.3.3.3:  In Exchange 2007, Exchange 2010, Microsoft Exchange Server 2010 Service Pack 1 (SP1) and Microsoft Exchange Server 2010 Service Pack 2 (SP2),  If the IncludeMimeContent element is set to true in the AttachmentResponseShapeType complex type, the MIME content will be returned for attachment of the item class: IPM.Note.)");
            }

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R202");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R202
            // If the attachment created in step 1 is successfully returned, this requirement can be captured.
            Site.CaptureRequirementIfAreEqual<ResponseClassType>(
                ResponseClassType.Success,
                getAttachmentInfoResponse.ResponseClass,
                202,
                @"[In DeleteAttachment Operation] Before an item attachment can be deleted, it MUST be retrieved from the server.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R416");
            bool isR416Verified = getAttachmentInfoResponse.ResponseClass == ResponseClassType.Success && getAttachmentInfoResponse.Attachments[0].AttachmentId.Id != null;

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R416
            Site.CaptureRequirementIfIsTrue(
                isR416Verified,
                416,
                @"[In t:AttachmentType Complex Type][The AttachmentId element] specifies the attachment identifier.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R63");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R63
            // If the ContentLocation of returned attachment is same as the one of attachment created in step 1, this requirement can be captured.
            Site.CaptureRequirementIfAreEqual<string>(
                @"http://www.contoso.com/xyz.abc",
                getAttachmentInfoResponse.Attachments[0].ContentLocation,
                63,
                @"[In t:AttachmentType Complex Type][The ContentLocation element] specifies the URI that corresponds to the location of the content of the attachment.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R36");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R36
            this.Site.CaptureRequirementIfIsInstanceOfType(
                getAttachmentInfoResponse.Attachments[0],
                typeof(ItemAttachmentType),
                36,
                @"[In t:ArrayOfAttachmentsType Complex Type][The ItemAttachment element] specifies an item that is attached to another item.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R349");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R349
            // When the created attachment is returned successfully, this requirement can be captured.
            Site.CaptureRequirementIfAreEqual<ResponseClassType>(
                ResponseClassType.Success,
                getAttachmentInfoResponse.ResponseClass,
                349,
                @"[In t:ItemAttachmentType Complex Type][The type of Message element is] t:MessageType ([MS-OXWSMSG] section 2.2.4.1)");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R83");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R83
            // When the created attachment is returned successfully, this requirement can be captured.
            Site.CaptureRequirementIfAreEqual<ResponseClassType>(
                ResponseClassType.Success,
                getAttachmentInfoResponse.ResponseClass,
                83,
                @"[In t:ItemAttachmentType Complex Type][The Message element] Represents a server e-mail message.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R475");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R475
            // if all of additional properties are returned successfully, this requirement can be captured.
            Site.CaptureRequirementIfIsNotNull(
                ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item.DateTimeCreated,
                475,
                @"[In m:GetAttachmentType Complex Type][The AttachmentShape element] Contains additional properties to return for the attachments.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R521");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R521
            // if one of additional properties is returned successfully, this requirement can be captured.
            Site.CaptureRequirementIfIsNotNull(
                ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item.DateTimeCreated,
                521,
                @"[In Complex Types] [Complex type name]AttachmentResponseShapeType Specifies additional properties for the GetAttachment operation to return.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R549");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R549
            // if one of additional properties is returned successfully, this requirement can be captured.
            Site.CaptureRequirementIfIsNotNull(
                ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item.DateTimeCreated,
                549,
                @"[In t:AttachmentResponseShapeType Complex Type][The AdditionalProperties element] Contains additional properties to return in a response.");

            // Add the debug information
            this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R478");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R478
            this.Site.CaptureRequirementIfAreEqual<string>(
                BodyTypeResponseType.Text.ToString(),
                ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item.Body.BodyType1.ToString(),
                478,
                @"[In t:AttachmentResponseShapeType Complex Type][The BodyType element] Represents the format of the body text in a response.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSCDATA_R1234");

            // Verify MS-OXWSCDATA requirement: MS-OXWSCDATA_R1234
            // The element "t:Path" is contained in additional property if additional properties are returned successfully, this requirement can be captured.
            Site.CaptureRequirementIfIsNotNull(
                ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item.DateTimeCreated,
                "MS-OXWSCDATA",
                1234,
                @"[In t:NonEmptyArrayOfPathsToElementType Complex Type] The element ""t:Path"" with type ""t:Path"" specifies a property to be returned in a response.");

            this.VerifyGetAttachmentSuccessfulResponse(getAttachmentResponse);

            #region Step 3 Get the item attachment created in step 1 by the GetAttachment operation with FilterHtmlContent is false.
            getAttachmentRequest = new GetAttachmentType()
            {
                AttachmentIds = new AttachmentIdType[] { createdAttachmentId },

                AttachmentShape = new AttachmentResponseShapeType()
                {
                    BodyType = BodyTypeResponseType.HTML,
                    BodyTypeSpecified = true,
                    IncludeMimeContent = true,
                    IncludeMimeContentSpecified = true,
                    FilterHtmlContent = false,
                    FilterHtmlContentSpecified = true,
                }
            };

            getAttachmentResponse = this.ATTAdapter.GetAttachment(getAttachmentRequest);
            getAttachmentInfoResponse = getAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType;
            MessageType message = ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item as MessageType;

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R479002");

            this.Site.CaptureRequirementIfIsTrue(
                 message.Body.Value.Contains("<script>alert('Alert!');</script>"),
                 479002,
                 @"[In t:AttachmentResponseShapeType Complex Type][The FilterHtmlContent element] A text value of ""false"" indicates that potentially unsafe HTML content is not to be filtered from the attachment.");
            #endregion

            #region Step 4 Get the item attachment created in step 1 by the GetAttachment operation with FilterHtmlContent is true.
            getAttachmentRequest = new GetAttachmentType()
            {
                AttachmentIds = new AttachmentIdType[] { createdAttachmentId },

                AttachmentShape = new AttachmentResponseShapeType()
                {
                    BodyType = BodyTypeResponseType.HTML,
                    BodyTypeSpecified = true,
                    IncludeMimeContent = true,
                    IncludeMimeContentSpecified = true,
                    FilterHtmlContent = true,
                    FilterHtmlContentSpecified = true,
                }
            };

            getAttachmentResponse = this.ATTAdapter.GetAttachment(getAttachmentRequest);
            getAttachmentInfoResponse = getAttachmentResponse.ResponseMessages.Items[0] as AttachmentInfoResponseMessageType;
            message = ((ItemAttachmentType)getAttachmentInfoResponse.Attachments[0]).Item as MessageType;

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R479001");

            this.Site.CaptureRequirementIfIsFalse(
                 message.Body.Value.Contains("<script>alert('Alert!');</script>"),
                 479001,
                 @"[In t:AttachmentResponseShapeType Complex Type][The FilterHtmlContent element] A text value of ""true"" indicates that potentially unsafe HTML content is to be filtered from the attachment.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R318013"); 

            // If step above all pass, R318013 will be verified.
            this.Site.CaptureRequirement(
                318013,
                @"[In Appendix C: Product Behavior] Implementation does support the FilterHtmlContent element. (Exchange 2010 and above follow this behavior.)");
            #endregion
            
            #region Step 5 Delete the item attachment created in step 1 by the DeleteAttachment operation.

            DeleteAttachmentResponseType deleteAttachmentResponse = this.CallDeleteAttachmentOperation(createdAttachmentId);
            DeleteAttachmentResponseMessageType deleteAttachmentResponseMessage = deleteAttachmentResponse.ResponseMessages.Items[0] as DeleteAttachmentResponseMessageType;

            // Check the response.
            Common.CheckOperationSuccess(deleteAttachmentResponse, 1, this.Site);

            #endregion

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSATT_R466");

            // Verify MS-OXWSATT requirement: MS-OXWSATT_R466
            // if the RootItemId is same as the id of the store item, this requirement can be captured.
            Site.CaptureRequirementIfAreEqual<string>(
                this.ItemId.Id,
                deleteAttachmentResponseMessage.RootItemId.RootItemId,
                466,
                @"[In m:DeleteAttachmentResponseMessageType Complex Type][The RootItemId element] Specifies the parent item of a deleted attachment.");

            this.VerifyDeleteAttachmentSuccessfulResponse(deleteAttachmentResponse);
        }