Microsoft.Protocols.TestSuites.MS_LISTSWS.S03_OperationOnListItem.MSLISTSWS_S03_TC41_GetListItemChanges_NullOrEmptyViewFields C# (CSharp) Method

MSLISTSWS_S03_TC41_GetListItemChanges_NullOrEmptyViewFields() private method

        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.");
        }
S03_OperationOnListItem