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);
}