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); }
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); }
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)); }
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); }
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); }
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); }