Beispiel #1
0
        public void Retry_Attempts_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();

            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Throws(new WebException(null, WebExceptionStatus.Timeout));
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            responseMock = new Mock <HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            webRequest         = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request  = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.GetResponse();

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
Beispiel #2
0
        public void Redirect_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();

            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.Found);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection {
                { "Location", "test://localhost/sdata/invoices/redirect" }
            });
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            responseMock = new Mock <HttpWebResponse>();
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            webRequest         = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request  = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.GetResponse();

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(response.Location, Is.EqualTo("test://localhost/sdata/invoices/redirect"));
        }
Beispiel #3
0
        public void Multipart_Space_File_Only_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();
            var content      = new MemoryStream();

            requestMock.Setup(x => x.GetRequestStream()).Returns(content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post)
            {
                Files = { new AttachedFile("text/plain", "hel lo.txt", new MemoryStream(Encoding.UTF8.GetBytes("world"))) }
            };
            var response = request.GetResponse();
            var text     = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/related;"));
            Assert.That(text, Is.StringContaining("attachment; filename=\"hel lo.txt\""));
            Assert.That(text, Is.StringContaining("world"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
Beispiel #4
0
        public void Async_Multipart_FormData_Only_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();
            var content      = new MemoryStream();

            SetupGetRequestStreamAsync(requestMock, content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post)
            {
                Form = { { "id", "123" } }
            };
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));
            var text     = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/form-data;"));
            Assert.That(text, Is.StringContaining("inline; name=id"));
            Assert.That(text, Is.StringContaining("123"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
Beispiel #5
0
        public void Async_Retry_Attempts_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();

            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            const WebExceptionStatus status =
#if PCL || NETFX_CORE || SILVERLIGHT
                WebExceptionStatus.ConnectFailure;
#else
                WebExceptionStatus.Timeout;
#endif
            SetupGetResponseAsync(requestMock, new WebException(null, status));
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            responseMock = new Mock <HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            webRequest         = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request  = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
Beispiel #6
0
        public void Async_Multipart_Unicode_File_Only_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();
            var content      = new MemoryStream();

            SetupGetRequestStreamAsync(requestMock, content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post)
            {
                Files = { new AttachedFile("text/plain", "\x65b0\x65e5\x9244\x4f4f\x91d1.txt", new MemoryStream(Encoding.UTF8.GetBytes("world"))) }
            };
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));
            var text     = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/related;"));
            Assert.That(text, Is.StringContaining("attachment; filename*=utf-8''%E6%96%B0%E6%97%A5%E9%89%84%E4%BD%8F%E9%87%91.txt"));
            Assert.That(text, Is.StringContaining("world"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
Beispiel #7
0
        public void Async_Multipart_Mixed_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();
            var content      = new MemoryStream();

            SetupGetRequestStreamAsync(requestMock, content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post, "main content")
            {
                Form  = { { "id", "123" } },
                Files = { new AttachedFile("text/plain", "hello.txt", new MemoryStream(Encoding.UTF8.GetBytes("world"))) }
            };
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));
            var text     = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/related;"));
            Assert.That(text, Is.StringContaining("main content"));
            Assert.That(text, Is.StringContaining("inline; name=id"));
            Assert.That(text, Is.StringContaining("123"));
            Assert.That(text, Is.StringContaining("attachment; filename=\"hello.txt\""));
            Assert.That(text, Is.StringContaining("world"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
        private static Task <T> ExecuteAsync <T>(SDataRequest request, Func <SDataResponse, T> createResults, CancellationToken cancel)
        {
            var cancelScope = cancel.Register(request.Abort);

            return(Task.Factory
                   .FromAsync <SDataResponse>(request.BeginGetResponse, request.EndGetResponse, null)
                   .ContinueWith(task =>
            {
                try
                {
                    return createResults(task.Result);
                }
                catch (SDataException ex)
                {
                    if (ex.Status == WebExceptionStatus.RequestCanceled)
                    {
                        cancel.ThrowIfCancellationRequested();
                    }
                    if (cancel.IsCancellationRequested)
                    {
                        throw new TaskCanceledException(ex.Message, ex);
                    }
                    throw;
                }
                finally
                {
                    cancelScope.Dispose();
                }
            }, cancel));
        }
Beispiel #9
0
        public void Async_Redirect_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();

            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.Found);
            var headers = new WebHeaderCollection();

            headers["Location"] = "test://localhost/sdata/invoices/redirect";
            responseMock.Setup(x => x.Headers).Returns(headers);
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            responseMock = new Mock <HttpWebResponse>();
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            SetupGetResponseAsync(requestMock, responseMock.Object);
            webRequest         = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request  = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(response.Location, Is.EqualTo("test://localhost/sdata/invoices/redirect"));
        }
