public void MSLISTSWS_S03_TC41_GetListItemChanges_NullOrEmptyViewFields()
{
// Create a list.
string listName = TestSuiteHelper.GetUniqueListName();
string listId = TestSuiteHelper.CreateList(listName);
// Add a field to list and default view
string addedFieldName = TestSuiteHelper.GetUniqueFieldName();
TestSuiteHelper.AddFieldsToList(listId, new List<string> { addedFieldName }, new List<string> { "Text" }, new List<string> { string.Empty });
// Add 1 list item with random string in 'addedFieldName' and 'existFieldName' field.
Dictionary<string, string> fieldNameValuePairs = new Dictionary<string, string>();
// Add value to 'existFieldName' field.
string existFieldName = Common.GetConfigurationPropertyValue("ListFieldText", this.Site);
string fieldValue = TestSuiteHelper.GenerateRandomString(5);
fieldNameValuePairs.Add(existFieldName, fieldValue);
// Add value to 'addedFieldName' field.
fieldValue = TestSuiteHelper.GenerateRandomString(5);
fieldNameValuePairs.Add(addedFieldName, fieldValue);
UpdateListItemsUpdates listItemUpdates = TestSuiteHelper.CreateUpdateListItems(
new List<MethodCmdEnum> { MethodCmdEnum.New },
new List<Dictionary<string, string>> { fieldNameValuePairs });
// Invoke UpdateListItems operation to add list item.
this.listswsAdapter.UpdateListItems(listName, listItemUpdates);
// Call GetListItemChanges operation to verify the List has been changed on the server.
GetListItemChangesResponseGetListItemChangesResult getItemChangesResult = null;
// 'viewFields' is not specified by excluding the element
getItemChangesResult = this.listswsAdapter.GetListItemChanges(
listId,
null,
null,
null);
// "ows_" is required prefix in [MS-LISTSWS]
string expectedPrefix = "ows_";
bool isFieldInDefaultViewReturned = false;
bool isFieldNotInDefaultViewReturned = false;
// Find fields in response
// According to TD, all fields in the default view MUST be returned from the list item.
// 'addedFieldName' is added in default view, so it must in the response.
// 'fieldName' field is not added in default view, so it must not in the response.
foreach (DataDefinition data in getItemChangesResult.listitems.data)
{
XmlNode[] anyItems = data.Any;
DataTable zrowData = AdapterHelper.ExtractData(anyItems);
if (!isFieldInDefaultViewReturned)
{
// Check if 'addedFieldName' field in result
var matchColumn = from DataColumn columnItem in zrowData.Columns
where columnItem.ColumnName == expectedPrefix + addedFieldName
select columnItem;
isFieldInDefaultViewReturned = matchColumn.Any(founder => founder.ColumnName == expectedPrefix + addedFieldName);
}
if (!isFieldNotInDefaultViewReturned)
{
// Check if 'fieldName' field in result
var matchColumn = from DataColumn columnItem in zrowData.Columns
where columnItem.ColumnName == expectedPrefix + existFieldName
select columnItem;
isFieldNotInDefaultViewReturned = matchColumn.Any(founder => founder.ColumnName == expectedPrefix + existFieldName);
}
}
bool isExcludingElementVerified = isFieldInDefaultViewReturned && !isFieldNotInDefaultViewReturned;
// 'viewFields' is not specified by including an empty element
CamlViewFields viewFields = new CamlViewFields();
getItemChangesResult = this.listswsAdapter.GetListItemChanges(
listId,
viewFields,
null,
null);
isFieldInDefaultViewReturned = false;
isFieldNotInDefaultViewReturned = false;
// Find fields in response
// According to TD, all fields in the default view MUST be returned from the list item.
// 'addedFieldName' is added in default view, so it must in the response.
// 'fieldName' field is not added in default view, so it must not in the response.
foreach (DataDefinition data in getItemChangesResult.listitems.data)
{
XmlNode[] anyItems = data.Any;
DataTable zrowData = AdapterHelper.ExtractData(anyItems);
if (!isFieldInDefaultViewReturned)
{
// Check if 'addedFieldName' field in result
var matchColumn = from DataColumn columnItem in zrowData.Columns
where columnItem.ColumnName == expectedPrefix + addedFieldName
select columnItem;
isFieldInDefaultViewReturned = matchColumn.Any(founder => founder.ColumnName == expectedPrefix + addedFieldName);
}
if (!isFieldNotInDefaultViewReturned)
{
// Check if 'fieldName' field in result
var matchColumn = from DataColumn columnItem in zrowData.Columns
where columnItem.ColumnName == expectedPrefix + existFieldName
select columnItem;
isFieldNotInDefaultViewReturned = matchColumn.Any(founder => founder.ColumnName == expectedPrefix + existFieldName);
}
}
bool isEmptyElementVerified = isFieldInDefaultViewReturned && !isFieldNotInDefaultViewReturned;
// If both excluding element and empty element requests are verified, it means
// whether by excluding the element or by including an empty element,
// all fields in the default view MUST be returned from the list item.
// Then R640 can be verified.
Site.Log.Add(
LogEntryKind.Debug,
"The actual value: isExcludingElementVerified[{0}],isEmptyElementVerified[{1}] for requirement #R640",
isExcludingElementVerified,
isEmptyElementVerified);
bool isR640Verified = isExcludingElementVerified && isEmptyElementVerified;
Site.CaptureRequirementIfIsTrue(
isR640Verified,
640,
@"[In GetListItemChanges operation] [In GetListItemChanges element] [In viewFields field]If this is not specified, whether by excluding the element or by including an empty element, all fields in the default view MUST be returned from the list item.");
}