public async Task ExecuteAsync_Throws_IfArgumentTypeIsWrong()
        {
            Func <int, User> retrieveUserMethod            = _controller.RetriveUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor
            {
                MethodInfo = retrieveUserMethod.Method
            };

            _arguments["id"] = new DateTime();

            var exception = await Assert.ThrowsAsync <HttpResponseException>(
                () => actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None)
                );

            Assert.Equal(HttpStatusCode.BadRequest, exception.Response.StatusCode);
            var content = Assert.IsType <ObjectContent <HttpError> >(exception.Response.Content);

            Assert.Equal(
                "The parameters dictionary contains an invalid entry for parameter 'id' for method "
                + "'System.Web.Http.User RetriveUser(Int32)' in 'System.Web.Http.UsersRpcController'. "
                + "The dictionary contains a value of type 'System.DateTime', but the parameter requires a value "
                + "of type 'System.Int32'.",
                ((HttpError)content.Value)["MessageDetail"]
                );
        }
Пример #2
0
        public void ExecuteAsync_IfObjectReturningMethod_ReturnsTaskInstance_Throws()
        {
            Func <object> method = _controller.TaskAsObjectReturningMethod;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = method.Method
            };

            var exception = Assert.Throws <InvalidOperationException>(
                () => actionDescriptor.ExecuteAsync(_context, _arguments).RethrowFaultedTaskException(),
                "The method 'TaskAsObjectReturningMethod' on type 'UsersRpcController' returned a Task instance even though it is not an asynchronous method.");
        }
Пример #3
0
        public void ExecuteAsync_Throws_IfArgumentsIsNull()
        {
            Func <string, string, User>   echoUserMethod   = _controller.EchoUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = echoUserMethod.Method
            };

            Assert.ThrowsArgumentNull(
                () => actionDescriptor.ExecuteAsync(_context, null).RethrowFaultedTaskException(),
                "arguments");
        }
Пример #4
0
        public void ExecuteAsync_Throws_IfContextIsNull()
        {
            Func <string, string, User>   echoUserMethod   = _controller.EchoUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = echoUserMethod.Method
            };

            Assert.ThrowsArgumentNull(
                () => actionDescriptor.ExecuteAsync(null, _arguments),
                "controllerContext");
        }
Пример #5
0
        public async Task ExecuteAsync_Returns_TaskOfNull_ForTaskAction()
        {
            Func <Task> deleteAllUsersMethod = _controller.DeleteAllUsersAsync;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = deleteAllUsersMethod.Method
            };

            object returnValue = await actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None);

            Assert.Null(returnValue);
        }
Пример #6
0
        public void ExecuteAsync_IfTaskReturningMethod_ReturnsWrappedTaskInstance_Throws()
        {
            Func <Task> method = _controller.WrappedTaskReturningMethod;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = method.Method
            };

            var exception = Assert.Throws <InvalidOperationException>(
                () => actionDescriptor.ExecuteAsync(_context, _arguments).RethrowFaultedTaskException(),
                "The method 'WrappedTaskReturningMethod' on type 'UsersRpcController' returned an instance of 'System.Threading.Tasks.Task`1[[System.Threading.Tasks.Task, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'. Make sure to call Unwrap on the returned value to avoid unobserved faulted Task.");
        }
Пример #7
0
        public Task ExecuteAsync_DoesNotCallActionWhenCancelled()
        {
            var cts = new CancellationTokenSource();

            cts.Cancel();
            Action action = () => { throw new NotImplementedException(); };
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = action.Method
            };

            return(Assert.ThrowsAsync <TaskCanceledException>(() => actionDescriptor.ExecuteAsync(_context, _arguments, cts.Token)));
        }
Пример #8
0
        public void ExecuteAsync_Returns_TaskOfNull_ForTaskAction()
        {
            Func <Task> deleteAllUsersMethod = _controller.DeleteAllUsersAsync;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = deleteAllUsersMethod.Method
            };

            Task <object> returnValue = actionDescriptor.ExecuteAsync(_context, _arguments);

            returnValue.WaitUntilCompleted();
            Assert.Null(returnValue.Result);
        }
        public void ExecuteAsync_Returns_TaskOfNull_ForVoidAction()
        {
            Action deleteAllUsersMethod = _controller.DeleteAllUsers;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = deleteAllUsersMethod.Method
            };

            Task <object> returnValue = actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None);

            returnValue.WaitUntilCompleted();
            Assert.Null(returnValue.Result);
        }
Пример #10
0
        public async Task ExecuteAsync_Throws_IfArgumentsIsNull()
        {
            Func <string, string, User>   echoUserMethod   = _controller.EchoUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = echoUserMethod.Method
            };

            await Assert.ThrowsAsync <ArgumentNullException>(
                () => actionDescriptor.ExecuteAsync(_context, null, CancellationToken.None),
                "arguments",
                partialMatch : true);
        }
        public void ExecuteAsync_DoesNotCallActionWhenCancelled()
        {
            var cts = new CancellationTokenSource();

            cts.Cancel();
            Action action = () => { throw new NotImplementedException(); };
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = action.Method
            };

            Task <object> result = actionDescriptor.ExecuteAsync(_context, _arguments, cts.Token);

            result.WaitUntilCompleted();
            Assert.True(result.IsCanceled);
        }
