Example #1
0
        /// <summary>
        /// Gets synchronization information that enables items to be synchronized between a client and a server.
        /// </summary>
        /// <param name="request">A request to the SyncFolderItems operation.</param>
        /// <returns>A response from the SyncFolderItems operation.</returns>
        public SyncFolderItemsResponseType SyncFolderItems(SyncFolderItemsType request)
        {
            if (request == null)
            {
                throw new ArgumentException("The SyncFolderItems request should not be null.");
            }

            SyncFolderItemsResponseType response = this.exchangeServiceBinding.SyncFolderItems(request);

            Site.Assert.IsNotNull(response, "If the operation is successful, the response should not be null.");

            this.VerifySoapVersion();
            this.VerifyTransportType();
            this.VerifySyncFolderItemsResponse(response, this.exchangeServiceBinding.IsSchemaValidated);
            return(response);
        }
        /// <summary>
        /// The capture code of requirements in SyncFolderItems operation.
        /// </summary>
        /// <param name="syncFolderItemsResponse">The response message for SyncFolderItems operation</param>
        /// <param name="isSchemaValidated">A Boolean value indicates the schema validation result, true means the schema is validated, false means the schema is not validated.</param>
        private void VerifySyncFolderItemsResponse(SyncFolderItemsResponseType syncFolderItemsResponse, bool isSchemaValidated)
        {
            // Assert the response is not null
            Site.Assert.IsNotNull(syncFolderItemsResponse, "If the request is successful, the response should not be null.");

            // If only one item is created in test case. The count of items in SyncFolderItems operation response should be one.
            Site.Assert.AreEqual<int>(1, syncFolderItemsResponse.ResponseMessages.Items.Length, "The count of items in SyncFolderItems operation response should be one if only one item is created.");
            SyncFolderItemsResponseMessageType syncFolderItemsResponseMessage = (SyncFolderItemsResponseMessageType)syncFolderItemsResponse.ResponseMessages.Items[0];

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R444");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R444 
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                444,
                @"[In m:SyncFolderItemsResponseMessageType Complex Type] [The schema of ""SyncFolderItemsResponseMessageType"" is:]
                <xs:complexType name=""SyncFolderItemsResponseMessageType"">
                    <xs:complexContent>
                    <xs:extension
                        base=""m:ResponseMessageType""
                    >
                        <xs:sequence>
                        <xs:element name=""SyncState""
                            type=""xs:string""
                            minOccurs=""0""
                            />
                        <xs:element name=""IncludesLastItemInRange""
                            type=""xs:boolean""
                            minOccurs=""0""
                            />
                        <xs:element name=""Changes""
                            type=""t:SyncFolderItemsChangesType""
                            minOccurs=""0""
                            />
                        </xs:sequence>
                    </xs:extension>
                    </xs:complexContent>
                </xs:complexType>");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R51");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R51 
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                51,
                @"[In m:SyncFolderItemsResponseMessageType Complex Type] The SyncFolderItemsResponseMessageType complex type specifies the status and results of a single call to the SyncFolderItems operation (section 3.1.4.2).");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R445");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R445
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                445,
                @"[In m:SyncFolderItemsResponseMessageType Complex Type] The type of SyncState is xs:string ([XMLSCHEMA2]).");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R446");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R446
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                446,
                @"[In m:SyncFolderItemsResponseMessageType Complex Type] The type of IncludesLastItemInRange is xs:boolean ([XMLSCHEMA2]).");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R69");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R69
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                69,
                @"[In m:SyncFolderItemsResponseMessageType Complex Type] The type of Changes is t:SyncFolderItemsChangesType (section 2.2.4.5).");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R451");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R451
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                451,
                @"[In t:SyncFolderItemsChangesType Complex Type] The SyncFolderItemsChangesType complex type specifies a sequenced array of change types that describe the differences between the items on the client and the items on the server.
                <xs:complexType name=""SyncFolderItemsChangesType"">
                    <xs:sequence>
                    <xs:choice
                        maxOccurs=""unbounded""
                        minOccurs=""0""
                    >
                        <xs:element name=""Create""
                        type=""t:SyncFolderItemsCreateOrUpdateType""
                        />
                        <xs:element name=""Update""
                        type=""t:SyncFolderItemsCreateOrUpdateType""
                        />
                        <xs:element name=""Delete""
                        type=""t:SyncFolderItemsDeleteType""
                        />
                        <xs:element name=""ReadFlagChange""
                        type=""t:SyncFolderItemsReadFlagType""
                        />
                    </xs:choice>
                    </xs:sequence>
                </xs:complexType>");

            if (null != syncFolderItemsResponseMessage.Changes && null != syncFolderItemsResponseMessage.Changes.Items)
            {
                // Verify the type of Create or Update.
                foreach (ItemsChoiceType1 itemsElementName in syncFolderItemsResponseMessage.Changes.ItemsElementName)
                {
                    if (itemsElementName == ItemsChoiceType1.Create)
                    {
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R130");

                        // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R130
                        Site.CaptureRequirementIfIsTrue(
                            isSchemaValidated,
                            130,
                            @"[In t:SyncFolderItemsChangesType Complex Type] The type of Create is t:SyncFolderItemsCreateOrUpdateType (section 3.1.4.2.3.3).");
                    }
                    else if (itemsElementName == ItemsChoiceType1.Update)
                    {
                        // Add the debug information
                        Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R452");

                        // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R452
                        Site.CaptureRequirementIfIsTrue(
                            isSchemaValidated,
                            452,
                            @"[In t:SyncFolderItemsChangesType Complex Type] The type of Update is t:SyncFolderItemsCreateOrUpdateType.");
                    }

                    foreach (object item in syncFolderItemsResponseMessage.Changes.Items)
                    {
                        if (item.GetType() == typeof(SyncFolderItemsCreateOrUpdateType))
                        {
                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R453");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R453
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                453,
                                @"[In t:SyncFolderItemsCreateOrUpdateType Complex Type] The SyncFolderItemsCreateOrUpdateType complex type specifies a single item to create or update in the client data store. 
                        <xs:complexType name=""SyncFolderItemsCreateOrUpdateType"">
                            <xs:choice>
                            <xs:element name=""Item""
                                type=""t:ItemType""
                                />
                            <xs:element name=""Message""
                                type=""t:MessageType""
                                />
                            <xs:element name=""CalendarItem""
                                type=""t:CalendarItemType""
                                />
                            <xs:element name=""Contact""
                                type=""t:ContactItemType""
                                />
                            <xs:element name=""DistributionList""
                                type=""t:DistributionListType""
                                />
                            <xs:element name=""MeetingMessage""
                                type=""t:MeetingMessageType""
                                />
                            <xs:element name=""MeetingRequest""
                                type=""t:MeetingRequestMessageType""
                                />
                            <xs:element name=""MeetingResponse""
                                type=""t:MeetingResponseMessageType""
                                />
                            <xs:element name=""MeetingCancellation""
                                type=""t:MeetingCancellationMessageType""
                                />
                            <xs:element name=""Task""
                                type=""t:TaskType""
                                />
                            <xs:element name=""PostItem""
                                type=""t:PostItemType""
                                />
                            <xs:element name=""RoleMember"" 
                                type=""t:RoleMemberItemType""
                                />
                            <xs:element name=""Network"" 
                                type=""t:NetworkItemType""
                                />
                            <xs:element name=""Person""
                                 type=""t:AbchPersonItemType""
                                />
                            <xs:element name=""Booking""
                               type=""t:BookingItemType""
                                />
                            </xs:choice>
                        </xs:complexType>");
                        }
                        else if (item.GetType() == typeof(SyncFolderItemsDeleteType))
                        {
                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R133");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R133
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                133,
                                @"[In t:SyncFolderItemsChangesType Complex Type] The type of Delete is t:SyncFolderItemsDeleteType (section 3.1.4.2.3.4).");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R183");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R183
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                183,
                                @"[In t:SyncFolderItemsDeleteType Complex Type] The type of ItemId is t:ItemIdType ([MS-OXWSCORE] section 2.2.4.25).");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R454");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R454
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                454,
                                @"[In t:SyncFolderItemsDeleteType Complex Type] The SyncFolderItemsDeleteType complex type specifies an item to delete from the client message store.
                        <xs:complexType name=""SyncFolderItemsDeleteType"">
                          <xs:sequence>
                            <xs:element name=""ItemId""
                              type=""t:ItemIdType""
                             />
                          </xs:sequence>
                        </xs:complexType>");
                        }
                        else if (item.GetType() == typeof(SyncFolderItemsReadFlagType))
                        {
                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R135");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R135
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                135,
                                @"[In t:SyncFolderItemsChangesType Complex Type] The type of ReadFlagChange is t:SyncFolderItemsReadFlagType (section 3.1.4.2.3.5).");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R455");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R455
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                455,
                                @"[In t:SyncFolderItemsReadFlagType Complex Type] The SyncFolderItemsReadFlagType complex type specifies whether an item on the server has been read. 
                        <xs:complexType name=""SyncFolderItemsReadFlagType"">
                            <xs:sequence>
                            <xs:element name=""ItemID""
                                type=""t:ItemIdType""
                                />
                            <xs:element name=""IsRead""
                                type=""xs:boolean""
                                />
                            </xs:sequence>
                        </xs:complexType>");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R456");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R456
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                456,
                                @"[In t:SyncFolderItemsReadFlagType Complex Type] The type of  IsRead is xs:boolean ([XMLSCHEMA2]).");

                            // Add the debug information
                            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R193");

                            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R193
                            Site.CaptureRequirementIfIsTrue(
                                isSchemaValidated,
                                193,
                                @"[In t:SyncFolderItemsReadFlagType Complex Type] The type of ItemID is t:ItemIdType ([MS-OXWSCORE] section 2.2.4.25).");
                        }
                    }
                }
            }

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R468");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R468
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                468,
                @"[In SyncFolderItems] The following is the WSDL port type specification of the SyncFolderItems operation.
                <wsdl:operation name=""SyncFolderItems"">
                     <wsdl:input message=""tns:SyncFolderItemsSoapIn"" />
                     <wsdl:output message=""tns:SyncFolderItemsSoapOut"" />
                </wsdl:operation>");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R469");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R469
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                469,
                @"[In SyncFolderItems] The following is the WSDL binding specification of the SyncFolderItems operation.
                <wsdl:operation name=""SyncFolderItems"">
                   <soap:operation soapAction=""http://schemas.microsoft.com/exchange/services/2006/messages/SyncFolderItems"" />
                   <wsdl:input>
                      <soap:header message=""tns:SyncFolderItemsSoapIn"" part=""Impersonation"" use=""literal""></soap:header>
                      <soap:header message=""tns:SyncFolderItemsSoapIn"" part=""MailboxCulture"" use=""literal""/>
                      <soap:header message=""tns:SyncFolderItemsSoapIn"" part=""RequestVersion"" use=""literal""/>
                      <soap:body parts=""request"" use=""literal"" />
                   </wsdl:input>
                   <wsdl:output>
                      <soap:body parts=""SyncFolderItemsResult"" use=""literal"" />
                      <soap:header message=""tns:SyncFolderItemsSoapOut"" part=""ServerVersion"" use=""literal""/>
                   </wsdl:output>
                </wsdl:operation>");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R473");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R473
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                473,
                @"[In m:SyncFolderItemsResponseType Complex Type] [The schema of ""SyncFolderItemsResponseType"" is:]
                <xs:complexType name=""SyncFolderItemsResponseType"">
                  <xs:complexContent>
                    <xs:extension
                      base=""m:BaseResponseMessageType""
                     />
                  </xs:complexContent>
                </xs:complexType>");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R477");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R477
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                477,
                @"[In SyncFolderItemsResponse Element] The SyncFolderItemsResponse element specifies the response message for the SyncFolderItems operation. <xs:element name=""SyncFolderItemsResponse""
                  type=""m:SyncFolderItemsResponseType""
                 />");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R480");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R480
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                480,
                @"[In tns:SyncFolderItemsSoapOut] The SyncFolderItemsSoapOut WSDL message specifies the response from the SyncFoldersItems operation.
                <wsdl:message name=""SyncFolderItemsSoapOut"">
                   <wsdl:part name=""SyncFolderItemsResult"" element=""tns:SyncFolderItemsResponse"" />
                   <wsdl:part name=""ServerVersion"" element=""t:ServerVersionInfo""/>
                </wsdl:message>");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R437");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R437
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                437,
                @"[In tns:SyncFolderItemsSoapOut] The Element/type of SyncFolderItemsResult is tns:SyncFolderItemsResponse (section 3.1.4.2.2.2).");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R438");

            // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R438
            Site.CaptureRequirementIfIsTrue(
                isSchemaValidated,
                438,
                @"[In tns:SyncFolderItemsSoapOut] [The part name SyncFolderItemsResult] specifies the SOAP body of the response to a SyncFolderItems operation request.");

            if (this.exchangeServiceBinding.ServerVersionInfoValue != null)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R439");

                // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R439
                Site.CaptureRequirementIfIsTrue(
                    isSchemaValidated,
                    439,
                    @"[In tns:SyncFolderItemsSoapOut] The Element/type of ServerVersion is t:ServerVersionInfo ([MS-OXWSCDATA] section 2.2.3.12).");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSSYNC_R440");

                // Verify MS-OXWSSYNC requirement: MS-OXWSSYNC_R440
                Site.CaptureRequirementIfIsTrue(
                    isSchemaValidated,
                    440,
                    @"[In tns:SyncFolderItemsSoapOut] [The part name ServerVersion] specifies a SOAP header that identifies the server version for the response.");
            }

            // Verify the requirements in MS-OXWSCDATA.
            this.VerifyRequirementOfOXWSCDATA(syncFolderItemsResponseMessage, isSchemaValidated);
        }