public static HttpResponseMessage SetBearerTokenAndDuration()
        {
            if (TokenCacher.GetToken("testadmin") != null)
            {
                return(new HttpResponseMessage(HttpStatusCode.OK));
            }

            using (var client = new HttpClient())
            {
                var login = new Dictionary <string, string>
                {
                    { "grant_type", "password" },
                    { "username", "testadmin" },
                    { "password", "gnpla55!" },
                };

                //Act
                var response = client.PostAsync(new Uri(ConfigurationManager.AppSettings["IntegrationTestBaseUrl"] + "token"), new FormUrlEncodedContent(login)).Result;
                if (response.ReasonPhrase != HttpStatusCode.OK.ToString() || !response.IsSuccessStatusCode)
                {
                    return(response);
                }

                //Guid corrId;
                var corrId = response.Headers.GetValues("http-correlation-id").FirstOrDefault();
                if (string.IsNullOrEmpty(corrId))
                {
                    var failedResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        ReasonPhrase = "Missing CorrelationId",
                        StatusCode   = HttpStatusCode.InternalServerError
                    };
                    return(failedResponse);
                }
                var correlationId = Guid.Parse(corrId);
                var tokenDetails  = JsonConvert.DeserializeObject <Dictionary <string, string> >(response.Content.ReadAsStringAsync().Result);
                if (tokenDetails != null && tokenDetails.Any())
                {
                    //var tokenNo = tokenDetails.FirstOrDefault().Value;
                    tokenDetails.TryGetValue("access_token", out _bearerToken);
                    tokenDetails.TryGetValue("expires_in", out _tokenExpiration);
                    tokenDetails.Add("ermsSecurityToken", correlationId.ToString());
                }

                var expirationDate = DateTimeOffset.UtcNow.AddSeconds(Convert.ToDouble(_tokenExpiration));

                TokenCacher.Delete("testadmin");
                TokenCacher.Add("testadmin", _bearerToken, expirationDate);
                TokenCacher.Add("CorrelationId", correlationId, expirationDate);


                return(response);
            }
        }
        public static async Task <CommandResult> GetEntity(string query, string uri)
        {
            var cmdResult   = new CommandResult();
            var bearerToken = TokenCacher.GetToken("testadmin");

            if (bearerToken == null)
            {
                Assert.Fail("Token is not cached");
            }
            string authToken = $"bearer {bearerToken}";

            using (HttpClient client = new HttpClient())
            {
                UriBuilder builder = new UriBuilder(uri)
                {
                    Query = query
                };
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", authToken);

                using (var response = await client.GetAsync(builder.Uri))
                {
                    if (response.ReasonPhrase == HttpStatusCode.OK.ToString() && response.IsSuccessStatusCode)
                    {
                        var asyncReadresult = await response.Content.ReadAsStringAsync();

                        try
                        {
                            JObject jEntity = JObject.Parse(asyncReadresult);

                            cmdResult.OperationException = jEntity.SelectToken("OperationException");
                            cmdResult.Entity             = jEntity;
                            cmdResult.Success            = Convert.ToBoolean(jEntity.SelectToken("Success"));
                            return(cmdResult);
                        }
                        catch (Exception ex)
                        {
                            cmdResult.OperationException = ex;
                            cmdResult.Success            = false;
                            cmdResult.Entity             = asyncReadresult;
                            return(cmdResult);
                        }
                    }
                    else
                    {
                        cmdResult.Entity  = response.ReasonPhrase;
                        cmdResult.Success = false;
                        return(cmdResult);
                    }
                }
            }
        }
        public static async Task <CommandResult> PostHttpRequestKeyValuePairsAsync(string uri, Dictionary <string, string> keyValuePairs = null)
        {
            var cmdResult   = new CommandResult();
            var bearerToken = TokenCacher.GetToken("testadmin");

            if (bearerToken == null)
            {
                Assert.Fail("Token is not cached");
            }

            var authToken = $"bearer {bearerToken}";

            using (var client = new HttpClient())
            {
                var requestMessage = new HttpRequestMessage(new HttpMethod("POST"), ConfigurationManager.AppSettings["IntegrationTestBaseUrl"] + uri);
                requestMessage.Headers.Accept.Clear();
                requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
                requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                requestMessage.Headers.TryAddWithoutValidation("Authorization", authToken);

                if (keyValuePairs != null)
                {
                    requestMessage.Content = new FormUrlEncodedContent(keyValuePairs);
                }


                using (HttpResponseMessage apiResponse = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead))
                {
                    //var apiResponseResult = apiResponse.Content.ReadAsAsync<CommandResult>();
                    //return apiResponseResult.Result;
                    var apiResponseResult = apiResponse.Content.ReadAsStringAsync().Result;
                    try
                    {
                        var jEntity = JObject.Parse(apiResponseResult);
                        cmdResult.OperationException = jEntity.SelectToken("OperationException");
                        cmdResult.Entity             = jEntity;
                        cmdResult.Success            = Convert.ToBoolean(jEntity.SelectToken("Success"));
                        return(cmdResult);
                    }
                    catch (Exception ex)
                    {
                        cmdResult.OperationException = ex;
                        cmdResult.Success            = false;
                        return(cmdResult);
                    }
                }
            }
        }
        public static async Task <CommandResult> PostDataCommandHttpRequestAsync(string uriSuffix, List <DataCommand> dataCommands)
        {
            var cmdResult   = new CommandResult();
            var bearerToken = TokenCacher.GetToken("testadmin");

            if (bearerToken == null)
            {
                Assert.Fail("Token is not cached");
            }

            var authToken = $"bearer {bearerToken}";

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(ConfigurationManager.AppSettings["IntegrationTestBaseUrl"]);

                //HttpRequestMessage requestMessage = new HttpRequestMessage(new HttpMethod("POST"), ConfigurationManager.AppSettings["IntegrationTestBaseUrl"] + uriSuffix);
                //    requestMessage.Headers.Accept.Clear();
                //    requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
                //    requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                //    requestMessage.Headers.TryAddWithoutValidation("Authorization", authToken);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", authToken);
                //var response = client.SendAsync(requestMessage<DataCommand> dataCommand).ContinueWith(postTask => postTask.Result.EnsureSuccessStatusCode());
                var apiResponse = await client.PostAsJsonAsync(uriSuffix, dataCommands).ContinueWith(postTask => postTask.Result.EnsureSuccessStatusCode());

                string apiResponseResult = apiResponse.Content.ReadAsStringAsync().Result;
                try
                {
                    JObject jEntity = JObject.Parse(apiResponseResult);
                    cmdResult.OperationException = jEntity.SelectToken("OperationException");
                    cmdResult.Entity             = jEntity;
                    cmdResult.Success            = Convert.ToBoolean(jEntity.SelectToken("Success"));
                    return(cmdResult);
                }
                catch (Exception ex)
                {
                    cmdResult.OperationException = ex;
                    cmdResult.Success            = false;
                    return(cmdResult);
                }
            }
        }