public void Page_web_exception_maps_to_correct_status_code()
        {
            // Arrange
            var request  = new Mock <HttpWebRequest>();
            var response = new Mock <HttpWebResponse>();

            response.SetupGet(x => x.StatusCode).Returns(HttpStatusCode.NotFound);
            var innerException = new Exception("Inner exception");

            var webException = new WebException("Unit test exception", innerException, WebExceptionStatus.ProtocolError, response.Object);

            request.Setup(x => x.GetResponse()).Throws(webException);

            var factory = new Mock <IHttpWebRequestFactory>();

            factory.Setup(x => x.Create(It.IsAny <string>())).Returns(request.Object);

            var pageChecker = new HttpResponsePageChecker(factory.Object);

            // Act
            var validationResult = pageChecker.PageResponseValid("http://baseurl/", new SitecoreItem {
                ExternalUrl = "/test"
            }) as HttpPageCheckResult;

            // Assert
            Assert.IsNotNull(validationResult);
            Assert.IsFalse(validationResult.Success);
            Assert.AreEqual(HttpStatusCode.NotFound, validationResult.StatusCode);
        }
        public void Page_status_code_responses_map_to_page_is_valid(HttpStatusCode statusCode, bool expectedIsValid)
        {
            // Arrange
            var request  = new Mock <HttpWebRequest>();
            var response = new Mock <HttpWebResponse>();

            response.SetupGet(x => x.StatusCode).Returns(statusCode);
            request.Setup(x => x.GetResponse()).Returns(response.Object);

            var factory = new Mock <IHttpWebRequestFactory>();

            factory.Setup(x => x.Create(It.IsAny <string>())).Returns(request.Object);

            var pageChecker = new HttpResponsePageChecker(factory.Object);

            // Act
            var validationResult = pageChecker.PageResponseValid("http://baseurl/", new SitecoreItem {
                ExternalUrl = "/test"
            }) as HttpPageCheckResult;

            // Assert
            Assert.IsNotNull(validationResult);
            Assert.AreEqual(expectedIsValid, validationResult.Success);
            Assert.AreEqual(statusCode, validationResult.StatusCode);
        }