Beispiel #10
0
        static commodityFeedEntry GetCommodity(string productName, int productCount)
        {
            // Look up the first commodity (product) record
            string url = dataSourceTest + "commodities";

            SDataUri commodityUri = new SDataUri(url);

            commodityUri.Count = productCount;

            SDataRequest commodityRequest = new SDataRequest(commodityUri.Uri);

            commodityRequest.Username = username;
            commodityRequest.Password = password;

            commodityFeed commodities = new commodityFeed();

            commodityRequest.RequestFeed <commodityFeedEntry>(commodities);

            // If we found a record return it
            if (commodityRequest.IsStatusValidForVerb && commodities.Entries != null && commodities.Entries.Count > 0)

            {
                foreach (commodityFeedEntry commodity in commodities.Entries)
                {
                    if (commodity.name.Equals(productName, StringComparison.InvariantCultureIgnoreCase))
                    {
                        Console.WriteLine(string.Format("name: {0}", commodity.name));
                        Console.WriteLine(string.Format("name: {0}", commodity.UUID));
                        return(commodity);
                    }
                    else
                    {
                        continue;
                    }
                }

                Console.ReadKey();
                return(null);
            }

            else
            {
                // There was a problem
                Console.WriteLine("Commodity lookup failed. Response was {0}", commodityRequest.HttpStatusCode.ToString());
                if (commodityRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in commodityRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                }
                Console.ReadLine();

                return(null);
            }
        }
Beispiel #11
0
        public void ReadAsync(string url, object userState)
        {
            Guard.ArgumentNotNull(url, "url");

            var operation = new RequestOperation(HttpMethod.Get);
            var request   = new SDataRequest(url, operation)
            {
                UserName  = UserName,
                Password  = Password,
                Timeout   = Timeout,
                Cookies   = Cookies,
                UserAgent = UserAgent
            };

            request.BeginGetResponse(
                asyncResult =>
            {
                try
                {
                    var response = request.EndGetResponse(asyncResult);

                    if (ReadCompleted != null)
                    {
                        var content = response.Content;

                        if (content is string && response.ContentType == MediaType.Xml)
                        {
                            try
                            {
                                content = ReadSchema(response);
                            }
                            catch (XmlException)
                            {
                            }
                            catch (InvalidOperationException)
                            {
                            }
                        }

                        ReadCompleted(this, new ReadCompletedEventArgs(content, null, false, userState));
                    }
                }
                catch (SDataClientException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    if (ReadCompleted != null)
                    {
                        ReadCompleted(this, new ReadCompletedEventArgs(null, ex, false, userState));
                    }
                }
            }, null);
        }
Beispiel #12
0
        public static void GetFeed()
        {
            SDataRequest    request = new SDataRequest(new Uri("http://my.feedprovider.com:5493/sdata/application/feedname"));
            bankAccountFeed feed    = new bankAccountFeed();

            request.RequestFeed(feed);

            foreach (bankAccountFeedEntry entry in feed.Entries)
            {
                System.Diagnostics.Debug.WriteLine(entry.Title);
            }
        }
