public virtual bool TextEquals(Tag other) { return Text.Equals(other.Text, StringComparison.CurrentCultureIgnoreCase); }
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_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 UpdateTags_GIVEN_No_Tags_WHEN_tags_Parameter_Contains_two_Tags_With_Differnt_Texts_THEN_Only_Adds_1_Tag() { var tag1 = new Tag { Text = "Tag1" }; tag1.SetProperty(t => t.Id, 1); var tag2 = new Tag { Text = "Tag1" }; tag2.SetProperty(t => t.Id, 2); var tags = new Tag[] { tag1, tag2 }; var imageReference = GetImageReference(); var post = new BlogPost("ABC", "description", "fullText", imageReference, DateTime.Now, new BlogUser()); post.UpdateTags(tags); post.Tags.Count().ShouldEqual(1); }
public void UpdateTags_GIVEN_No_Tags_THEN_Adds_tags_Parameter_To_Tags_Property() { var tag = new Tag { Text = "Tag1" }; tag.SetProperty(t => t.Id, 1); var tags = new Tag[]{ tag }; var imageReference = GetImageReference(); var post = new BlogPost("ABC", "description", "fullText", imageReference, DateTime.Now, new BlogUser()); post.UpdateTags(tags); post.Tags.ShouldContainAll(tags); }
public void UpdateTags_GIVEN_1_Tag_Exists_With_Text_Tag1_WHEN_Adding_Tag_With_Text_Tag2_THEN_Tags_Property_Contains_Tag1_And_Tag2() { var tag1 = new Tag { Text = "Tag1" }; tag1.SetProperty(t => t.Id, 1); var tag2 = new Tag { Text = "Tag2" }; tag2.SetProperty(t => t.Id, 2); var imageReference = GetImageReference(); var post = new BlogPost("ABC", "description", "fullText", imageReference, DateTime.Now, new BlogUser()); post.UpdateTags(new Tag[] { tag1 }); post.Tags.ShouldContain(tag1, "Pre-check"); post.UpdateTags(new Tag[] { tag2 }); post.Tags.ShouldContain(tag1); post.Tags.ShouldContain(tag2); }
private void UpdateTagsOnBlogPost(BlogPost blogPost, string tagTexts) { var tagList = new List<Tag>(); if (!String.IsNullOrWhiteSpace(tagTexts)) { string[] seperatedTagTexts = tagTexts.Split(new char[] { TagSeperator }, StringSplitOptions.RemoveEmptyEntries); foreach (string tagText in seperatedTagTexts.Select(s => s.Trim())) { Tag tag = LookupRepository.LoadForDescription<Tag>(t => t.Text, tagText); if (tag == null && !String.IsNullOrWhiteSpace(tagTexts)) tag = new Tag { Text = tagText }; tagList.Add(tag); } } blogPost.UpdateTags(tagList, true); }