public void MSASCMD_S14_TC15_Search_WithAllClass()
{
Site.Assume.IsTrue(Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site) == "14.1" || Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site) == "14.0", "[In Appendix A: Product Behavior] <14> Section 2.2.3.27.4: The SMS and Notes classes are only available if the MS-ASProtocolVersion header is set to 14.0 [or 14.1].");
#region Create one item in User2 Inbox folder, Calendar folder, Contacts subfolder
string searchPrefix = "keyWord" + TestSuiteBase.ClientId;
// Respectively create one item in User2 Inbox folder, Calendar folder and Contacts sub-folder
this.CreateItemsWithKeyword(searchPrefix);
#endregion
#region Create Search request with class element
Request.SearchStore store = new Request.SearchStore
{
Name = SearchName.Mailbox.ToString(),
Options = new Request.Options1
{
ItemsElementName = new Request.ItemsChoiceType6[]
{
Request.ItemsChoiceType6.DeepTraversal,
Request.ItemsChoiceType6.RebuildResults
},
Items = new object[] { string.Empty, string.Empty }
},
Query = new Request.queryType
{
ItemsElementName = new Request.ItemsChoiceType2[] { Request.ItemsChoiceType2.And },
Items = new Request.queryType[] { new Request.queryType() }
}
};
((Request.queryType)store.Query.Items[0]).ItemsElementName = new Request.ItemsChoiceType2[]
{
Request.ItemsChoiceType2.CollectionId,
Request.ItemsChoiceType2.CollectionId,
Request.ItemsChoiceType2.CollectionId,
Request.ItemsChoiceType2.Class,
Request.ItemsChoiceType2.Class,
Request.ItemsChoiceType2.Class,
Request.ItemsChoiceType2.Class,
Request.ItemsChoiceType2.Class,
Request.ItemsChoiceType2.Class,
Request.ItemsChoiceType2.FreeText
};
((Request.queryType)store.Query.Items[0]).Items = new object[] { this.User2Information.InboxCollectionId, this.User2Information.CalendarCollectionId, this.User2Information.ContactsCollectionId, "Tasks", "Email", "Calendar", "Contacts", "Notes", "SMS", searchPrefix };
#endregion
#region Call search command
SearchRequest searchRequest = Common.CreateSearchRequest(new Request.SearchStore[] { store });
SearchResponse searchResponse = this.CMDAdapter.Search(searchRequest);
Site.Assert.AreEqual("1", searchResponse.ResponseData.Response.Store.Status, "If server successfully completed command, server should return status 1");
if (searchResponse.ResponseData.Response.Store.Status != "1" || searchResponse.ResponseData.Response.Store.Result.Length != 3)
{
searchResponse = this.LoopSearch(searchRequest, 3);
}
#endregion
#region Verify requirements MS-ASCMD_R1322, MS-ASCMD_R920, MS-ASCMD_R5146, MS-ASCMD_R5883
// Add the debug information
Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R920");
// Verify MS-ASCMD requirement: MS-ASCMD_R920
Site.CaptureRequirementIfAreEqual<string>(
"1",
searchResponse.ResponseData.Response.Store.Status,
920,
@"[In Class(Search)] The valid airsync:Class element values are: Tasks, Email, Calendar, Contacts, Notes, SMS<14>.");
if (Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site) == "14.0")
{
// Add the debug information
Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R5146");
// Verify MS-ASCMD requirement: MS-ASCMD_R5146
Site.CaptureRequirementIfAreEqual<string>(
"1",
searchResponse.ResponseData.Response.Store.Status,
5146,
@"[In Appendix A: Product Behavior] <14> Section 2.2.3.27.4: The SMS and Notes classes are only available if the MS-ASProtocolVersion header is set to 14.0 [or 14.1].");
}
if (Common.GetConfigurationPropertyValue("ActiveSyncProtocolVersion", this.Site) == "14.1")
{
// Add the debug information
Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R5883");
// Verify MS-ASCMD requirement: MS-ASCMD_R5883
Site.CaptureRequirementIfAreEqual<string>(
"1",
searchResponse.ResponseData.Response.Store.Status,
5883,
@"[In Appendix A: Product Behavior] <14> Section 2.2.3.27.4: The SMS and Notes classes are only available if the MS-ASProtocolVersion header is set to [14.0 or] 14.1.");
}
bool isAllResultContainClass = false;
foreach (Response.SearchResponseStoreResult result in searchResponse.ResponseData.Response.Store.Result)
{
// Check if every search result contains Class element.
isAllResultContainClass = result.Class != null && IsClassSupported(result.Class);
}
// Add the debug information
Site.Log.Add(LogEntryKind.Debug, "Verify MS-ASCMD_R1322");
// Verify MS-ASCMD requirement: MS-ASCMD_R1322
Site.CaptureRequirementIfIsTrue(
isAllResultContainClass,
1322,
@"[In Class(Search)] Element Class (Search) in Search command response, the number allowed is 1? (required, 1 per Result element).");
#endregion
}