コード例 #1
0
        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());
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
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());
        }
コード例 #6
0
        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");
            }
        }
コード例 #7
0
        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.");
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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));
        }
コード例 #15
0
        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));
        }
コード例 #16
0
        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");
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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");
        }