/// <summary> /// The GetListItemChanges operation is used to retrieve the list items that have been inserted or updated /// since the specified date and time and matching the specified filter criteria. /// </summary> /// <param name="listName">The name of the list from which the list item changes will be got</param> /// <param name="viewFields">Indicates which fields of the list item SHOULD be returned</param> /// <param name="since">The date and time to start retrieving changes in the list /// If the parameter is null, protocol server should return all list items /// If the date that is passed in is not in UTC format, protocol server will use protocol server's local time zone and convert it to UTC time</param> /// <param name="contains">Restricts the results returned by giving a specific value to be searched for in the specified list item field</param> /// <returns>Return the list item change result</returns> public GetListItemChangesResponseGetListItemChangesResult GetListItemChanges(string listName, CamlViewFields viewFields, string since, CamlContains contains) { if (null == this.listsProxy) { throw new InvalidOperationException("The Proxy instance is NULL, need to initialize the adapter"); } GetListItemChangesResponseGetListItemChangesResult result = null; result = this.listsProxy.GetListItemChanges(listName, viewFields, since, contains); this.VerifyTransportRequirement(); return(result); }
/// <summary> /// Verify the message syntax of GetListItemChanges operation when the response is /// received successfully. /// </summary> /// <param name="getListItemChangesResult">The result of the operation</param> private void VerifyGetListItemChangesOperation( GetListItemChangesResponseGetListItemChangesResult getListItemChangesResult) { Site.Assert.IsNotNull(getListItemChangesResult, "The getListItemChangesResult must be not null."); // Verify R1845 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 1845, @"[The schema of GetListItemChanges is defined as:]" + @"<wsdl:operation name=""GetListItemChanges"">" + @" <wsdl:input message=""GetListItemChangesSoapIn"" />" + @" <wsdl:output message=""GetListItemChangesSoapOut"" />" + @"</wsdl:operation>"); // Verify R628 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 628, @"[In GetListItemChanges operation] [If the protocol client sends a " + "GetListItemChangesSoapIn request message] the protocol server responds " + "with a GetListItemChangesSoapOut response message."); // Verify R1850 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 1850, @"[GetListItemChangesSoapOut]The SOAP Body contains a " + "GetListItemChangesResponse element."); // Ensure the SOAP result is de-serialized successfully. Site.Assume.IsNotNull(getListItemChangesResult, "The result of GetListItemChanges operation must not be null."); // Verify R1856 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 1856, @"[The schema of GetListItemChangesResponse is defined as:] " + @"<s:element minOccurs=""0"" maxOccurs=""1"" name=""GetListItemChangesResult"">" + @" <s:complexType mixed=""true"">" + @" <s:sequence>" + @" <s:element name=""GetListItemChangesResult"">" + @" <s:complexType>" + @" <s:sequence>" + @" <s:element name=""listitems"" >" + @" <s:complexType mixed=""true"" >" + @" <s:sequence>" + @" <s:any /> " + @" </s:sequence>" + @" <s:Attribute name=""TimeStamp"" type=""s:string""/>" + @" </s:complexType>" + @" </s:element>" + @" </s:sequence>" + @" </s:complexType>" + @" </s:element>" + @" </s:sequence>" + @" </s:complexType>" + @"</s:element>"); // Verify R1857 // When the index of the <s:schema> element is equal to -1, which // means the element is excluded, then the following requirement can be captured this.Site.Assert.IsNotNull(getListItemChangesResult.listitems, "listitems element should not be null."); // There can be a maximum of two rs:data elements if (null != getListItemChangesResult.listitems.data && getListItemChangesResult.listitems.data.Length <= 2) { bool isunExpectedelementExisting = false; foreach (DataDefinition dataElemt in getListItemChangesResult.listitems.data) { if (null != dataElemt.Any) { XmlNode[] rowdatas = dataElemt.Any; // verify whether exiting a "<s:schema>" under listitems element isunExpectedelementExisting = rowdatas.Any(founder => (founder.OuterXml.IndexOf( "<s:schema>", StringComparison.OrdinalIgnoreCase) >= 0)); } if (isunExpectedelementExisting) { break; } } // if there is no "<s:schema>" element existing, capture R1587 Site.CaptureRequirementIfIsFalse( isunExpectedelementExisting, 1857, @"[GetListItemChangesResponse]GetListItemChangesResult: This protocol server " + "response included in the listitems element is modeled on the Microsoft ADO " + "2.6 Persistence format [MS-PRSTFR], excluding the <s:schema> element."); } // Verify R2163 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 2163, @"[In GetListItemChanges operation] [In GetListItemChangesResponse element]" + "The listitems element includes attributes describing the namespaces for the " + "ADO 2.6 Persistence format."); // Verify R1858 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 1858, @"[GetListItemChangesResponse] listitems contains an inner element named " + "rs:data, which is of type DataDefinition."); // Verify R1859 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured DateTime dt = new DateTime(); bool isVerifyR1859 = DateTime.TryParse(getListItemChangesResult.listitems.TimeStamp, CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt); Site.CaptureRequirementIfIsTrue( isVerifyR1859, 1859, @"[GetListItemChangesResponse]The TimeStamp attribute is a string that contains the " + "date in Coordinated Universal Time (UTC) of the request to the protocol server."); // Verify R1860 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 1860, @"[GetListItemChangesResponse]There can be a maximum of two rs:data elements."); // Verify R1864 // The response have been received successfully, then the following requirement can be captured. // If the response is not received and parsed successfully, the test case will fail before this requirement is captured Site.CaptureRequirement( 1864, @"[GetListItemChangesResponse]Note that set of fields returned by the method is " + "restricted by the viewField parameter."); }
/// <summary> /// A method used to verify the response of GetListItemChanges operation whether contain at least one rs:data structure item under "listitems" element. If the response does not contain any rs:data item under "listitems" element, this method will throw Assert exception. /// </summary> /// <param name="listitemChangesRes">A parameter represents the response of GetListItemChangesSinceToken operation which expected to contain zrow data structure under "listitems" element.</param> protected void VerifyContainZrowDataStructure(GetListItemChangesResponseGetListItemChangesResult listitemChangesRes) { if (null == listitemChangesRes) { throw new ArgumentNullException("listitemChangesRes"); } this.Site.Assert.IsNotNull( listitemChangesRes.listitems.data, "The response of GetListItemChanges operation should contain [zrow] data structure under [listitems] element."); this.Site.Assert.IsTrue( listitemChangesRes.listitems.data.Length > 0, "The response of GetListItemChanges operation should contain at least one rs:data element."); // There can be a maximum of two rs:data elements. The first rs:data element contains all the inserted and updated list items that have occurred subsequent to the specified since parameter. The second rs:data element contains all of the list items currently in the list. this.Site.Assert.IsTrue( listitemChangesRes.listitems.data.Length <= 2, "The response of GetListItemChanges operation should contain maximum of two rs:data elements."); }