コード例 #1
0
        public void ExecuteThrowsExceptionWhenResponseStartedTest()
        {
            var mvcOptions    = new MvcOptions();
            var options       = Substitute.For <IOptions <MvcOptions> >();
            var writerFactory = Substitute.For <IHttpResponseStreamWriterFactory>();
            var loggerFactory = Substitute.For <ILoggerFactory>();

            options.Value.Returns(mvcOptions);

            var formatSelector = new DefaultOutputFormatterSelector(options, loggerFactory);

            var executor = new ObjectResultExecutor(formatSelector, writerFactory, loggerFactory);
            var result   = new ObjectResult(Guid.NewGuid().ToString());
            var context  = Substitute.For <HttpContext>();
            var response = Substitute.For <HttpResponse>();

            response.HasStarted.Returns(true);

            context.Response.Returns(response);

            var sut = new ResultExecutor(executor);

            Func <Task> action = async() => await sut.Execute(context, result).ConfigureAwait(false);

            action.Should().Throw <InvalidOperationException>();
        }
コード例 #2
0
 public ExceptionHandlingMiddleware(
     RequestDelegate next,
     IHostingEnvironment environment,
     ILogger <ExceptionHandlingMiddleware> logger,
     ObjectResultExecutor objectResultExecutor
     )
 {
     _next                 = next;
     _environment          = environment;
     _logger               = logger;
     _objectResultExecutor = objectResultExecutor;
 }
コード例 #3
0
 public ApiErrorHandlerMiddleware(
     RequestDelegate next,
     ILogger <ApiErrorHandlerMiddleware> logger,
     ObjectResultExecutor objectResultExecutor,
     IContextProblemDetectionHandler contextProblemDetectionHandler,
     IExceptionProblemDetectionHandler exceptionProblemDetectionHandler)
 {
     _next   = next;
     _logger = logger;
     _objectResultExecutor             = objectResultExecutor;
     _contextProblemDetectionHandler   = contextProblemDetectionHandler;
     _exceptionProblemDetectionHandler = exceptionProblemDetectionHandler;
 }
コード例 #4
0
        public ApiErrorHandlerMiddleware(
            RequestDelegate next,
            ILoggerFactory loggerFactory,
            ObjectResultExecutor objectResultExecutor)
        {
            _next   = next;
            _logger = loggerFactory.CreateLogger <ApiErrorHandlerMiddleware>();
            _objectResultExecutor = objectResultExecutor;
            var defaultProblemDetectionHandler = new DefaultProblemDetectionHandler(loggerFactory.CreateLogger <DefaultProblemDetectionHandler>());

            _contextProblemDetectionHandler   = defaultProblemDetectionHandler;
            _exceptionProblemDetectionHandler = defaultProblemDetectionHandler;
        }
コード例 #5
0
        private IServiceProvider CreateServices()
        {
            var services = new ServiceCollection();

            services
            .AddEntityFramework()
            .AddInMemoryDatabase();

            services.Add(new ServiceDescriptor(
                             typeof(ILoggerFactory),
                             NullLoggerFactory.Instance));

            services.AddMvc();

            // helper taken from
            // https://github.com/aspnet/Mvc/blob/514054a66db398171d25494d7c0494f134e8f80a/test/Microsoft.AspNet.Mvc.Core.Test/HttpOkObjectResultTest.cs
            // which contains the following setup for ObjectResult testing...

            services.Add(new ServiceDescriptor(
                             typeof(ILogger <ObjectResult>),
                             new Logger <ObjectResult>(NullLoggerFactory.Instance)));

            var optionsAccessor = new OptionsManager <MvcOptions>(Enumerable.Empty <IConfigureOptions <MvcOptions> >());

            optionsAccessor.Value.OutputFormatters.Add(new JsonOutputFormatter());
            services.Add(new ServiceDescriptor(typeof(IOptions <MvcOptions>), optionsAccessor));

            var bindingContext = new ActionBindingContext
            {
                OutputFormatters = optionsAccessor.Value.OutputFormatters,
            };

            var bindingContextAccessor = new ActionBindingContextAccessor
            {
                ActionBindingContext = bindingContext,
            };

            services.Add(new ServiceDescriptor(typeof(IActionBindingContextAccessor), bindingContextAccessor));

            var executor = new ObjectResultExecutor(optionsAccessor,
                                                    bindingContextAccessor,
                                                    new TestHttpResponseStreamWriterFactory(),
                                                    NullLoggerFactory.Instance);

            services.Add(new ServiceDescriptor(typeof(ObjectResultExecutor), executor));

            return(services.BuildServiceProvider());
        }
コード例 #6
0
        public HttpProblemDetailsMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, ObjectResultExecutor objectResultExecutor)
        {
            if (next == null)
            {
                throw new ArgumentNullException(nameof(next));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            if (objectResultExecutor == null)
            {
                throw new ArgumentNullException(nameof(objectResultExecutor));
            }

            _next   = next;
            _logger = loggerFactory.CreateLogger <HttpProblemDetailsMiddleware>();
            _objectResultExecutor = objectResultExecutor;
        }
コード例 #7
0
        public void ExecuteThrowsExceptionWithNullContextTest()
        {
            var mvcOptions = new MvcOptions();
            var options    = Substitute.For <IOptions <MvcOptions> >();

            options.Value.Returns(mvcOptions);

            var writerFactory = Substitute.For <IHttpResponseStreamWriterFactory>();
            var loggerFactory = Substitute.For <ILoggerFactory>();

            var formatSelector = new DefaultOutputFormatterSelector(options, loggerFactory);

            var executor = new ObjectResultExecutor(formatSelector, writerFactory, loggerFactory);
            var result   = new ObjectResult(Guid.NewGuid().ToString());

            var sut = new ResultExecutor(executor);

            Func <Task> action = async() => await sut.Execute(null, result).ConfigureAwait(false);

            action.Should().Throw <ArgumentNullException>();
        }
コード例 #8
0
 private static async Task WriteResponseBodyAsync(HttpContext context, Problem problem, ObjectResultExecutor objectResultExecutor)
 {
     var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());
     var objectResult  = new ObjectResult(problem);
     await objectResultExecutor.ExecuteAsync(actionContext, objectResult);
 }
コード例 #9
0
        public ResultExecutor(ObjectResultExecutor oex)
        {
            Ensure.Any.IsNotNull(oex, nameof(oex));

            _oex = oex;
        }