public void BeginEndFetchInternalTest()
        {
            var requestProvider = new MockRequestProvider {
                CreateSuspendedRequests = true
            };
            var request = new MockServiceRequest <string>(requestProvider);

            // Request validation is done in the MockSchemaAwareRequestExecutor.
            string       result = null;
            IAsyncResult async  = request.BeginFetchInternal(
                cb => result = request.EndFetch(cb), null, res => request.FetchObject(res.GetResponse()));

            // Test that the operation is not yet completed.
            Assert.IsFalse(async.IsCompleted);
            Assert.IsFalse(async.CompletedSynchronously);
            Assert.IsNotNull(async.AsyncWaitHandle);
            Assert.IsNull(async.AsyncState);

            // Let the async operation continue.
            requestProvider.LastRequest.SuspendAsyncRequest = false;
            if (!async.AsyncWaitHandle.WaitOne(5000))
            {
                Assert.Fail("Async Operation seems to be stuck.");
            }

            // Check the result.
            Assert.IsTrue(async.IsCompleted);
            Assert.AreEqual("FooBar", result);
            Assert.IsFalse(async.CompletedSynchronously);
        }
        public void FetchTest()
        {
            var request = new MockServiceRequest <string>(new MockRequestProvider());

            // Request validation is done in the MockSchemaAwareRequestExecutor.
            Assert.AreEqual("FooBar", request.Fetch());
        }
        public void FetchAsStreamTest()
        {
            var request = new MockServiceRequest <string>(new MockRequestProvider());

            // Request validation is done in the MockSchemaAwareRequestExecutor.
            Assert.IsNotNull(request.FetchAsStream());
        }
        public void UserIpTest()
        {
            var request = new MockServiceRequest <string>(new MockRequestProvider());

            request.UserIp = "FooBar";

            // Confirm that the E-tag and the behavior is passed along.
            MockRequest result = (MockRequest)request.BuildRequest();

            Assert.AreEqual("FooBar", result.UserIp);
        }
        public void ETagTest()
        {
            var request = new MockServiceRequest <string>(new MockRequestProvider());

            request.ETag       = "FooBar";
            request.ETagAction = ETagAction.IfMatch;

            // Confirm that the E-tag and the behavior is passed along.
            MockRequest result = (MockRequest)request.BuildRequest();

            Assert.AreEqual("FooBar", result.ETag);
            Assert.AreEqual(ETagAction.IfMatch, result.ETagAction);
        }
        public void CreateParameterDictionaryTest()
        {
            var request = new MockServiceRequest <string>(new MockRequestProvider());

            request.TestParameterA = 42;
            request.TestParameterB = 43;
            request.TestParameterC = 44;

            IDictionary <string, object> parameters = request.CreateParameterDictionary();

            Assert.AreEqual(2, parameters.Count);
            Assert.AreEqual(42, parameters["testparametera"]);
            Assert.AreEqual(43, parameters["B"]);
        }
        public void ETagTypedBodyTest()
        {
            var mockBody = new Mock <IDirectResponseSchema>();

            mockBody.Setup(b => b.ETag).Returns("FooBar");

            var request = new MockServiceRequest <IDirectResponseSchema>(new MockRequestProvider());

            request.ETagAction = ETagAction.IfMatch;
            request.Body       = mockBody.Object;

            // Confirm that the E-tag and the behavior is passed along.
            MockRequest result = (MockRequest)request.BuildRequest();

            Assert.AreEqual("FooBar", result.ETag);
            Assert.AreEqual(ETagAction.IfMatch, result.ETagAction);
            mockBody.Verify();
        }
        public void FetchAsyncTest()
        {
            var request = new MockServiceRequest <string>(new MockRequestProvider());

            // Request validation is done in the MockSchemaAwareRequestExecutor.
            var wait = new AutoResetEvent(false);

            request.FetchAsync();
            request.FetchAsync((response) =>
            {
                Assert.AreEqual("FooBar", response.GetResult());
                wait.Set();
            });
            if (!wait.WaitOne(5000))
            {
                Assert.Fail("Async-task was not finished.");
            }
        }
        public void BeginEndFetchAsStreamTest()
        {
            var requestProvider = new MockRequestProvider {
                CreateSuspendedRequests = true
            };
            var request = new MockServiceRequest <string>(requestProvider);

            Stream       result = null;
            IAsyncResult async  = request.BeginFetchAsStream(cb => result = request.EndFetchAsStream(cb), null);

            // Check the result.
            Assert.IsFalse(async.AsyncWaitHandle.WaitOne(30));
            Assert.IsFalse(async.IsCompleted);
            requestProvider.LastRequest.SuspendAsyncRequest = false;
            if (!async.AsyncWaitHandle.WaitOne(5000))
            {
                Assert.Fail("Asynchronous Fetch operation seems to be stuck.");
            }
            Assert.IsInstanceOf <MemoryStream>(result);
        }