public void MSOXORULE_S02_TC14_ServerExecuteRule_Action_OP_COPY_FolderInThisStore()
{
this.CheckMAPIHTTPTransportSupported();
#region Prepare value for ruleProperties variable.
RuleProperties ruleProperties = AdapterHelper.GenerateRuleProperties(this.Site, Constants.RuleNameCopy);
#endregion
#region TestUser1 creates folder1 in server store.
RopCreateFolderResponse createFolderResponse;
uint newFolderHandle = this.OxoruleAdapter.RopCreateFolder(this.InboxFolderHandle, Common.GenerateResourceName(this.Site, "User1Folder01"), "TestForOP_COPY", out createFolderResponse);
ulong newFolderId = createFolderResponse.FolderId;
Site.Assert.AreEqual<uint>(0, createFolderResponse.ReturnValue, "Creating folder operation should succeed.");
#endregion
#region Prepare rules' data
MoveCopyActionData moveCopyActionData = new MoveCopyActionData();
// Get the created folder1 entry id.
ServerEID serverEID = new ServerEID(BitConverter.GetBytes(newFolderId));
byte[] folder1EId = serverEID.Serialize();
// Get the store object's entry id
byte[] storeEId = this.GetStoreObjectEntryID(StoreObjectType.Mailbox, this.Server, this.User1ESSDN);
moveCopyActionData.FolderInThisStore = 1;
moveCopyActionData.FolderEID = folder1EId;
moveCopyActionData.StoreEID = storeEId;
moveCopyActionData.FolderEIDSize = (ushort)folder1EId.Length;
moveCopyActionData.StoreEIDSize = (ushort)storeEId.Length;
IActionData[] moveCopyAction = { moveCopyActionData };
#endregion
#region Generate test RuleData.
// Add rule for OP_COPY without rule Provider Data.
ruleProperties.ProviderData = string.Empty;
RuleData ruleForMoveFolder = AdapterHelper.GenerateValidRuleDataWithFlavor(new ActionType[] { ActionType.OP_COPY }, 0, RuleState.ST_ENABLED, moveCopyAction, new uint[] { 0 }, ruleProperties);
#endregion
#region TestUser1 adds OP_COPY rule to the Inbox folder.
RopModifyRulesResponse modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(this.InboxFolderHandle, ModifyRuleFlag.Modify_ReplaceAll, new RuleData[] { ruleForMoveFolder });
Site.Assert.AreEqual<uint>(0, modifyRulesResponse.ReturnValue, "Adding Copy rule should succeed.");
#endregion
#region TestUser2 delivers a message to TestUser1 to trigger the rule.
// TestUser2 deliver a message to trigger the rule.
string mailSubject = Common.GenerateResourceName(this.Site, ruleProperties.ConditionSubjectName + "Title");
this.SUTAdapter.SendMailToRecipient(this.User2Name, this.User2Password, this.User1Name, mailSubject);
// Wait for the mail to be received and the rule to take effect.
Thread.Sleep(this.WaitForTheRuleToTakeEffect);
#endregion
#region TestUser1 gets the message content to verify the rule evaluation.
uint inboxFolderContentsTableHandle = 0;
PropertyTag[] propertyTagList = new PropertyTag[1];
propertyTagList[0].PropertyId = (ushort)PropertyId.PidTagSubject;
propertyTagList[0].PropertyType = (ushort)PropertyType.PtypString;
uint rowCount = 0;
RopQueryRowsResponse getInboxMailMessageContent = this.GetExpectedMessage(this.InboxFolderHandle, ref inboxFolderContentsTableHandle, propertyTagList, ref rowCount, 1, mailSubject);
uint newFolder1ContentsTableHandle = 0;
rowCount = 0;
RopQueryRowsResponse getNewFolder1MailMessageContent = this.GetExpectedMessage(newFolderHandle, ref newFolder1ContentsTableHandle, propertyTagList, ref rowCount, 1, mailSubject);
Site.Assert.AreEqual<uint>(0, getNewFolder1MailMessageContent.ReturnValue, "Getting message on the newly created folder should succeed.");
// Add the debug information
this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R957");
bool isVerifiedR957 = getInboxMailMessageContent.RowCount != 0 && getNewFolder1MailMessageContent.RowCount != 0;
// Verify MS-OXORULE requirement: MS-OXORULE_R957
// Since the destination folder is created in the user's mailbox, if the Emails can be found in the destination folder and Inbox folder, MS-OXORULE_R957 can be verified.
this.Site.CaptureRequirementIfIsTrue(
isVerifiedR957,
957,
@"[In OP_MOVE and OP_COPY ActionData Structure] [Buffer Format for Standard Rules] The destination folder for a Copy action in a standard rule can be in the user's mailbox.");
#endregion
#region Delete the newly created folder.
RopDeleteFolderResponse deleteFolder = this.OxoruleAdapter.RopDeleteFolder(this.InboxFolderHandle, newFolderId);
Site.Assert.AreEqual<uint>(0, deleteFolder.ReturnValue, "Deleting folder should succeed.");
#endregion
}