public void Index_GIVEN_BlogPostRepository_Has_1_BlogSummary_THEN_Sets_BlogSummaryViewModel_To_Have_Same_Values()
        {
            const string title = "Title";
            const string description = "Description";
            var url = new Uri("http://www.jumbleblocks.co.uk/noimage.jpg");
            var publishedDate = DateTime.Now;
            var author = new BlogUser { Forenames = "Authors", Surname = "Name" };

            var blogPosts = new BlogPost[]
            {
                new BlogPost(title, description, "full article", new ImageReference(1, url:url.AbsoluteUri), publishedDate, author)
            };

            var mockedBlogPostRepository = new Mock<IBlogPostRepository>();
            mockedBlogPostRepository.Setup(r => r.GetPosts(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<IEnumerable<string>>())).Returns(blogPosts);
            mockedBlogPostRepository.Setup(r => r.Count).Returns(blogPosts.Length);

            var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object);

            var result = controller.Index() as ViewResult;

            var model = (FrontPageModel)result.Model;
            model.Summaries.First().Title.ShouldEqual(title);
            model.Summaries.First().Description.ShouldEqual(description);
            model.Summaries.First().ImageUrl.ShouldEqual(url);
            model.Summaries.First().PublishedDate.ShouldEqual(publishedDate);
            model.Summaries.First().AuthorsName.ShouldEqual(author.FullName);
        }
        public void BlogPostController_Edit_GIVEN_BlogPostRepository_Contains_BlogPost_With_ID_1_WHEN_blogPostId_Is_1_THEN_Returns_ViewModel_For_BlogPost()
        {
            const int BlogPostId = 1;

            var imageReference = new ImageReference(1, "/noimage.jpg");
            var author = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Blogs" };

            var blogPost = new BlogPost("Test", "This is the description", "Not much in this article", imageReference, DateTime.Now, author);
            blogPost.SetProperty("Id", BlogPostId);
            blogPost.UpdateSeries(new Series { Name = "Series A" });
            blogPost.UpdateTags(new Tag[] { new Tag { Text = "Tag 1" } });

            var mockedBlogPostRepository = new Mock<IBlogPostRepository>();
            mockedBlogPostRepository.Setup(r => r.Load(BlogPostId)).Returns(blogPost);

            var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object);
            var result = controller.Edit(blogPost.Id.Value) as ViewResult;

            result.ShouldNotBeNull();
            result.Model.ShouldBeInstanceOfType(typeof(CreateEditModel));

            var model = (CreateEditModel)result.Model;

            model.BlogPostId.ShouldEqual(blogPost.Id);
            model.PublishedDate.ShouldEqual(blogPost.PublishedDate);
            model.Title.ShouldEqual(blogPost.Title);
            model.Description.ShouldEqual(blogPost.Description);
            model.FullArticle.ShouldEqual(blogPost.FullArticle);
            model.ImageId.ShouldEqual(blogPost.ImageReference.Id.Value);
            model.SeriesName.ShouldEqual(blogPost.Series.Name);
        }
Exemplo n.º 3
0
        public void Ctor_WHEN_author_has_value_THEN_Sets_Author_Property_To_That_Value()
        {
            var author = new BlogUser();

            var post = new BlogPost("a", "b", "c", GetImageReference(), DateTime.Now, author);
            post.Author.ShouldEqual(author);
        }
        public void BlogPostController_List_GIVEN_BlogPost_Has_1_Item_THEN_Returns_1_ArticleListingViewModel_With_Data_From_Post()
        {
            const int BlogPostId = 1;

            var imageReference = new ImageReference(1, "/noimage.jpg");
            var author = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Blogs" };

            var blogPost = new BlogPost("Test", "This is the description", "Not much in this article", imageReference, DateTime.Now, author);
            blogPost.SetProperty("Id", BlogPostId);
            blogPost.UpdateSeries(new Series { Name = "Series A" });
            blogPost.UpdateTags(new Tag[] { new Tag { Text = "Tag 1" } });

            var mockedBlogPostRepository = new Mock<IBlogPostRepository>();

            mockedBlogPostRepository.Setup(r => r.LoadAll()).Returns(new BlogPost[] { blogPost });

            var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object);
            var result = controller.List() as ViewResult;

            result.ShouldNotBeNull();
            result.Model.ShouldBeInstanceOfType(typeof(IEnumerable<BlogPostListingItemModel>));

            var viewModelForPost = ((IEnumerable<BlogPostListingItemModel>)result.Model).First();

            viewModelForPost.BlogPostId.ShouldEqual(blogPost.Id.Value);
            viewModelForPost.Title.ShouldEqual(blogPost.Title);
            viewModelForPost.PublishedDate.ShouldEqual(blogPost.PublishedDate);
            viewModelForPost.AuthorsName.ShouldEqual(blogPost.Author.FullName);
        }
