Example #1
0
        public void should_return_null_when_the_collection_is_empty()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);

            context.RouteData = new RouteData();

            var sut    = new RouteDataProvider();
            var result = sut.Collect(context);

            result.Should().BeNull();
        }
Example #2
0
        public void should_not_return_an_empty_collection_when_the_collection_is_empty()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);

            context.ModelState = new Dictionary <string, ModelState>();

            var sut    = new ModelStateProvider();
            var result = sut.Collect(context);

            result.Should().BeNull();
        }
        public void should_include_included_items()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);

            context.ViewBag = new { Id = 3, Title = "Hello world" };

            var sut    = new ViewBagProvider();
            var result = sut.Collect(context);

            result.Property("Id").Should().Be("3");
            result.Property("Title").Should().Be("Hello world");
        }
Example #4
0
        public void should_include_included_items()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);
            var routeData   = new RouteData();

            routeData.DataTokens.Add("MyToken", "Value1");
            routeData.Values.Add("MyValue", "Value2");
            context.RouteData = routeData;

            var sut    = new RouteDataProvider();
            var result = sut.Collect(context);

            result.Property("DataToken[\"MyToken\"]").Should().Be("Value1");
            result.Property("Values[\"MyValue\"]").Should().Be("Value2");
        }
Example #5
0
        public void should_include_included_items()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);
            var tempData    = new TempDataDictionary {
                { "MyToken", "Value1" }, { "MyValue", 20 }
            };

            context.TempData = tempData;

            var sut    = new TempDataProvider();
            var result = sut.Collect(context);

            result.Property("MyToken").Should().Be("Value1");
            result.Property("MyValue").Should().Be("20");
        }
        public void should_include_included_items()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);
            var items       = new NameValueCollection
            {
                { "MyKey", "Value" }
            };

            httpContext.Request.QueryString.Returns(items);

            var sut    = new QueryStringProvider();
            var result = sut.Collect(context);

            result.Property("MyKey").Should().Be("Value");
        }
Example #7
0
        public void should_include_included_items()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);
            var mySession   = new MySession {
                { "MyToken", "Value1" }, { "MyValue", 20 }
            };

            context.HttpContext.Session.Returns(mySession);

            var sut    = new SessionProvider();
            var result = sut.Collect(context);

            result.Property("MyToken").Should().Be("Value1");
            result.Property("MyValue").Should().Be("20");
        }
Example #8
0
        public void should_include_included_items()
        {
            var httpContext = Substitute.For <HttpContextBase>();
            var context     = new AspNetMvcContext(this, new Exception(), httpContext);
            var items       = new Dictionary <string, ModelState>
            {
                { "MyKey", BuildState("Raw", "Attempted", "Failed") },
                { "NoError", BuildState(5, "5", null) }
            };

            context.ModelState = items;

            var sut    = new ModelStateProvider();
            var result = sut.Collect(context);

            result.Property("MyKey.RawValue").Should().Be("Raw");
            result.Property("MyKey.AttemptedValue").Should().Be("Attempted");
            result.Property("MyKey.Error").Should().Be("Failed");
            result.Properties.ContainsKey("NoError.Error").Should().BeFalse();
        }
