public void CreateCollateralTiesTest()
        {
            string user = "******";
            string pass = "******";
            string bankId = "85";
            string ObligorNumber = "0051606471";
            string Obligation = "0000000042";
            string itemNumber = "";
            string luw = Constants.CREATE_COLL_TIE_LUW_ID;//"L012";
            string batchId = "L01";
            string restartcode = "1392";

            var collateralTiesCommand = new CreateCollateralTieCommand(user, pass, bankId, ObligorNumber, batchId, Obligation, "", "", "", itemNumber, luw, restartcode);

            //input fields
            REQUEST_1392_FIELDS current_specific = new REQUEST_1392_FIELDS
           {
               x1392_EFF_FROM_DATE = "012715",
               x1392_SUPPORT_ITEM = "00018",
               x1392_SUPPORT_OBLIGOR = "0051606471",
               x1392_SUPPORT_TYPE = "500"

           };
            var current_specific_fields = new List<REQUEST_1392_FIELDS>(10);
            current_specific_fields.Add(current_specific);
            current_specific_fields.AddRepeatDefaultValues<REQUEST_1392_FIELDS>(9);
            collateralTiesCommand.CURRENT_SPECIFIC_ITEMS = current_specific_fields;

            var future_specific_fields = new List<REQUEST_1192_FIELDS>(10);
            future_specific_fields.AddRepeatDefaultValues<REQUEST_1192_FIELDS>(10);
            collateralTiesCommand.FUTURE_SPECIFIC_ITEMS = future_specific_fields;

            var task = commandBus.ExecuteAsync(collateralTiesCommand);
            task.GetAwaiter().GetResult();
            Assert.IsTrue(collateralTiesCommand.Errors.Length < 1, collateralTiesCommand.Errors);


        }
        /// <summary>
        /// Validates the collateral tie request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        private bool ValidateCollateralTieRequest(CreateCollateralTieCommand request)
        {
            //Checks
            if ((request.FUTURE_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1192_FIELDS>() && request.CURRENT_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1392_FIELDS>()))
            {
                request.Errors = "Current Specific Items and Future Specific Items both cannot be empty or null";
                return false;
            }
            //NOTE: Need to verify if both Current and Future specific items can be populated at the same time
            if ((!request.FUTURE_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1192_FIELDS>() && !request.CURRENT_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1392_FIELDS>()))
            {
                request.Errors = "Current Specific Items and Future Specific Items both cannot be populated";
                return false;
            }

            else if (!request.FUTURE_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1192_FIELDS>() && request.RestartRequestCode == Constants.CREATE_COLL_TIE_REQCODE_1192)
            {
                request.Errors = String.Format("Future Specific Items requires a RequestRestartCode of {0}", Constants.CREATE_COLL_TIE_REQCODE_1192);
                return false;
            }
            else if (!request.CURRENT_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1392_FIELDS>() && request.RestartRequestCode == Constants.CREATE_COLL_TIE_REQCODE_1392)
            {
                request.Errors = String.Format("Current Specific Items requires a RequestRestartCode of {0}", Constants.CREATE_COLL_TIE_REQCODE_1392);
                return false;
            }

            return true;
        }
        /// <summary>
        /// Creates the collateral tie.
        /// </summary>
        /// <param name="request">The request.</param>
        public void CreateCollateralTie(CreateCollateralTieCommand request)
        {
            ClientContext ctx = GetClientContext(request.User, request.Password);
            //Checks
            if (!ValidateCollateralTieRequest(request))
            {
                return;
            }

            //check for specific counts
            if (!request.FUTURE_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1192_FIELDS>())
            {
                request.FUTURE_SPECIFIC_ITEMS.AddOrTrimExcess<REQUEST_1192_FIELDS>(Constants.CREATE_COLL_TIE_ITEMS_COUNT);
            }
            if (!request.CURRENT_SPECIFIC_ITEMS.IsNullOrEmpty<REQUEST_1392_FIELDS>())
            {
                request.CURRENT_SPECIFIC_ITEMS.AddOrTrimExcess<REQUEST_1392_FIELDS>(Constants.CREATE_COLL_TIE_ITEMS_COUNT);
            }


            var get1192Fields = Array.ConvertAll<REQUEST_1192_FIELDS, CollateralServicesContext.REQUEST_1192_FIELDS>(request.FUTURE_SPECIFIC_ITEMS.ToArray(), delegate(REQUEST_1192_FIELDS output)
            {
                var get1192Field = new CollateralServicesContext.REQUEST_1192_FIELDS()
                {
                    x1192_EFF_FROM_DATE = output.x1192_EFF_FROM_DATE,
                    x1192_SUPPORT_ITEM = output.x1192_SUPPORT_ITEM,
                    x1192_SUPPORT_OBLIGOR = output.x1192_SUPPORT_OBLIGOR,
                    x1192_SUPPORT_TYPE = output.x1192_SUPPORT_TYPE
                };

                return get1192Field;
            });

            var get1392Fields = Array.ConvertAll<REQUEST_1392_FIELDS, CollateralServicesContext.REQUEST_1392_FIELDS>(request.CURRENT_SPECIFIC_ITEMS.ToArray(), delegate(REQUEST_1392_FIELDS output)
            {
                var get1392Field = new CollateralServicesContext.REQUEST_1392_FIELDS()
                {
                    x1392_EFF_FROM_DATE = output.x1392_EFF_FROM_DATE,
                    x1392_SUPPORT_ITEM = output.x1392_SUPPORT_ITEM,
                    x1392_SUPPORT_OBLIGOR = output.x1392_SUPPORT_OBLIGOR,
                    x1392_SUPPORT_TYPE = output.x1392_SUPPORT_TYPE
                };

                return get1392Field;
            });

            CreateCollateralTieInDocument doc = new CreateCollateralTieInDocument
            {
                LUW_BANK = request.BankId,
                LUW_BATCH_ID = request.BatchID,
                LUW_ERROR_MESSAGES = request.Errors,
                LUW_HEADER_FILLER = string.Empty,
                LUW_CALLING_APPL = Constants.LUW_HEADER_CALLING_APPL,
                LUW_ID = request.Luw,
                LUW_ITEM_NBR = request.ItemNumber,
                LUW_LENGTH = request.DataLength,
                LUW_OBLIGATION = request.ObligationNumber,
                LUW_OBLIGOR = request.ObligorNumber,
                LUW_REQUEST_CODE = request.RestartRequestCode,
                SEG_COUNTER = request.Segment,
                FAILING_OCCURS_NUMBER = request.FAILING_OCCURS_NUMBER,
                REQUEST_FAILED_SW = request.REQUEST_FAILED_SW,
                REQUEST_1192_FIELDS = get1192Fields,
                REQUEST_1392_FIELDS = get1392Fields


            };

            try
            {
                srv.CreateCollateralTie(ref doc.LUW_ID,
                                    ref doc.LUW_REQUEST_CODE,
                                    ref doc.LUW_BATCH_ID,
                                    ref doc.LUW_BANK,
                                    ref doc.LUW_OBLIGOR,
                                    ref doc.LUW_OBLIGATION,
                                    ref doc.LUW_ITEM_NBR,
                                    ref doc.SEG_COUNTER,
                                    ref doc.LUW_HEADER_FILLER,
                                    ref doc.LUW_CALLING_APPL,
                                    ref doc.LUW_LENGTH,
                                    ref doc.LUW_ERROR_MESSAGES,
                                    ref doc.REQUEST_FAILED_SW,
                                    ref doc.FAILING_OCCURS_NUMBER,
                                    ref doc.REQUEST_1192_FIELDS,
                                    ref doc.REQUEST_1392_FIELDS,
                                    ref ctx);

                request.Errors = doc.LUW_ERROR_MESSAGES;
                //Note: Need to check if there are any other fields that need to be mapped back to the request
                //object for further operation

            }
            catch (CustomTIException Ex)
            {
                HandleHISException<CreateCollateralTieCommand>(request, Ex, "CreateCollateralTieCommand");
            }
            catch (Exception ee)
            {
                string msg = ee.Message;
                request.Errors = msg;
                throw;
            }

        }