public void DisplayPostTest()
        {
            IRepository <Post> postRepo = new SimpleRepository <Post>(new InMemoryRepositoryDataSource <Post>(new List <Post> {
                new Post {
                    Status = PostStatus.Published,
                    Path   = "2013/04/10/some-other-post",
                    Posted = new DateTime(2013, 4, 10),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                },
                new Post {
                    Status = PostStatus.Published,
                    Path   = "2013/04/14/some-post",
                    Posted = new DateTime(2013, 4, 14),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                }
            }));

            var mockVisitLoggerService = new Mock <IVisitLoggerService>();

            PostController sut    = new PostController(postRepo, mockVisitLoggerService.Object, _blogRepo, _mockHttpContext.Object);
            var            result = (ViewResult)sut.Display("2013/04/14/some-post");

            Assert.IsNotNull(result);
            var model = result.Model as PostModel;

            Assert.IsNotNull(model);

            Assert.AreEqual(new DateTime(2013, 4, 14), model.Posted);
        }
        public void DisplayPostContentTest()
        {
            IRepository <Post> postRepo = new SimpleRepository <Post>(new InMemoryRepositoryDataSource <Post>(new List <Post> {
                new Post {
                    Status = PostStatus.Published,
                    Path   = "2013/04/10/some-other-post",
                    Posted = new DateTime(2013, 4, 10),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                },
                new Post {
                    Title            = "Test Title",
                    DraftTitle       = "Draft Title",
                    Body             = "Test Body",
                    DraftBody        = "Draft Title",
                    Description      = "Test Description",
                    DraftDescription = "Draft Description",
                    Status           = PostStatus.Published,
                    Path             = "2013/04/14/some-post",
                    Posted           = new DateTime(2013, 4, 14),
                    Author           = new User {
                        Email = "*****@*****.**"
                    },
                    BlogId = 1
                }
            }));

            var mockVisitLoggerService = new Mock <IVisitLoggerService>();

            PostController sut    = new PostController(postRepo, mockVisitLoggerService.Object, _blogRepo, _mockHttpContext.Object);
            var            result = (ViewResult)sut.Display("2013/04/14/some-post");

            Assert.IsNotNull(result);
            var model = result.Model as PostModel;

            Assert.IsNotNull(model);
            var md = new MarkdownDeep.Markdown();

            Assert.AreEqual("Test Title", model.Title);
            Assert.AreEqual(md.Transform("Test Body"), model.Body);
            Assert.AreEqual("Test Description", model.Description);
        }
        public void DisplayPostAuthorDetailsTest()
        {
            IRepository <Post> postRepo = new SimpleRepository <Post>(new InMemoryRepositoryDataSource <Post>(new List <Post> {
                new Post {
                    Status = PostStatus.Published,
                    Path   = "2013/04/10/some-other-post",
                    Posted = new DateTime(2013, 4, 10),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                },
                new Post {
                    Status = PostStatus.Published,
                    Path   = "2013/04/14/some-post",
                    Posted = new DateTime(2013, 4, 14),
                    Author = new User {
                        Id = 1,
                        GooglePlusProfileUrl = "https://plus.google.com/u/0/1234567890",
                        Email     = "*****@*****.**",
                        FirstName = "Joe",
                        LastName  = "Bloggs"
                    },
                    BlogId = 1
                }
            }));

            var mockVisitLoggerService = new Mock <IVisitLoggerService>();

            PostController sut    = new PostController(postRepo, mockVisitLoggerService.Object, _blogRepo, _mockHttpContext.Object);
            var            result = (ViewResult)sut.Display("2013/04/14/some-post");

            Assert.IsNotNull(result);
            var model = result.Model as PostModel;

            Assert.IsNotNull(model);

            Assert.AreEqual("Joe Bloggs", model.Author.Name);
            Assert.AreEqual("*****@*****.**".GravitarUrlFromEmail(), model.Author.GravatarUrl);
            Assert.AreEqual("https://plus.google.com/u/0/1234567890", model.Author.GooglePlusProfileUrl);
        }
        public void DisplayPostNavigationTest()
        {
            IRepository <Post> postRepo = new SimpleRepository <Post>(new InMemoryRepositoryDataSource <Post>(new List <Post> {
                new Post {
                    Status = PostStatus.Published,
                    Title  = "some-other-post",
                    Path   = "2013/04/9/some-other-post",
                    Posted = new DateTime(2013, 4, 9),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                },
                new Post {
                    Status = PostStatus.Published,
                    Title  = "some-other-post2",
                    Path   = "2013/04/10/some-other-post2",
                    Posted = new DateTime(2013, 4, 10),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                },
                new Post {
                    Canonical = "http://blog.con/2013/04/14/canonical",
                    Status    = PostStatus.Published,
                    Title     = "some-post",
                    Path      = "2013/04/14/some-post",
                    Posted    = new DateTime(2013, 4, 14),
                    Author    = new User {
                        Email = "*****@*****.**"
                    },
                    BlogId = 1
                },
                new Post {
                    Status = PostStatus.Published,
                    Title  = "some-other-post3",
                    Path   = "2013/04/15/some-other-post3",
                    Posted = new DateTime(2013, 4, 15),
                    Author = new User {
                        Email = ""
                    },
                    BlogId = 1
                },
            }));

            var mockVisitLoggerService = new Mock <IVisitLoggerService>();

            PostController sut    = new PostController(postRepo, mockVisitLoggerService.Object, _blogRepo, _mockHttpContext.Object);
            var            result = (ViewResult)sut.Display("2013/04/14/some-post");

            Assert.IsNotNull(result);
            var model = result.Model as PostModel;

            Assert.IsNotNull(model);

            Assert.AreEqual("http://blog.con/2013/04/14/canonical", model.CanonicalUrl);

            Assert.AreEqual(new DateTime(2013, 4, 15), model.NextPost.Date);
            Assert.AreEqual("2013/04/15/some-other-post3", model.NextPost.Link);
            Assert.AreEqual("some-other-post3", model.NextPost.Title);

            Assert.AreEqual(new DateTime(2013, 4, 10), model.PreviousPost.Date);
            Assert.AreEqual("2013/04/10/some-other-post2", model.PreviousPost.Link);
            Assert.AreEqual("some-other-post2", model.PreviousPost.Title);

            Assert.AreEqual(4, model.OtherPosts.Count());

            Assert.AreEqual("2013/04/15/some-other-post3", model.OtherPosts[0].Link);
            Assert.AreEqual("2013/04/14/some-post", model.OtherPosts[1].Link);
            Assert.AreEqual("2013/04/10/some-other-post2", model.OtherPosts[2].Link);
            Assert.AreEqual("2013/04/9/some-other-post", model.OtherPosts[3].Link);

            Assert.IsFalse(model.OtherPosts[0].IsCurrentPost);
            Assert.IsTrue(model.OtherPosts[1].IsCurrentPost);
            Assert.IsFalse(model.OtherPosts[2].IsCurrentPost);
            Assert.IsFalse(model.OtherPosts[3].IsCurrentPost);

            Assert.AreEqual("some-other-post3", model.OtherPosts[0].Title);
            Assert.AreEqual("some-post", model.OtherPosts[1].Title);
            Assert.AreEqual("some-other-post2", model.OtherPosts[2].Title);
            Assert.AreEqual("some-other-post", model.OtherPosts[3].Title);
        }