Example #9
0
        internal static ErrorReportDTO Invoke(object source, ControllerContext filterContext, Exception exception,
                                              IEnumerable <ContextCollectionDTO> extras)
        {
            var context = new AspNetMvcContext(source, exception, filterContext.HttpContext);


            var converter = new ObjectToContextCollectionConverter();

            var items = new List <ContextCollectionDTO>(extras)
            {
                converter.Convert("IsChildAction", filterContext.IsChildAction),
                new ContextCollectionDTO("Controller",
                                         new Dictionary <string, string> {
                    { "FullName", filterContext.Controller.GetType().FullName }
                })
            };

            if (filterContext.Controller == null && source is ControllerBase)
            {
                filterContext.Controller = (ControllerBase)source;
            }

            if (filterContext.Controller != null)
            {
                context.Controller = filterContext.Controller;

                if (filterContext.Controller.TempData != null && filterContext.Controller.TempData.Count > 0)
                {
                    context.TempData = filterContext.Controller.TempData;
                }

                if (filterContext.Controller.ViewBag != null)
                {
                    context.ViewBag = filterContext.Controller.ViewBag;
                }

                if (filterContext.Controller.ViewData != null && filterContext.Controller.ViewData.Count > 0)
                {
                    context.ViewData = filterContext.Controller.ViewData;

                    if (filterContext.Controller.ViewData.ModelState != null)
                    {
                        context.ModelState = filterContext.Controller.ViewData.ModelState;
                    }
                }

                context.Model = filterContext.Controller?.ViewData?.Model;
            }


            if (filterContext.ParentActionViewContext != null)
            {
                items.Add(converter.Convert("ParentActionViewContext", filterContext.ParentActionViewContext));
            }

            if (filterContext.RouteData != null)
            {
                context.RouteData = filterContext.RouteData;
            }

            return(ErrorHttpModule.ExecutePipeline(context, items.ToArray()));
        }
Example #10
0
        /// <summary>
        ///     Do the codeRR collection pipeline.
        /// </summary>
        /// <param name="context">context</param>
        /// <param name="contextCollections">Extras</param>
        public static ErrorReportDTO ExecutePipeline(AspNetMvcContext context, params ContextCollectionDTO[] contextCollections)
        {
            if (
                context.HttpContext.Request.Url.AbsolutePath.IndexOf("/coderr/submit", StringComparison.OrdinalIgnoreCase) !=
                -1)
            {
                ProcessSubmit(context.HttpContext);
                context.HttpContext.Response.Redirect("~/");
                return(null);
            }
            if (context.HttpContext.Items.Contains("CoderrReported"))
            {
                return(null);
            }
            context.HttpContext.Items.Add("CoderrReported", "true");

            if (context.HttpApplication == null)
            {
                var module = context.Reporter as ErrorHttpModule;
                if (module?.Application != null)
                {
                    context.HttpApplication = module.Application;
                }
            }
            if (context.HttpApplication != null)
            {
                if (DisplayErrorPage)
                {
                    context.HttpApplication.Response.Clear();
                }
            }

            var httpCodeIdentifier = new HttpCodeIdentifier(context.HttpApplication, context.Exception);
            var report             = Err.GenerateReport(context);

            if (contextCollections.Any())
            {
                var newList = new List <ContextCollectionDTO>(report.ContextCollections);
                newList.AddRange(contextCollections);
                report.ContextCollections = newList.ToArray();
            }

            // Add http code
            var exceptionCollection = report.ContextCollections.FirstOrDefault(x => x.Name == "ExceptionProperties");

            if (exceptionCollection != null)
            {
                if (!exceptionCollection.Properties.ContainsKey("HttpCode"))
                {
                    exceptionCollection.Properties["HttpCode"] = httpCodeIdentifier.HttpCode.ToString();
                }
            }

            if (!DisplayErrorPage || !Err.Configuration.UserInteraction.AskUserForPermission)
            {
                Err.UploadReport(report);
                if (!DisplayErrorPage)
                {
                    return(report);
                }
            }
            else
            {
                TempData[report.ReportId] = report;
            }

            // Already rendered an error page.
            if (context.HttpContext.Items.Contains("OneTrueHandled"))
            {
                return(report);
            }

            context.HttpContext.Items["OneTrueHandled"] = true;
            var handler = new CustomControllerContext(context.Exception, report.ReportId)
            {
                HttpCode     = httpCodeIdentifier.HttpCode,
                HttpCodeName = httpCodeIdentifier.HttpCodeName
            };

            var ctx = new HttpErrorReporterContext(context.Reporter, context.Exception, context.HttpContext)
            {
                ErrorId            = report.ReportId,
                HttpStatusCode     = handler.HttpCode,
                HttpStatusCodeName = handler.HttpCodeName
            };

            context.HttpContext.Response.StatusCode        = handler.HttpCode;
            context.HttpContext.Response.StatusDescription = handler.HttpCodeName;
            handler.Execute(ctx);
            return(report);
        }