public GetApiAsyncTests()
        {
            _url        = "http://url.url/url";
            _httpClient = new Mock <IHttpClientHandler>(MockBehavior.Strict);
            _httpClient.Setup(x => x.GetAsync(_url)).ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent("[ 1 ]"),
            });

            _helper = new ApiAccessHelper(_httpClient.Object);
        }
        //wallet:withdrawals:read
        public ActionResult <string> GetListWithdraws(string currency, int offset = 0, int limit = 8)
        {
            try
            {
                if (string.IsNullOrEmpty(currency))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.PARAM_INVALID));
                }

                if (!ApiAccessHelper.ValidateCurrency(currency))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.PARAM_INVALID));
                }

                var apiKeyModel = (ApiKey)RouteData.Values[Requests.KEY_PASS_DATA_API_KEY_MODEL];

                if (string.IsNullOrEmpty(apiKeyModel.Permissions))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.USER_PERMISSION));
                }

                if (!apiKeyModel.Permissions.Contains(Permissions.READ_TRANSACTIONS))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.USER_PERMISSION));
                }

                int numberData = 0;
                var withdraws  = walletBusiness.GetHistory(out numberData, apiKeyModel.UserId, currency,
                                                           offset, limit);

                var data = new ListWithdraws
                {
                    Total            = numberData,
                    ListTransactions = withdraws
                };

                return(new ReturnObject
                {
                    Status = Status.STATUS_SUCCESS,
                    Data = JsonHelper.SerializeObject(data)
                }.ToJson());
            }
            catch (Exception e)
            {
                return(new ReturnObject
                {
                    Status = Status.STATUS_ERROR,
                    Message = e.Message
                }.ToJson());
            }
        }
        //wallet:withdrawals:read
        public ActionResult <string> GetWithdraw(string currency, string id)
        {
            try
            {
                if (string.IsNullOrEmpty(currency) || string.IsNullOrEmpty(id))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.PARAM_INVALID));
                }

                if (!ApiAccessHelper.ValidateCurrency(currency))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.PARAM_INVALID));
                }

                if (!CommonHelper.ValidateId(id))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.PARAM_INVALID));
                }

                var apiKeyModel = (ApiKey)RouteData.Values[Requests.KEY_PASS_DATA_API_KEY_MODEL];

                if (string.IsNullOrEmpty(apiKeyModel.Permissions))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.USER_PERMISSION));
                }

                if (!apiKeyModel.Permissions.Contains(Permissions.READ_TRANSACTIONS))
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.USER_PERMISSION));
                }

                var userInfo = (User)RouteData.Values[Requests.KEY_PASS_DATA_USER_MODEL];

                var dataWithdraw = userBusiness.GetWithdraw(id, currency);

                if (dataWithdraw != null)
                {
                    if (!userInfo.Id.Equals(dataWithdraw.UserId))
                    {
                        return(ApiAccessHelper.CreateDataError(MessageError.DATA_NOT_FOUND));
                    }
                }
                else
                {
                    return(ApiAccessHelper.CreateDataError(MessageError.DATA_NOT_FOUND));
                }

                return(new ReturnObject
                {
                    Status = Status.STATUS_SUCCESS,
                    Data = JsonHelper.SerializeObject(dataWithdraw)
                }.ToJson());
            }
            catch (Exception e)
            {
                return(new ReturnObject
                {
                    Status = Status.STATUS_ERROR,
                    Message = e.Message
                }.ToJson());
            }
        }