Пример #12
0
        public async Task ExecuteAsync_Returns_Results_ForTaskOfTAction()
        {
            Func <string, string, Task <User> > echoUserMethod   = _controller.EchoUserAsync;
            ReflectedHttpActionDescriptor       actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = echoUserMethod.Method
            };

            _arguments["firstName"] = "test";
            _arguments["lastName"]  = "unit";

            object result = await actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None);

            var returnValue = Assert.IsType <User>(result);

            Assert.Equal("test", returnValue.FirstName);
            Assert.Equal("unit", returnValue.LastName);
        }
Пример #13
0
        public void ExecuteAsync_Returns_Results_ForTaskOfTAction()
        {
            Func <string, string, Task <User> > echoUserMethod   = _controller.EchoUserAsync;
            ReflectedHttpActionDescriptor       actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = echoUserMethod.Method
            };

            _arguments["firstName"] = "test";
            _arguments["lastName"]  = "unit";

            Task <object> result = actionDescriptor.ExecuteAsync(_context, _arguments);

            result.WaitUntilCompleted();
            var returnValue = Assert.IsType <User>(result.Result);

            Assert.Equal("test", returnValue.FirstName);
            Assert.Equal("unit", returnValue.LastName);
        }
Пример #14
0
        public void ExecuteAsync_Throws_IfValueTypeArgumentsIsNull()
        {
            Func <int, User> retrieveUserMethod            = _controller.RetriveUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = retrieveUserMethod.Method
            };

            _arguments["id"] = null;

            var exception = Assert.Throws <HttpResponseException>(
                () => actionDescriptor.ExecuteAsync(_context, _arguments).RethrowFaultedTaskException());

            Assert.Equal(HttpStatusCode.BadRequest, exception.Response.StatusCode);
            var content = Assert.IsType <ObjectContent <string> >(exception.Response.Content);

            Assert.Equal("The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' " +
                         "for method 'System.Web.Http.User RetriveUser(Int32)' in 'System.Web.Http.UsersRpcController'. An optional parameter " +
                         "must be a reference type, a nullable type, or be declared as an optional parameter.",
                         content.Value);
        }