Beispiel #13
0
        static taxCodeFeedEntry GetTaxCode(string productCode, int productCount)
        {
            // Look up the tax code record
            string taxUrl = dataSourceTest + "taxcodes";


            SDataUri taxCodeUri = new SDataUri(taxUrl);

            //  taxCodeUri.Where =  "reference eq 'T1'";
            taxCodeUri.Count = 2;


            SDataRequest taxcodeRequest = new SDataRequest(taxCodeUri.Uri);

            taxcodeRequest.Username = username;
            taxcodeRequest.Password = password;
            // taxcodeRequest.Password = "******";


            taxCodeFeed taxcodes = new taxCodeFeed();

            taxcodeRequest.RequestFeed <taxCodeFeedEntry>(taxcodes);

            // If we found a customer record return it
            if (taxcodeRequest.IsStatusValidForVerb && taxcodes.Entries != null && taxcodes.Entries.Count > 0)
            {
                if (productCode.Equals(taxcodes.Entries[0].reference))
                {
                    return(taxcodes.Entries[0]);
                }
                else
                {
                    return(taxcodes.Entries[1]);
                }
            }

            else
            {
                // There was a problem
                Console.WriteLine("Tax code lookup failed. Response was {0}", taxcodeRequest.HttpStatusCode.ToString());
                if (taxcodeRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in taxcodeRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                }


                return(null);
            }
        }
Beispiel #14
0
        protected virtual ISDataResponse ExecuteRequest(string url, RequestOperation operation, params MediaType[] accept)
        {
            var request = new SDataRequest(url, operation)
            {
                Accept    = accept,
                UserName  = UserName,
                Password  = Password,
                Timeout   = Timeout,
                Cookies   = Cookies,
                UserAgent = UserAgent
            };

            return(request.GetResponse());
        }
Beispiel #15
0
        public void Async_Simple_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();

            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

#if !PCL && !SILVERLIGHT
            var proxy = new WebProxy("test://dummy");
#endif
            var cookies     = new CookieContainer();
            var credentials = new NetworkCredential("admin", "");
            var request     = new SDataRequest("test://localhost/sdata/invoices")
            {
                ETag = "abc123",
#if !PCL && !NETFX_CORE && !SILVERLIGHT
                Timeout   = 123,
                UserAgent = "test agent",
#endif
#if !PCL && !SILVERLIGHT
                Proxy = proxy,
#endif
                Accept      = new[] { MediaType.Text, MediaType.Xml },
                Cookies     = cookies,
                Credentials = credentials
            };
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));

#if !PCL && !NETFX_CORE && !SILVERLIGHT
            Assert.That(webRequest.Timeout, Is.EqualTo(123));
            Assert.That(webRequest.UserAgent, Is.EqualTo("test agent"));
#endif
#if !PCL && !SILVERLIGHT
            Assert.That(webRequest.Proxy, Is.EqualTo(proxy));