Exemplo n.º 5
0
        public void FullName_WHEN_Forenames_Is_Jonny_AND_Surname_English_THEN_Returns_Jonny_English()
        {
            var blogPostUser = new BlogUser
            {
                Forenames = "Jonny",
                Surname = "English"
            };

            blogPostUser.FullName.ShouldEqual(String.Format("{0} {1}", blogPostUser.Forenames, blogPostUser.Surname));
        }
        public void BlogPostController_Edit_Returns_ViewResult()
        {
            const int BlogPostId = 1;

            var imageReference = new ImageReference(1, "/noimage.jpg");
            var author = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Blogs" };

            var blogPost = new BlogPost("Test", "This is the description", "Not much in this article", imageReference, DateTime.Now, author);
            blogPost.SetProperty("Id", BlogPostId);
            blogPost.UpdateSeries(new Series { Name = "Series A" });
            blogPost.UpdateTags(new Tag[] { new Tag { Text = "Tag 1" } });

            var mockedBlogPostRepository = new Mock<IBlogPostRepository>();

            mockedBlogPostRepository.Setup(r => r.Load(BlogPostId)).Returns(blogPost);

            var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object);

            var result = controller.Edit(1);

            result.ShouldBeInstanceOfType(typeof(ViewResult));
        }
        public void MarkAsDeleted_GIVEN_Author_With_Id_1_Exists_In_AuthorRepository_WHEN_userId_Is_1_THEN_Saves_BlogPost_With_DeletedByUser_As_Author_With_Id_1()
        {
            const int UserId = 1;

            BlogPost savedBlogPost = null;

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            var deletionUser = new BlogUser { Id = UserId, Forenames = "Joe", Surname = "Blogs" };

            var mockedLookupRepository = new Mock<ILookupRepository>();
            mockedLookupRepository.Setup(r => r.LoadForId<BlogUser>(It.IsAny<object>())).Returns(deletionUser);

            var mockedBlogPostRepository = new Mock<IBlogPostRepository>();
            mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())).Callback<BlogPost>(bp => savedBlogPost = bp);

            var blogPostDeleter = new BlogPostDeleter(mockedBlogPostRepository.Object, mockedLookupRepository.Object);

            blogPostDeleter.MarkAsDeleted(post, UserId);

            savedBlogPost.ShouldNotBeNull();
            savedBlogPost.DeletedByUser.ShouldEqual(deletionUser);
        }
        public void BlogPostController_Save_WHEN_viewModel_Has_Id_THEN_Loads_Existing_Article_From_BlogPostRepository_Updates_And_Saves()
        {
            const int BlogPostId = 1;
            const int ImageId = 1;
            const int AuthorId = 1;

            const int OldSeriesId = 1;
            const int NewSeriesId = 2;
            const string NewSeriesName = "Series B";

            const int OldTagId = 1;
            const int NewTagId = 2;

            Series newSeries = new Series{Name = NewSeriesName};
            newSeries.SetProperty(s => s.Id, NewSeriesId);

            Tag oldTag = new Tag { Text = "Tag 1" };
            oldTag.SetProperty(t => t.Id, OldTagId);

            Tag newTag = new Tag { Text = "Tag 2" };
            newTag.SetProperty(t => t.Id, NewTagId);

            BlogPost savedBlogPost = null;

            var imageReference = new ImageReference(ImageId, "/noimage.jpg");
            var author = new BlogUser { Id = AuthorId, Forenames = "Joe", Surname = "Blogs" };

            var blogPost = new BlogPost("Test", "This is the description", "Not much in this article", imageReference, DateTime.Now, author);
            blogPost.SetProperty("Id", BlogPostId);

            var series = new Series { Name = "Series A" };
            series.SetProperty(s => s.Id, OldSeriesId);

            blogPost.UpdateSeries(series);
            blogPost.UpdateTags(new Tag[] { new Tag { Text = "Tag 1" } });

            var mockedBlogPostRepository = new Mock<IBlogPostRepository>();

            mockedBlogPostRepository.Setup(r => r.LoadFullArticle(BlogPostId)).Returns(blogPost).Verifiable();
            mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())).Callback<BlogPost>(bp => savedBlogPost = bp);

            var mockedLookupRepository = MockCreators.CreateMockedLookupRepository();

            mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference);
            mockedLookupRepository.Setup(r => r.LoadForDescription<Series>(It.IsAny<Expression<Func<Series, string>>>(), NewSeriesName)).Returns(newSeries);
            mockedLookupRepository.Setup(r => r.LoadForDescription<Tag>(It.IsAny<Expression<Func<Tag, string>>>(), oldTag.Text)).Returns(oldTag);
            mockedLookupRepository.Setup(r => r.LoadForDescription<Tag>(It.IsAny<Expression<Func<Tag, string>>>(), newTag.Text)).Returns(newTag);

            var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object);

            var updatedBlogPost = new CreateEditModel
            {
                BlogPostId = BlogPostId,
                Description = "A different description",
                FullArticle = "A different Full Article",
                ImageId = ImageId,
                PublishedDate = blogPost.PublishedDate,
                SeriesName = NewSeriesName,
                TagTexts = "Tag 2",
                Title = blogPost.Title
            };

            controller.Save(updatedBlogPost);

            mockedBlogPostRepository.Verify(r => r.LoadFullArticle(BlogPostId), Times.Once());
            savedBlogPost.ShouldNotBeNull();

            savedBlogPost.Id.ShouldEqual(BlogPostId);
            savedBlogPost.Description.ShouldEqual(updatedBlogPost.Description);
            savedBlogPost.FullArticle.ShouldEqual(updatedBlogPost.FullArticle);
            savedBlogPost.ImageReference.ShouldEqual(imageReference);
            savedBlogPost.PublishedDate.ShouldEqual(updatedBlogPost.PublishedDate.Value);
            savedBlogPost.Series.ShouldEqual(newSeries);
            savedBlogPost.Tags.ShouldContain((t) => t.TextEquals(newTag));
        }
