A class indicates the CompareMIds request type.
Inheritance: AddressBookRequestBodyBase
        /// <summary>
        /// This method is used by the client to compare the position of two objects in an address book container.
        /// </summary>
        /// <param name="compareMIdsRequestBody">The CompareMinIds request type request body.</param>
        /// <returns>The response body of the CompareMinIds request type.</returns>
        public CompareMinIdsResponseBody CompareMinIds(CompareMinIdsRequestBody compareMIdsRequestBody)
        {
            CommonResponse            commonResponse            = this.SendAddressBookRequest(compareMIdsRequestBody, RequestType.CompareMIds);
            CompareMinIdsResponseBody compareMinIdsResponseBody = CompareMinIdsResponseBody.Parse(commonResponse.ResponseBodyRawData);

            this.VerifyComapreMinIdsResponsebody(compareMinIdsResponseBody);

            return(compareMinIdsResponseBody);
        }
        public void MSOXCMAPIHTTP_S02_TC05_CompareMinIds()
        {
            this.CheckMapiHttpIsSupported();

            #region Call Bind request type to established a session context with the address book server.
            this.Bind();
            #endregion

            #region Call DnToMinId request type to map a set of DNs to a set of Minimal Entry IDs.
            // Reserved. The client MUST set this field to 0x00000000 and the server MUST ignore this field.
            uint reserved = 0;
            byte[] auxIn = new byte[] { };
            DNToMinIdRequestBody requestBodyOfDNToMId = new DNToMinIdRequestBody()
            {
                Reserved = reserved,
                HasNames = true,
                Names = new StringArray_r
                {
                    CValues = 2,
                    LppzA = new string[]
                    {
                        this.AdminUserDN,
                        Common.GetConfigurationPropertyValue("GeneralUserEssdn", this.Site)
                    }
                },
                AuxiliaryBuffer = auxIn,
                AuxiliaryBufferSize = (uint)auxIn.Length
            };

            DnToMinIdResponseBody responseBodyOfDNToMinId = this.Adapter.DnToMinId(requestBodyOfDNToMId);
            Site.Assert.AreEqual<uint>(0, responseBodyOfDNToMinId.ErrorCode, "DnToMinId should succeed and 0 is expected to be returned. The returned value is {0}.", responseBodyOfDNToMinId.ErrorCode);
            #endregion

            #region Call CompareMinIds to compare the positions of two objects in an address book container.
            STAT stat = new STAT();
            stat.InitiateStat();
            CompareMinIdsRequestBody compareMinIdsRequestBody = new CompareMinIdsRequestBody()
            {
                // Reserved. The client MUST set this field to 0x00000000 and the server MUST ignore this field.
                Reserved = 0,
                HasState = true,
                State = stat,
                MinimalId1 = responseBodyOfDNToMinId.MinimalIds[0],
                MinimalId2 = responseBodyOfDNToMinId.MinimalIds[1],
                AuxiliaryBuffer = auxIn,
                AuxiliaryBufferSize = (uint)auxIn.Length
            };

            CompareMinIdsResponseBody compareMinIdsResponseBody = this.Adapter.CompareMinIds(compareMinIdsRequestBody);
            Site.Assert.AreEqual<uint>(0, compareMinIdsResponseBody.ErrorCode, "CompareMinIds should succeed and 0 is expected to be returned. The returned value is {0}.", compareMinIdsResponseBody.ErrorCode);

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

            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R372
            // If the position of the object specified by MId1 comes before the position of the object specified by MId2 in the table, the server MUST return a value less than 0; 
            // If the position of the object specified by MId1 comes after the position of the object specified by MId2 in the table, the server MUST return a value greater than 0; 
            // If the position of the object specified by MId1 is the same as the position of the object specified by MId2 in the table, the server MUST return a value of 0.
            // So if the value type of result is integer, R372 is verified. 
            this.Site.CaptureRequirementIfIsInstanceOfType(
                compareMinIdsResponseBody.Result,
                typeof(int),
                372,
                @"[In CompareMinIds Request Type] The CompareMinIds request type is used by the client to compare the positions of two objects in an address book container.");

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

            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R2111
            this.Site.CaptureRequirementIfIsTrue(
                compareMinIdsResponseBody.Result < 0,
                2111,
                @"[In CompareMinIds Request Type Success Response Body] [Result] A value less than 0 (zero): The position of the object specified by the MinimalId1 field of the request body precedes the position of the object specified by the MinimalId2 field.");

            compareMinIdsRequestBody = new CompareMinIdsRequestBody()
            {
                // Reserved. The client MUST set this field to 0x00000000 and the server MUST ignore this field.
                Reserved = 0,
                HasState = true,
                State = stat,
                MinimalId1 = responseBodyOfDNToMinId.MinimalIds[1],
                MinimalId2 = responseBodyOfDNToMinId.MinimalIds[0],
                AuxiliaryBuffer = auxIn,
                AuxiliaryBufferSize = (uint)auxIn.Length
            };

            compareMinIdsResponseBody = this.Adapter.CompareMinIds(compareMinIdsRequestBody);
            Site.Assert.AreEqual<uint>(0, compareMinIdsResponseBody.ErrorCode, "CompareMinIds should succeed and 0 is expected to be returned. The returned value is {0}.", compareMinIdsResponseBody.ErrorCode);

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

            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R2112
            this.Site.CaptureRequirementIfIsTrue(
                compareMinIdsResponseBody.Result > 0,
                2112,
                @"[In CompareMinIds Request Type Success Response Body] [Result] A value greater than 0 (zero): The position of the object specified by the MinimalId1 field of the request body succeeds the position of the object specified by the MinimalId2 field.");

            compareMinIdsRequestBody = new CompareMinIdsRequestBody()
            {
                // Reserved. The client MUST set this field to 0x00000000 and the server MUST ignore this field.
                Reserved = 0,
                HasState = true,
                State = stat,
                MinimalId1 = responseBodyOfDNToMinId.MinimalIds[0],
                MinimalId2 = responseBodyOfDNToMinId.MinimalIds[0],
                AuxiliaryBuffer = auxIn,
                AuxiliaryBufferSize = (uint)auxIn.Length
            };

            compareMinIdsResponseBody = this.Adapter.CompareMinIds(compareMinIdsRequestBody);
            Site.Assert.AreEqual<uint>(0, compareMinIdsResponseBody.ErrorCode, "CompareMinIds should succeed and 0 is expected to be returned. The returned value is {0}.", compareMinIdsResponseBody.ErrorCode);

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

            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R2109
            this.Site.CaptureRequirementIfIsTrue(
                compareMinIdsResponseBody.Result == 0,
                2109,
                @"[In CompareMinIds Request Type Success Response Body] [Result] Value 0 (zero): The position of the object specified by the MinimalId1 field of the request body is the same as the position of the object specified by the MinimalId2 field. ");

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

            // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R2110
            this.Site.CaptureRequirementIfAreEqual<uint>(
                compareMinIdsRequestBody.MinimalId1,
                compareMinIdsRequestBody.MinimalId2,
                2110,
                @"[In CompareMinIds Request Type Success Response Body] [Result] Value 0 (zero): That is, the two fields specify the same object.");
            #endregion

            #region Call CompareMinIds request body with HasState set to false to compare the positions of two objects in an address book container.
            compareMinIdsRequestBody = new CompareMinIdsRequestBody()
            {
                // Reserved. The client MUST set this field to 0x00000000 and the server MUST ignore this field.
                Reserved = 0,
                HasState = false,
                MinimalId1 = responseBodyOfDNToMinId.MinimalIds[0],
                MinimalId2 = responseBodyOfDNToMinId.MinimalIds[1],
                AuxiliaryBuffer = auxIn,
                AuxiliaryBufferSize = (uint)auxIn.Length
            };

            compareMinIdsResponseBody = this.Adapter.CompareMinIds(compareMinIdsRequestBody);
            Site.Assert.AreEqual<uint>(0, compareMinIdsResponseBody.StatusCode, "CompareMinIds should succeed and 0 is expected to be returned. The returned value is {0}.", compareMinIdsResponseBody.StatusCode);
            #endregion

            #region Call the Unbind request type to destroy the session context.
            this.Unbind();
            #endregion
        }
        /// <summary>
        /// This method is used by the client to compare the position of two objects in an address book container.
        /// </summary>
        /// <param name="compareMIdsRequestBody">The CompareMinIds request type request body.</param>
        /// <returns>The response body of the CompareMinIds request type.</returns>
        public CompareMinIdsResponseBody CompareMinIds(CompareMinIdsRequestBody compareMIdsRequestBody)
        {
            CommonResponse commonResponse = this.SendAddressBookRequest(compareMIdsRequestBody, RequestType.CompareMIds);
            CompareMinIdsResponseBody compareMinIdsResponseBody = CompareMinIdsResponseBody.Parse(commonResponse.ResponseBodyRawData);
            this.VerifyComapreMinIdsResponsebody(compareMinIdsResponseBody);
 
            return compareMinIdsResponseBody;
        }