#endif
            Assert.That(webRequest.Accept, Is.EqualTo("text/plain,application/xml"));
            Assert.That(webRequest.CookieContainer, Is.EqualTo(cookies));
            Assert.That(webRequest.Credentials, Is.EqualTo(credentials));
            Assert.That(webRequest.Headers[HttpRequestHeader.IfNoneMatch], Is.EqualTo("abc123"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(response.Content, Is.Null);
        }
        /// <summary>
        /// This method performs the translation from the Linq-Expression into the SData-Request. The request passed in here is a bl
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="request"></param>
        internal List<SDataRequest> TranslateExpression(Expression expression, ISDataService sdataService)
        {
            //Find in Statement to be able to split it
            List<SDataRequest> result = new List<SDataRequest>();

            while (_currentInIteration == 0 || (_inStatement != null && _inStatement.Count > _currentInIteration))
            {
                _request = new SDataRequest(sdataService);

                TranslateExpressionInternal(expression);

                result.Add(_request);
                _currentInIteration++;
            }
            return result;
        }
Beispiel #17
0
        static tradingAccountFeedEntry GetCustomer(string pass)
        {
            // Look up the first customer record
            Sage.Common.Syndication.SDataUri accountUri = new Sage.Common.Syndication.SDataUri();
            accountUri.BuildLocalPath("Accounts50", "GCRM", "-", "tradingAccounts");
            accountUri.Where = "customerSupplierFlag eq 'Customer'";
            accountUri.Count = 1;

            SDataRequest accountRequest = new SDataRequest(accountUri.Uri);

            accountRequest.AllowPromptForCredentials = false;
            accountRequest.Username = "******";
            accountRequest.Password = pass;

            tradingAccountFeed accounts = new tradingAccountFeed();

            accountRequest.RequestFeed <tradingAccountFeedEntry>(accounts);

            // If we found a customer record return it
            if (accountRequest.IsStatusValidForVerb && accounts.Entries != null && accounts.Entries.Count > 0)
            {
                return(accounts.Entries[0]);
            }
            else
            {
                MessageBox.Show("Wrong password!!! Error");
                // There was a problem
                Console.WriteLine("Account lookup failed. Response was {0}", accountRequest.HttpStatusCode.ToString());
                if (accountRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in accountRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                }

                return(null);
            }
        }
        public void Async_Multipart_FormData_Only_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            var content = new MemoryStream();
            SetupGetRequestStreamAsync(requestMock, content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post) {Form = {{"id", "123"}}};
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));
            var text = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/form-data;"));
            Assert.That(text, Is.StringContaining("inline; name=id"));
            Assert.That(text, Is.StringContaining("123"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
        public void Async_Multipart_File_Only_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            var content = new MemoryStream();
            SetupGetRequestStreamAsync(requestMock, content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post) {Files = {new AttachedFile("text/plain", "hello.txt", new MemoryStream(Encoding.UTF8.GetBytes("world")))}};
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));
            var text = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/related;"));
            Assert.That(text, Is.StringContaining("attachment; filename=\"hello.txt\""));
            Assert.That(text, Is.StringContaining("world"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
Beispiel #20
0
        public void Async_Text_Content_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();
            var content      = new MemoryStream();

            SetupGetRequestStreamAsync(requestMock, content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request  = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post, "hello");
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(content.ToArray(), Is.EqualTo(Encoding.UTF8.GetBytes("hello")));
        }
Beispiel #21
0
        public void Async_UseHttpMethodOverride_Test()
        {
            var requestMock = new Mock <HttpWebRequest> {
                CallBase = true
            };
            var responseMock = new Mock <HttpWebResponse>();

            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;

            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Put)
            {
                UseHttpMethodOverride = true
            };

            request.EndGetResponse(request.BeginGetResponse(null, null));

            Assert.That(webRequest.Headers["X-HTTP-Method-Override"], Is.EqualTo("PUT"));
        }
Beispiel #22
0
        static taxCodeFeedEntry GetTaxCode(string pass)
        {
            // Look up the tax code record
            Sage.Common.Syndication.SDataUri taxCodeUri = new Sage.Common.Syndication.SDataUri();
            taxCodeUri.BuildLocalPath("Accounts50", "GCRM", "-", "taxCodes");
            taxCodeUri.Where = "reference eq 'T1'";

            SDataRequest taxcodeRequest = new SDataRequest(taxCodeUri.Uri);

            taxcodeRequest.Username = "******";
            taxcodeRequest.Password = pass;

            taxCodeFeed taxcodes = new taxCodeFeed();

            taxcodeRequest.RequestFeed <taxCodeFeedEntry>(taxcodes);

            // If we found a customer record return it
            if (taxcodeRequest.IsStatusValidForVerb && taxcodes.Entries != null && taxcodes.Entries.Count > 0)
            {
                return(taxcodes.Entries[0]);
            }
            else
            {
                // There was a problem
                Console.WriteLine("Tax code lookup failed. Response was {0}", taxcodeRequest.HttpStatusCode.ToString());
                if (taxcodeRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in taxcodeRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                }

                return(null);
            }
        }
Beispiel #23
0
        static commodityFeedEntry GetCommodity(string pass)
        {
            // Look up the first commodity (product) record
            Sage.Common.Syndication.SDataUri commodityUri = new Sage.Common.Syndication.SDataUri();
            commodityUri.BuildLocalPath("Accounts50", "GCRM", "-", "commodities");
            commodityUri.Count = 1;

            SDataRequest commodityRequest = new SDataRequest(commodityUri.Uri);

            commodityRequest.Username = "******";
            commodityRequest.Password = pass;

            commodityFeed commodities = new commodityFeed();

            commodityRequest.RequestFeed <commodityFeedEntry>(commodities);

            // If we found a record return it
            if (commodityRequest.IsStatusValidForVerb && commodities.Entries != null && commodities.Entries.Count > 0)
            {
                return(commodities.Entries[0]);
            }
            else
            {
                // There was a problem
                Console.WriteLine("Commodity lookup failed. Response was {0}", commodityRequest.HttpStatusCode.ToString());
                if (commodityRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in commodityRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                }

                return(null);
            }
        }