Exemplo n.º 9
0
        public void MarkAsDeleted_Sets_DeletedDate_To_Now_And_DeletedByUser_Property_To_deltedByUser_parameter()
        {
            var deletionUser = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Bloggs" };

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(deletionUser);

            post.DeletedDate.ShouldBeWithinLast(new TimeSpan(0, 0, 10));
            post.DeletedByUser.ShouldEqual(deletionUser);
        }
Exemplo n.º 10
0
        public void MarkAsDeleted_GIVEN_Already_Marked_As_Deleted_WHEN_MarkAsDeleted_Called_A_Second_Time_With_A_Differnt_User_THEN_Does_Not_Update_DeletedByUser()
        {
            TimeSpan waitBetweenUpdates = new TimeSpan(0, 0, 0, 0, 500);

            var deletionUser1 = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Bloggs" };
            var deletionUser2 = new BlogUser { Id = 2, Forenames = "Scrooge", Surname = "Bloggs" };

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(deletionUser1);
            post.MarkAsDeleted(deletionUser2);

            post.DeletedByUser.ShouldEqual(deletionUser1);
        }
Exemplo n.º 11
0
        public void MarkAsDeleted_GIVEN_Already_Marked_As_Deleted_WHEN_MarkAsDeleted_Called_A_Second_Time_THEN_Does_Not_Update_DeletedDate()
        {
            TimeSpan waitBetweenUpdates = new TimeSpan(0, 0, 0, 0, 100);

            var deletionUser = new BlogUser { Id = 1, Forenames = "Joe", Surname = "Bloggs" };

            var imageReference1 = GetImageReference();
            var post = new BlogPost("ABC", "description", "fullText", imageReference1, DateTime.Now, new BlogUser());

            post.MarkAsDeleted(deletionUser);

            Thread.Sleep(waitBetweenUpdates);

            post.MarkAsDeleted(deletionUser);

            post.DeletedDate.ShouldNotBeWithinLast(waitBetweenUpdates);
        }