private void Assert_FetchStreamResponseAsync_Can_Handle_Request(
            HttpStatusCode expectedHttpStatusCode,
            int expectedErrorCode,
            string expectedErrorMessage,
            int expectedRequestRetryCount)
        {
            var port = 40000;

            var requestHandlers = new List <MockHttpHandler>()
            {
                new MockHttpHandler(string.Empty, (request, response, prm) =>
                {
                    response.StatusCode        = (int)expectedHttpStatusCode;
                    response.StatusDescription = "Did something go wrong?!";
                    response.ContentType       = "application/json";

                    return(@"{""error"":{ ""code"":" + expectedErrorCode + @",""message"":""" + expectedErrorMessage + @"""}}");
                })
            };

            using (new MockServer(port, requestHandlers))
            {
                var reponse = AbstractRemoteDataService.FetchStreamResponseAsync($"http://localhost:{port}", PoeSessionId, expectedRequestRetryCount, 1000).Result;

                Assert.True(reponse.StatusCode == expectedHttpStatusCode);
                Assert.True(reponse.Error != null);
                Assert.True(reponse.Error.Code == expectedErrorCode);
                Assert.True(reponse.Error.Message == expectedErrorMessage);
                Assert.True(reponse.RequestRetryCount == expectedRequestRetryCount);
            }
        }
        public void FetchStreamResponseAsync_With_Invalid_Content_Throws()
        {
            var port = 40000;

            var requestHandlers = new List <MockHttpHandler>()
            {
                new MockHttpHandler(string.Empty, (request, response, prm) =>
                {
                    response
                    .ContentType("application/json")
                    .StatusCode((int)HttpStatusCode.OK)
                    .Content(@"blablabla");
                })
            };

            using (new MockServer(port, requestHandlers))
            {
                Assert.Throws <AggregateException>(() =>
                {
                    var reponse = AbstractRemoteDataService.FetchDeserializedResponseAsync <PoeDataService.StashTabItemsJsonResponse>($"http://localhost:{port}", PoeSessionId, 8, 1000).Result;
                });
            }
        }