Beispiel #24
0
        public static void CreateSalesInvoice(string compId, int companyCount, int productCount, List <Product> orderList)
        {
            salesInvoiceFeedEntry salesInvoice = new salesInvoiceFeedEntry();

            salesInvoice.salesInvoiceLines = new salesInvoiceLineFeed();
            // Find a customer to associate with the new sales invoice
            salesInvoice.tradingAccount = GetCustomer(compId, companyCount);

            if (salesInvoice.tradingAccount == null)
            {
                // No customer record means we can go no further
                Console.WriteLine("Unable to find a customer record");
                Console.ReadKey(true);
                Console.ReadLine();
                return;
            }


            foreach (Product product in orderList)
            {
                // Lookup a commodity to use on the new sales invoice
                commodityFeedEntry commodity = GetCommodity(product.Name, productCount);
                if (commodity == null)
                {
                    // No commodity record means we go no further
                    Console.WriteLine("Unable to find a commodity record");
                    Console.ReadKey(true);
                    Console.ReadLine();
                    return;
                }

                commodityFeedEntry commodityReference = new commodityFeedEntry();
                commodityReference.UUID = commodity.UUID;

                taxCodeFeedEntry taxCode = GetTaxCode();
                if (taxCode == null)
                {
                    // No record means we go no further
                    Console.WriteLine("Unable to find a tax code record");
                    Console.ReadKey(true);
                    Console.ReadLine();
                    return;
                }

                taxCodeFeedEntry taxReference = new taxCodeFeedEntry();
                taxReference.UUID     = taxCode.UUID;
                salesInvoice.taxCodes = new taxCodeFeed();
                salesInvoice.taxCodes.Entries.Add(taxReference);

                // Create a new sale invoice line using the commodity we just looked up
                salesInvoiceLineFeedEntry orderLine = new salesInvoiceLineFeedEntry();
                orderLine.type        = "Standard";
                orderLine.text        = commodity.description;
                orderLine.commodity   = commodityReference;
                orderLine.quantity    = Convert.ToDecimal(product.Quantity);
                orderLine.actualPrice = Convert.ToDecimal(product.ListPrice);
                orderLine.netTotal    = orderLine.quantity * orderLine.actualPrice;

                orderLine.taxCodes = new taxCodeFeed();
                orderLine.taxCodes.Entries.Add(taxReference);

                // Associate the lines with our invoice

                salesInvoice.salesInvoiceLines.Entries.Add(orderLine);
            }

            // Now we have constructed our new invoice we can submit it using the HTTP POST verb
            //string url = "http://localhost:5495/sdata/accounts50/GCRM/-/salesInvoices";
            //string url = "http://dewsburypc1:5495/sdata/accounts50/GCRM/-/salesInvoices";
            string   url             = dataSourceTest + "salesInvoices";
            SDataUri salesInvoiceUri = new SDataUri(url);

            SDataRequest invoiceRequest = new SDataRequest(salesInvoiceUri.Uri, salesInvoice, Sage.Integration.Messaging.Model.RequestVerb.POST);

            invoiceRequest.Username = username;
            invoiceRequest.Password = password;

            // IF successful the POST operation will provide us with a the newly created sales invoice
            salesInvoiceFeedEntry savedSalesInvoice = new salesInvoiceFeedEntry();

            invoiceRequest.RequestFeedEntry <salesInvoiceFeedEntry>(savedSalesInvoice);


            if (invoiceRequest.IsStatusValidForVerb)
            {
                Console.WriteLine(string.Format("Successfully created sales invoice {0}", savedSalesInvoice.reference));
                Console.ReadLine();
            }
            else
            {
                // There was a problem
                Console.WriteLine("Create failed. Response was {0}", invoiceRequest.HttpStatusCode.ToString());
                if (invoiceRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in invoiceRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                    Console.ReadLine();
                }
            }
        }
