public void Add_ReturnView_UseUrlGenerator()
        {
            //Arrange
            var urlGenerator = MockRepository.GenerateMock<IUrlGenerator>();
            urlGenerator.Expect(x => x.GenerateUrl("aboutus")).Return("aboutus/the-customer-is-king");
            var controller = new PageController { RavenSession = _documentStore.OpenSession(), UrlGenerator = urlGenerator};

            //Act
            var result = (PartialViewResult) controller.Add("The Customer is King", "aboutus");
            var model = (PageViewModel) result.Model;

            //Assert
            model.Url.ShouldBe("aboutus/the-customer-is-king");
            model.Title.ShouldBe("The Customer is King");
        }
        public void Save_IsNotValid_DoesNotStore()
        {
            //Arrange
            var controller = new PageController { RavenSession = _documentStore.OpenSession() };
            var viewModel = new PageViewModel { Id = 1, Body = "My page", Url = "about-us/team/managment" };
            controller.ModelState.AddModelError("Body", "Body is too long");

            //Act
            var result = controller.Save(viewModel);
            controller.RavenSession.SaveChanges();

            //Assert
            using (var session = _documentStore.OpenSession())
            {
                var content = session.Load<Page>(1);
                Assert.IsNull(content);
            }
        }
        public void Save_IsNotValid_ReturnsFailureView()
        {
            //Arrange
            var controller = new PageController { RavenSession = _documentStore.OpenSession() };
            var viewModel = new PageViewModel { Id = 1, Body = "My page", Url = "about-us/team/managment" };
            controller.ModelState.AddModelError("Body", "Body is too long");

            //Act
            var result = (PartialViewResult)controller.Save(viewModel);

            //Assert
            result.ViewName.ShouldBe("Failure");
        }
        public void Show_IfNotExists_ReturnsNotFoundView()
        {
            //Arrange
            var controller = new PageController { RavenSession = _documentStore.OpenSession() };

            //Act
            var result = (HttpNotFoundResult)controller.Show("about-us/team/managment");

            //Assert
            Assert.AreEqual(404, result.StatusCode);
        }
        public void Show_IfExists_ReturnsView()
        {
            //Arrange
            StoreSamplePage();

            var controller = new PageController { RavenSession = _documentStore.OpenSession() };

            //Act
            var result = (ViewResult)controller.Show("about-us/team/managment");
            var model = (PageViewModel)result.Model;

            //Assert
            Assert.AreEqual(1, model.Id);
            Assert.AreEqual("My page", model.Body);
            Assert.AreEqual("about-us/team/managment", model.Url);
        }
        public void Save_IsValid_StoresInDatabase()
        {
            //Arrange
            var controller = new PageController { RavenSession = _documentStore.OpenSession() };
            var viewModel = new PageViewModel { Id = 1, Body = "My page", Url = "about-us/team/managment" };

            //Act
            controller.Save(viewModel);
            controller.RavenSession.SaveChanges();

            //Assert
            using (var session = _documentStore.OpenSession())
            {
                var page = session.Load<Page>(1);
                Assert.AreEqual("My page", page.Body);
                Assert.AreEqual("about-us/team/managment", page.Path);
            }
        }
        public void Save_IsValid_ReturnsSuccessView()
        {
            //Arrange
            var controller = new PageController { RavenSession = _documentStore.OpenSession() };
            var viewModel = new PageViewModel { Id = 1, Body = "My page", Url = "about-us/team/managment" };

            //Act
            var result = (PartialViewResult)controller.Save(viewModel);

            //Assert
            result.ViewName.ShouldBe("Success");
        }