public void BlogPostController_Save_Calls_Save_On_BlogPostRepository() { var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())).Verifiable(); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object); var model = new CreateEditModel() { Title = "ABC", Description = "ABC", FullArticle = "ABC", ImageId = 1, SeriesName = "ABC", TagTexts ="ABC" }; controller.Save(model); mockedBlogPostRepository.Verify(r => r.SaveOrUpdate(It.IsAny<BlogPost>()), Times.Once()); }
public void BlogPostController_Save_WHEN_TagTexts_Is_Null_THEN_Still_Saves_BlogPost() { const int ImageId = 1; BlogPost savedPost = null; var imageReference = new ImageReference(ImageId, "~/1.jpg"); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = ImageId, SeriesName = "HIJ", TagTexts = null }; controller.Save(model); savedPost.ShouldNotBeNull(); }
public void BlogPostController_Save_WHEN_Series_Is_Null_THEN_Does_Not_Call_SeriesRepository_LoadForName() { var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); Expression<Func<ILookupRepository, Series>> verifiableMethod = r => r.LoadForDescription(It.IsAny<Expression<Func<Series, string>>>(), It.IsAny<string>()); mockedLookupRepository.Setup(verifiableMethod).Verifiable(); var controller = MockCreators.CreateBlogPostController(lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = 1, TagTexts = String.Empty, SeriesName = null }; controller.Save(model); mockedLookupRepository.Verify(verifiableMethod, Times.Never()); }
public void BlogPostController_Save_WHEN_No_Tags_THEN_Saves_No_Tags() { const int ImageId = 1; BlogPost savedPost = null; var imageReference = new ImageReference(ImageId, "~/1.jpg"); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "Title", Description = "Description", FullArticle = "Full Article", ImageId = ImageId, SeriesName = "Series", TagTexts = String.Empty }; controller.Save(model); savedPost.ShouldNotBeNull(); savedPost.Tags.Count().ShouldEqual(0); }
public void BlogPostController_Save_WHEN_ImageId_Is_Less_Than_1_THEN_Sets_ImageId_To_1() { const int ExpectedImageId = 1; var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ExpectedImageId)).Verifiable(); var controller = MockCreators.CreateBlogPostController(lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = -1, SeriesName = "HIJ", TagTexts = "KLM" }; controller.Save(model); mockedLookupRepository.Verify(r => r.LoadForId<ImageReference>(ExpectedImageId), Times.Once()); }
public ActionResult Save(CreateEditModel viewModel) { if (!viewModel.ImageId.HasValue || viewModel.ImageId < 1) viewModel.ImageId = 1; try { BlogPost blogPost = null; if (viewModel.BlogPostId.HasValue) { blogPost = BlogPostRepository.LoadFullArticle(viewModel.BlogPostId.Value); blogPost.UpdateTitle(viewModel.Title); blogPost.UpdateDescription(viewModel.Description); blogPost.UpdateFullArticle(viewModel.FullArticle); if (blogPost.ImageReference.Id.HasValue && blogPost.ImageReference.Id.Value != viewModel.ImageId) { ImageReference imageReference = LookupRepository.LoadForId<ImageReference>(viewModel.ImageId); blogPost.UpdateImageReference(imageReference); } } else { ImageReference imageReference = LookupRepository.LoadForId<ImageReference>(viewModel.ImageId); BlogUser user = LookupRepository.LoadForId<BlogUser>(JumbleblocksPrincipal.Identity.UserId); blogPost = new BlogPost(viewModel.Title, viewModel.Description, viewModel.FullArticle, imageReference, DateTime.Now, user); } UpdateTagsOnBlogPost(blogPost, viewModel.TagTexts); UpdateSeriesOnBlogPost(blogPost, viewModel.SeriesName); BlogPostRepository.SaveOrUpdate(blogPost); return RedirectToAction("Index", "ControlPanel"); } catch (Exception ex) { Logger.LogError("Could not save blog post", ex); ViewBag.ErrorMessage = "Exception occured while saving blog post. Please try again."; return View("CreateEdit"); } }
public void BlogPostController_Save_WHEN_ILookupRepository_LoadForId_ImageReference_Throws_Exception_THEN_Returns_ErrorMessage_On_ViewBag() { var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(It.IsAny<int>())).Throws<Exception>(); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = 1, SeriesName = "HIJ", TagTexts = "KLM" }; var result = controller.Save(model) as ViewResult; string errorMessage = result.ViewBag.ErrorMessage; errorMessage.ShouldNotBeNullOrEmpty(); errorMessage.ShouldEqual("Exception occured while saving blog post. Please try again."); }
public void BlogPostController_Save_GIVEN_TagRepository_Has_Tag_ABC_WHEN_Tag_ABC_THEN_Loads_ABC_Tag_From_TagRepository_AND_Adds_To_BlogPost() { const int ImageId = 1; BlogPost savedPost = null; Tag tag = new Tag { Text = "ABC" }; var imageReference = new ImageReference(ImageId, "~/1.jpg"); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference); mockedLookupRepository.Setup(r => r.LoadForDescription<Tag>(It.IsAny<Expression<Func<Tag, string>>>(), tag.Text)).Returns(tag); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = ImageId, SeriesName = "HIJ", TagTexts = tag.Text }; controller.Save(model); savedPost.ShouldNotBeNull(); savedPost.Tags.First().ShouldEqual(tag); }
public void BlogPostController_Save_Returns_RedirectToRouteResult() { var model = new CreateEditModel() { Title = "ABC", Description = "ABC", FullArticle = "ABC", ImageId = 1, SeriesName = "ABC", TagTexts = "ABC" }; var controller = MockCreators.CreateBlogPostController(); var result = controller.Save(model); result.ShouldBeInstanceOfType(typeof(RedirectToRouteResult)); }
public void BlogPostController_Save_GIVEN_SeriesRepository_Does_Not_Have_Series_ABC_WHEN_Series_Is_ABC__THEN_Creates_New_Series_ABC_AND_Adds_To_BlogPost() { const string SeriesName = "ABC"; BlogPost savedPost = null; var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedPost = bp); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForDescription<Series>(It.IsAny<Expression<Func<Series, string>>>(), It.IsAny<string>())).Returns(null as Series); var controller = MockCreators.CreateBlogPostController(blogPostRepository:mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = 2, SeriesName = SeriesName }; controller.Save(model); savedPost.ShouldNotBeNull(); savedPost.Series.ShouldNotBeNull(); savedPost.Series.Name.ShouldEqual(SeriesName); }
public void BlogPostController_Save_GIVEN_SeriesRepository_Has_Series_ABC_WHEN_Series_ABC_THEN_Loads_ABC_Series_From_SeriesRepository_AND_Adds_To_BlogPost() { const int ImageId = 1; BlogPost savedPost = null; Series series = new Series { Name = "ABC" }; var imageReference = new ImageReference(ImageId, "~/1.jpg"); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference); mockedLookupRepository.Setup(r => r.LoadForDescription(It.IsAny<Expression<Func<Series, string>>>(), series.Name)).Returns(series); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = ImageId, TagTexts = String.Empty, SeriesName = series.Name }; controller.Save(model); savedPost.ShouldNotBeNull(); savedPost.Series.ShouldEqual(series); }
public void BlogPostController_Save_GIVEN_LoggedIn_User_Has_Id_1_WHEN_UserRepository_Has_User_With_Id_1_THEN_Sets_Author_On_BlogPost_To_That_User() { const int UserId = 1; const string Forename = "Joe"; const string Surname = "Blogs"; BlogPost savedBlogPost = null; var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())).Callback<BlogPost>(bp => savedBlogPost = bp); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); var mockedPrincipal = MockCreators.CreateMockedPrincipalAndAddBlogUserToLookUp(mockedLookupRepository, UserId, Forename, Surname); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object, principal: mockedPrincipal.Object); var viewModel = new CreateEditModel { Title = "test", Description = "test", FullArticle = "Test", ImageId = 1 }; controller.Save(viewModel); savedBlogPost.ShouldNotBeNull(); savedBlogPost.Author.ShouldNotBeNull(); savedBlogPost.Author.Id.ShouldEqual(UserId); savedBlogPost.Author.Forenames.ShouldEqual(Forename); savedBlogPost.Author.Surname.ShouldEqual(Surname); }
public void BlogPostController_Save_GIVEN_ILookupRepository_LoadForId_ImageReference_Contains_Entry_For_Id_1_WHEN_ImageId_Is_1_THEN_Sets_The_ImageReference_On_The_BlogPost_To_That_Image() { const int ImageId = 1; var imageReference = new ImageReference(ImageId, "~/1.jpg"); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference); BlogPost savedBlogPost = null; var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedBlogPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = ImageId, SeriesName = "HIJ", TagTexts = "KLM" }; controller.Save(model); savedBlogPost.ShouldNotBeNull(); savedBlogPost.ImageReference.ShouldEqual(imageReference); }
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 BlogPostController_Save_WHEN_viewModel_Has_Two_Tags_Seperated_By_SemiColon_THEN_Adds_Both_To_Saved_BlogPost() { const string Tag1Text = "tag1"; const string Tag2Text = "tag2"; const int ImageId = 1; BlogPost savedPost = null; var imageReference = new ImageReference(ImageId, "~/1.jpg"); var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(ImageId)).Returns(imageReference); mockedLookupRepository.Setup(r => r.LoadForDescription<Tag>(It.IsAny<Expression<Func<Tag, string>>>(), It.IsAny<string>())).Returns(null as Tag); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = ImageId, SeriesName = "HIJ", TagTexts = String.Format("{0};{1}", Tag1Text, Tag2Text) }; controller.Save(model); savedPost.ShouldNotBeNull(); savedPost.Tags.Count().ShouldEqual(2); savedPost.Tags.ShouldContain( t => t.Text == Tag1Text, String.Format("Does not contain {0}", Tag1Text)); savedPost.Tags.ShouldContain( t => t.Text == Tag2Text, String.Format("Does not contain {0}", Tag2Text)); }
public void BlogPostController_Save_WHEN_ILookupRepository_LoadForId_ImageReference_Throws_Exception_THEN_Returns_CreateEdit_View() { var mockedLookupRepository = MockCreators.CreateMockedLookupRepository(); mockedLookupRepository.Setup(r => r.LoadForId<ImageReference>(It.IsAny<int>())).Throws<Exception>(); var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object, lookupRepository: mockedLookupRepository.Object); var model = new CreateEditModel() { Title = "123", Description = "456", FullArticle = "ABC", ImageId = 1, SeriesName = "HIJ", TagTexts = "KLM" }; var result = controller.Save(model) as ViewResult; result.ViewName.ShouldEqual("CreateEdit"); }
public void BlogPostController_Save_GIVEN_BlogPost_Has_Description_ABC_THEN_Saves_BlogPost_With_Description_ABC() { const string Description = "ABC"; BlogPost savedBlogPost = null; var mockedBlogPostRepository = MockCreators.CreateMockedBlogPostRepository(); mockedBlogPostRepository.Setup(r => r.SaveOrUpdate(It.IsAny<BlogPost>())) .Callback<BlogPost>(bp => savedBlogPost = bp); var controller = MockCreators.CreateBlogPostController(blogPostRepository: mockedBlogPostRepository.Object); var model = new CreateEditModel() { Title = "123", Description = Description, FullArticle = "DEF", ImageId = 1, SeriesName = "HIJ", TagTexts = "KLM" }; controller.Save(model); savedBlogPost.ShouldNotBeNull(); savedBlogPost.Description.ShouldEqual(Description); }
public ActionResult Edit(int blogPostId) { BlogPost post = BlogPostRepository.Load(blogPostId); string seriesName = post.Series == null ? String.Empty : post.Series.Name; int? imageReferenceId = post.GetImageReferenceId(); string tagTexts = post.GetTagsAsSeperatedString(TagSeperator); var viewModel = new CreateEditModel { BlogPostId = post.Id.Value, PublishedDate = post.PublishedDate, Title = post.Title, Description = post.Description, FullArticle = post.FullArticle, ImageId = imageReferenceId, SeriesName = seriesName, TagTexts = tagTexts }; ViewData.Model = viewModel; return View("CreateEdit"); }