Beispiel #25
0
        static tradingAccountFeedEntry GetCustomer(string companyId, int companyCount)
        {
            // Look up the first customer record
            // Sage.Common.Syndication.SDataUri accountUri = new Sage.Common.Syndication.SDataUri();
            string customerUrl = dataSourceTest + "tradingaccounts";

            SDataUri accountUri = new SDataUri(customerUrl);

            accountUri.Where = "customerSupplierFlag eq 'Customer'";
            accountUri.Count = companyCount;

            SDataRequest accountRequest = new SDataRequest(accountUri.Uri);

            accountRequest.AllowPromptForCredentials = false;
            accountRequest.Username = username;
            accountRequest.Password = password;

            tradingAccountFeed accounts = new tradingAccountFeed();

            accountRequest.RequestFeed <tradingAccountFeedEntry>(accounts);

            // If we found a customer record return it
            if (accountRequest.IsStatusValidForVerb && accounts.Entries != null && accounts.Entries.Count > 0)
            {
                foreach (tradingAccountFeedEntry account in accounts.Entries)
                {
                    //  Console.WriteLine(account.Id);
                    Console.WriteLine(account.reference);
                    // Console.WriteLine(string.Format(account.reference2));

                    if (account.reference.Equals(companyId, StringComparison.InvariantCultureIgnoreCase))
                    {
                        Console.WriteLine(string.Format("name: {0}", account.Id));
                        Console.WriteLine(string.Format("name: {0}", account.UUID));
                        return(account);
                    }
                    else
                    {
                        continue;
                    }
                }



                return(null);
            }

            else
            {
                // There was a problem
                Console.WriteLine("Account lookup failed. Response was {0}", accountRequest.HttpStatusCode.ToString());
                if (accountRequest.Diagnoses != null)
                {
                    foreach (Diagnosis diagnosis in accountRequest.Diagnoses)
                    {
                        Console.WriteLine(diagnosis.Message);
                    }
                }
                Console.ReadLine();
                return(null);
            }
        }
