public async Task HttpStatus500_loads_template()
        {
            var templateRequest = new Mock <IEastSussexGovUKTemplateRequest>();
            var defaultValues   = new Mock <IViewModelDefaultValuesProvider>();

            defaultValues.Setup(x => x.Breadcrumb).Returns(new Mock <IBreadcrumbProvider>().Object);
            var controller = new HttpStatusController(templateRequest.Object, defaultValues.Object, null, null, null, null);

            var action = await controller.Status500();

            templateRequest.Verify(x => x.RequestTemplateHtmlAsync());
        }
        public async Task HttpStatus404_displays_view_if_no_redirect()
        {
            var templateRequest = new Mock <IEastSussexGovUKTemplateRequest>();
            var defaultValues   = new Mock <IViewModelDefaultValuesProvider>();

            defaultValues.Setup(x => x.Breadcrumb).Returns(new Mock <IBreadcrumbProvider>().Object);
            var redirectMatcher = new Mock <IRedirectMatcher>();

            redirectMatcher.Setup(x => x.MatchRedirect(It.IsAny <Uri>())).Returns <Redirect>(null);
            var controller = new HttpStatusController(templateRequest.Object, defaultValues.Object, null, redirectMatcher.Object, null, null);

            controller.ControllerContext.HttpContext = CreateHttpContextFor404Page();

            var actionResult = await controller.Status404();

            Assert.IsType <ViewResult>(actionResult);
        }
        public async Task HttpStatus404_matching_redirect_returns_redirect_result()
        {
            var templateRequest = new Mock <IEastSussexGovUKTemplateRequest>();
            var defaultValues   = new Mock <IViewModelDefaultValuesProvider>();

            defaultValues.Setup(x => x.Breadcrumb).Returns(new Mock <IBreadcrumbProvider>().Object);
            var redirectMatcher = new Mock <IRedirectMatcher>();

            redirectMatcher.Setup(x => x.MatchRedirect(It.IsAny <Uri>())).Returns(new Redirect()
            {
                DestinationUrl = new Uri("https://www.example.org")
            });
            var controller = new HttpStatusController(templateRequest.Object, defaultValues.Object, null, redirectMatcher.Object, null, null);

            controller.ControllerContext.HttpContext = CreateHttpContextFor404Page();

            var actionResult = await controller.Status404();

            Assert.IsType <StatusCodeResult>(actionResult);
        }
        public async Task HttpStatus404_matching_redirect_sets_location_header()
        {
            var templateRequest = new Mock <IEastSussexGovUKTemplateRequest>();
            var defaultValues   = new Mock <IViewModelDefaultValuesProvider>();

            defaultValues.Setup(x => x.Breadcrumb).Returns(new Mock <IBreadcrumbProvider>().Object);
            var redirect = new Redirect()
            {
                DestinationUrl = new Uri("https://www.example.org/")
            };
            var redirectMatcher = new Mock <IRedirectMatcher>();

            redirectMatcher.Setup(x => x.MatchRedirect(It.IsAny <Uri>())).Returns(redirect);
            var controller = new HttpStatusController(templateRequest.Object, defaultValues.Object, null, redirectMatcher.Object, null, null);

            controller.ControllerContext.HttpContext = CreateHttpContextFor404Page();

            var actionResult = await controller.Status404();

            Assert.True(controller.ControllerContext.HttpContext.Response.Headers.Contains(new KeyValuePair <string, StringValues>("Location", "https://www.example.org/")));
        }
        public async Task HttpStatus404_matching_redirect_preserves_querystring()
        {
            var templateRequest = new Mock <IEastSussexGovUKTemplateRequest>();
            var defaultValues   = new Mock <IViewModelDefaultValuesProvider>();

            defaultValues.Setup(x => x.Breadcrumb).Returns(new Mock <IBreadcrumbProvider>().Object);
            var redirect = new Redirect()
            {
                DestinationUrl = new Uri("https://www.example.org")
            };
            var redirectMatcher = new Mock <IRedirectMatcher>();

            redirectMatcher.Setup(x => x.MatchRedirect(It.IsAny <Uri>())).Returns(redirect);
            var queryStringPreserver = new Mock <IPreserveQueryStringHandler>();
            var controller           = new HttpStatusController(templateRequest.Object, defaultValues.Object, null, redirectMatcher.Object, null, queryStringPreserver.Object);

            controller.ControllerContext.HttpContext = CreateHttpContextFor404Page();

            var actionResult = await controller.Status404();

            queryStringPreserver.Verify(x => x.HandleRedirect(redirect));
        }