Пример #15
0
        public void ExecuteAsync_Throws_IfArgumentNameIsWrong()
        {
            Func <int, User> retrieveUserMethod            = _controller.RetriveUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor {
                MethodInfo = retrieveUserMethod.Method
            };

            _arguments["otherId"] = 6;

            var exception = Assert.Throws <HttpResponseException>(
                () => actionDescriptor.ExecuteAsync(_context, _arguments).RethrowFaultedTaskException());

            Assert.Equal(HttpStatusCode.BadRequest, exception.Response.StatusCode);
            var content = Assert.IsType <ObjectContent <string> >(exception.Response.Content);

            Assert.Equal("The parameters dictionary does not contain an entry for parameter 'id' of type 'System.Int32' " +
                         "for method 'System.Web.Http.User RetriveUser(Int32)' in 'System.Web.Http.UsersRpcController'. " +
                         "The dictionary must contain an entry for each parameter, including parameters that have null values.",
                         content.Value);
        }
        public void ExecuteAsync_Throws_IfArgumentNameIsWrong()
        {
            Func<int, User> retrieveUserMethod = _controller.RetriveUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = retrieveUserMethod.Method };
            _arguments["otherId"] = 6;

            var exception = Assert.Throws<HttpResponseException>(
                () => actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None).RethrowFaultedTaskException());

            Assert.Equal(HttpStatusCode.BadRequest, exception.Response.StatusCode);
            var content = Assert.IsType<ObjectContent<HttpError>>(exception.Response.Content);
            Assert.Equal("The parameters dictionary does not contain an entry for parameter 'id' of type 'System.Int32' " +
                "for method 'System.Web.Http.User RetriveUser(Int32)' in 'System.Web.Http.UsersRpcController'. " +
                "The dictionary must contain an entry for each parameter, including parameters that have null values.",
                ((HttpError)content.Value)["MessageDetail"]);
        }
        public void ExecuteAsync_Throws_IfArgumentTypeIsWrong()
        {
            Func<int, User> retrieveUserMethod = _controller.RetriveUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = retrieveUserMethod.Method };
            _arguments["id"] = new DateTime();

            var exception = Assert.Throws<HttpResponseException>(
                 () => actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None).RethrowFaultedTaskException());

            Assert.Equal(HttpStatusCode.BadRequest, exception.Response.StatusCode);
            var content = Assert.IsType<ObjectContent<HttpError>>(exception.Response.Content);
            Assert.Equal("The parameters dictionary contains an invalid entry for parameter 'id' for method " +
                "'System.Web.Http.User RetriveUser(Int32)' in 'System.Web.Http.UsersRpcController'. " +
                "The dictionary contains a value of type 'System.DateTime', but the parameter requires a value " +
                "of type 'System.Int32'.",
                ((HttpError)content.Value)["MessageDetail"]);
        }
        public void ExecuteAsync_Throws_IfArgumentsIsNull()
        {
            Func<string, string, User> echoUserMethod = _controller.EchoUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = echoUserMethod.Method };

            Assert.ThrowsArgumentNull(
                () => actionDescriptor.ExecuteAsync(_context, null, CancellationToken.None).RethrowFaultedTaskException(),
                "arguments");
        }
        public void ExecuteAsync_Throws_IfValueTypeArgumentsIsNull()
        {
            Func<int, User> retrieveUserMethod = _controller.RetriveUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = retrieveUserMethod.Method };
            _arguments["id"] = null;

            var exception = Assert.Throws<HttpResponseException>(
                 () => actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None).RethrowFaultedTaskException());

            Assert.Equal(HttpStatusCode.BadRequest, exception.Response.StatusCode);
            var content = Assert.IsType<ObjectContent<HttpError>>(exception.Response.Content);
            Assert.Equal("The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' " +
                "for method 'System.Web.Http.User RetriveUser(Int32)' in 'System.Web.Http.UsersRpcController'. An optional parameter " +
                "must be a reference type, a nullable type, or be declared as an optional parameter.",
                ((HttpError)content.Value)["MessageDetail"]);
        }
        public void ExecuteAsync_Throws_IfContextIsNull()
        {
            Func<string, string, User> echoUserMethod = _controller.EchoUser;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = echoUserMethod.Method };

            Assert.ThrowsArgumentNull(
                () => actionDescriptor.ExecuteAsync(null, _arguments, CancellationToken.None),
                "controllerContext");
        }
        public void ExecuteAsync_Returns_Results_ForTaskOfTAction()
        {
            Func<string, string, Task<User>> echoUserMethod = _controller.EchoUserAsync;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = echoUserMethod.Method };
            _arguments["firstName"] = "test";
            _arguments["lastName"] = "unit";

            Task<object> result = actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None);

            result.WaitUntilCompleted();
            var returnValue = Assert.IsType<User>(result.Result);
            Assert.Equal("test", returnValue.FirstName);
            Assert.Equal("unit", returnValue.LastName);
        }
        public void ExecuteAsync_Returns_TaskOfNull_ForTaskAction()
        {
            Func<Task> deleteAllUsersMethod = _controller.DeleteAllUsersAsync;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = deleteAllUsersMethod.Method };

            Task<object> returnValue = actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None);

            returnValue.WaitUntilCompleted();
            Assert.Null(returnValue.Result);
        }
        public void ExecuteAsync_DoesNotCallActionWhenCancelled()
        {
            var cts = new CancellationTokenSource();
            cts.Cancel();
            Action action = () => { throw new NotImplementedException(); };
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = action.Method };

            Task<object> result = actionDescriptor.ExecuteAsync(_context, _arguments, cts.Token);

            result.WaitUntilCompleted();
            Assert.True(result.IsCanceled);
        }
        public void ExecuteAsync_IfTaskReturningMethod_ReturnsWrappedTaskInstance_Throws()
        {
            Func<Task> method = _controller.WrappedTaskReturningMethod;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = method.Method };

            var exception = Assert.Throws<InvalidOperationException>(
                 () => actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None).RethrowFaultedTaskException(),
                 "The method 'WrappedTaskReturningMethod' on type 'UsersRpcController' returned an instance of 'System.Threading.Tasks.Task`1[[System.Threading.Tasks.Task, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'. Make sure to call Unwrap on the returned value to avoid unobserved faulted Task.");
        }
        public void ExecuteAsync_IfObjectReturningMethod_ReturnsTaskInstance_Throws()
        {
            Func<object> method = _controller.TaskAsObjectReturningMethod;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = method.Method };

            var exception = Assert.Throws<InvalidOperationException>(
                 () => actionDescriptor.ExecuteAsync(_context, _arguments, CancellationToken.None).RethrowFaultedTaskException(),
                 "The method 'TaskAsObjectReturningMethod' on type 'UsersRpcController' returned a Task instance even though it is not an asynchronous method.");
        }
        public void ExecuteAsync_Returns_TaskOfNull_ForVoidAction()
        {
            Action deleteAllUsersMethod = _controller.DeleteAllUsers;
            ReflectedHttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor { MethodInfo = deleteAllUsersMethod.Method };

            Task<object> returnValue = actionDescriptor.ExecuteAsync(_context, _arguments);

            returnValue.WaitUntilCompleted();
            Assert.Null(returnValue.Result);
        }