Beispiel #26
0
        private void Button1_Click(object sender, EventArgs e)
        {
            if (textBoxPass.Text != "")
            {
                // Create a new instance of a salesInvoice
                salesInvoiceFeedEntry salesInvoice = new salesInvoiceFeedEntry();

                // Find a customer to associate with the new sales invoice
                salesInvoice.tradingAccount = GetCustomer(textBoxPass.Text);

                if (salesInvoice.tradingAccount == null)
                {
                    // No customer record means we can go no further
                    Console.WriteLine("Unable to find a customer record");
                    Console.ReadKey(true);
                    return;
                }
                // Lookup a commodity to use on the new sales invoice
                commodityFeedEntry commodity = GetCommodity(textBoxPass.Text);
                if (commodity == null)
                {
                    // No commodity record means we go no further
                    Console.WriteLine("Unable to find a commodity record");
                    Console.ReadKey(true);
                    return;
                }
                else
                {
                    MessageBox.Show("Password Correct");
                }

                commodityFeedEntry commodityReference = new commodityFeedEntry();
                commodityReference.UUID = commodity.UUID;

                // Lookup a commodity to use on the new sales invoice
                taxCodeFeedEntry taxCode = GetTaxCode(textBoxPass.Text);
                if (taxCode == null)
                {
                    // No record means we go no further
                    Console.WriteLine("Unable to find a tax code record");
                    Console.ReadKey(true);
                    return;
                }

                // Example of creating a historical invoice
                //salesInvoice.date = salesInvoice.taxDate = DateTime.UtcNow.AddDays(-2);

                // NOTE: This example omits the use of tax code for brevity.
                // Not specifying tax codes means that appropriate defaults will be used automatically.
                // However it is strongly recommended that tax codes are explicitly set to ensure expected results
                taxCodeFeedEntry taxReference = new taxCodeFeedEntry();
                taxReference.UUID = taxCode.UUID;

                salesInvoice.taxCodes = new taxCodeFeed();
                salesInvoice.taxCodes.Entries.Add(taxReference);

                salesInvoice.carrierTotalPrice = 100;
                salesInvoice.carrierTaxPrice   = 20;
                salesInvoice.carrierNetPrice   = 80;

                // Create a new sale invoice line using the commodity we just looked up
                salesInvoiceLineFeedEntry orderLine = new salesInvoiceLineFeedEntry();
                orderLine.type       = "Standard";
                orderLine.text       = commodity.description;
                orderLine.commodity  = commodityReference;
                orderLine.quantity   = 2;
                orderLine.netTotal   = 50;
                orderLine.taxTotal   = 10;
                orderLine.grossTotal = 60;
                orderLine.taxCodes   = new taxCodeFeed();
                orderLine.taxCodes.Entries.Add(taxReference);

                // Create another invoice line this time as free text
                salesInvoiceLineFeedEntry freetextOrderLine = new salesInvoiceLineFeedEntry();
                freetextOrderLine.type = "Free Text"; // Equivalent to S1 stock code
                freetextOrderLine.text = textBoxDes.Text;
                try
                {
                    freetextOrderLine.quantity = Convert.ToInt32(textBoxQuan.Text);
                    freetextOrderLine.netTotal = Convert.ToInt32(textBoxPrice.Text);
                }
                catch (FormatException fe)
                {
                    MessageBox.Show("Only Int");
                }
                freetextOrderLine.taxTotal   = 0;
                freetextOrderLine.grossTotal = 0;
                freetextOrderLine.taxCodes   = new taxCodeFeed();
                freetextOrderLine.taxCodes.Entries.Add(taxReference);


                /*
                 * // Create a 3rd invoice line this time as a message
                 * salesInvoiceLineFeedEntry messageOrderLine = new salesInvoiceLineFeedEntry();
                 * messageOrderLine.type = "Commentary"; // Equivalent to M stock code
                 * messageOrderLine.text = "A message line created via Sdata";
                 */



                // Associate the lines with our invoice
                salesInvoice.salesInvoiceLines = new salesInvoiceLineFeed();
                //   salesInvoice.salesInvoiceLines.Entries.Add(orderLine);
                salesInvoice.salesInvoiceLines.Entries.Add(freetextOrderLine);
                //   salesInvoice.salesInvoiceLines.Entries.Add(messageOrderLine);

                // Now we have constructed our new invoice we can submit it using the HTTP POST verb
                Sage.Common.Syndication.SDataUri salesInvoiceUri = new Sage.Common.Syndication.SDataUri();
                salesInvoiceUri.BuildLocalPath("Accounts50", "GCRM", "-", "salesInvoices");

                SDataRequest invoiceRequest = new SDataRequest(salesInvoiceUri.Uri, salesInvoice, Sage.Integration.Messaging.Model.RequestVerb.POST);
                invoiceRequest.Username = "******";
                invoiceRequest.Password = textBoxPass.Text;

                // IF successful the POST operation will provide us with a the newly created sales invoice
                salesInvoiceFeedEntry savedSalesInvoice = new salesInvoiceFeedEntry();
                invoiceRequest.RequestFeedEntry <salesInvoiceFeedEntry>(savedSalesInvoice);

                if (invoiceRequest.IsStatusValidForVerb)
                {
                    Console.WriteLine(string.Format("Successfully created sales invoice {0}", savedSalesInvoice.reference));
                }
                else
                {
                    // There was a problem
                    Console.WriteLine("Create failed. Response was {0}", invoiceRequest.HttpStatusCode.ToString());
                    if (invoiceRequest.Diagnoses != null)
                    {
                        foreach (Diagnosis diagnosis in invoiceRequest.Diagnoses)
                        {
                            Console.WriteLine(diagnosis.Message);
                        }
                    }
                }


                Console.WriteLine("We\'re finished!!!");

                MessageBox.Show("Successfully created sales invoice");
            }
        }
        private void TraceRequest(SDataRequest request)
        {
#if !PCL && !NETFX_CORE && !SILVERLIGHT
            Trace.TraceData(TraceEventType.Information, 0, request);
#endif
        }
        public void UseHttpMethodOverride_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Put)
                {
                    UseHttpMethodOverride = true
                };
            request.GetResponse();

            Assert.That(webRequest.Headers["X-HTTP-Method-Override"], Is.EqualTo("PUT"));
        }
        public void Simple_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var proxy = new WebProxy("test://dummy");
            var cookies = new CookieContainer();
            var credentials = new NetworkCredential("admin", "");
            var request = new SDataRequest("test://localhost/sdata/invoices")
                               {
                                   ETag = "abc123",
                                   Timeout = 123,
                                   UserAgent = "test agent",
                                   Proxy = proxy,
                                   Accept = new[] {MediaType.Text, MediaType.Xml},
                                   Cookies = cookies,
                                   Credentials = credentials
                               };
            var response = request.GetResponse();

            Assert.That(webRequest.Timeout, Is.EqualTo(123));
            Assert.That(webRequest.UserAgent, Is.EqualTo("test agent"));
            Assert.That(webRequest.Proxy, Is.EqualTo(proxy));
            Assert.That(webRequest.Accept, Is.EqualTo("text/plain,application/xml"));
            Assert.That(webRequest.CookieContainer, Is.EqualTo(cookies));
            Assert.That(webRequest.Credentials, Is.EqualTo(credentials));
            Assert.That(webRequest.Headers[HttpRequestHeader.IfNoneMatch], Is.EqualTo("abc123"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(response.Content, Is.Null);
        }
        public void Text_Content_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            var content = new MemoryStream();
            requestMock.Setup(x => x.GetRequestStream()).Returns(content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post, "hello");
            var response = request.GetResponse();

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(content.ToArray(), Is.EqualTo(Encoding.UTF8.GetBytes("hello")));
        }
        public void Retry_Attempts_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Throws(new WebException(null, WebExceptionStatus.Timeout));
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock<HttpWebRequest> {CallBase = true};
            responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.GetResponse();

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
        public void Redirect_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.Found);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection {{"Location", "test://localhost/sdata/invoices/redirect"}});
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock<HttpWebRequest> {CallBase = true};
            responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.GetResponse();

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(response.Location, Is.EqualTo("test://localhost/sdata/invoices/redirect"));
        }
        public void Multipart_Unicode_File_Only_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            var content = new MemoryStream();
            requestMock.Setup(x => x.GetRequestStream()).Returns(content);
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            requestMock.Setup(x => x.GetResponse()).Returns(responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices", HttpMethod.Post) {Files = {new AttachedFile("text/plain", "\x65b0\x65e5\x9244\x4f4f\x91d1.txt", new MemoryStream(Encoding.UTF8.GetBytes("world")))}};
            var response = request.GetResponse();
            var text = Encoding.UTF8.GetString(content.ToArray());

            Assert.That(webRequest.ContentType, Is.StringStarting("multipart/related;"));
            Assert.That(text, Is.StringContaining("attachment; filename*=utf-8''%E6%96%B0%E6%97%A5%E9%89%84%E4%BD%8F%E9%87%91.txt"));
            Assert.That(text, Is.StringContaining("world"));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }
        public void Async_Redirect_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.Found);
            var headers = new WebHeaderCollection();
            headers["Location"] = "test://localhost/sdata/invoices/redirect";
            responseMock.Setup(x => x.Headers).Returns(headers);
            SetupGetResponseAsync(requestMock, responseMock.Object);
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock<HttpWebRequest> {CallBase = true};
            responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            SetupGetResponseAsync(requestMock, responseMock.Object);
            webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
            Assert.That(response.Location, Is.EqualTo("test://localhost/sdata/invoices/redirect"));
        }
        public void Async_Retry_Attempts_Test()
        {
            var requestMock = new Mock<HttpWebRequest> {CallBase = true};
            var responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            const WebExceptionStatus status =
            #if PCL || NETFX_CORE || SILVERLIGHT
                WebExceptionStatus.ConnectFailure;
            #else
                WebExceptionStatus.Timeout;
            #endif
            SetupGetResponseAsync(requestMock, new WebException(null, status));
            var webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            requestMock = new Mock<HttpWebRequest> {CallBase = true};
            responseMock = new Mock<HttpWebResponse>();
            responseMock.Setup(x => x.StatusCode).Returns(HttpStatusCode.NoContent);
            responseMock.Setup(x => x.Headers).Returns(new WebHeaderCollection());
            SetupGetResponseAsync(requestMock, responseMock.Object);
            webRequest = requestMock.Object;
            webRequest.Headers = new WebHeaderCollection();
            _requests.Enqueue(webRequest);

            var request = new SDataRequest("test://localhost/sdata/invoices");
            var response = request.EndGetResponse(request.BeginGetResponse(null, null));

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
        }