public void ConvertBlogPost_WithPostHavingTwoCategories_AddsBothCategoriesToEntry()
        {
            // arrange
            var blog = new BlogMLBlog();

            blog.Categories.Add(new BlogMLCategory {
                ID = "abc", Title = "Category A"
            });
            blog.Categories.Add(new BlogMLCategory {
                ID = "def", Title = "Category B"
            });
            blog.Categories.Add(new BlogMLCategory {
                ID = "#@!", Title = "Category C"
            });
            var post = new BlogMLPost();

            post.Categories.Add("abc");
            post.Categories.Add("#@!");
            var mapper = new BlogMLImportMapper();

            // act
            var entry = mapper.ConvertBlogPost(post, blog, null);

            // assert
            Assert.AreEqual(2, entry.Categories.Count);
            Assert.AreEqual("Category A", entry.Categories.First());
            Assert.AreEqual("Category C", entry.Categories.Last());
        }
        public void GetTitleFromEntry_WithPostHavingNoTitle_CreatesUsesPostNameIfAvailable()
        {
            // arrange
            var post = new BlogMLPost {
                Title = null, PostName = "Hello World"
            };
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.AreEqual("Hello World", entry.Title);
        }
        public void ConvertBlogPost_WithPostHavingNoTitleAndNoPostName_UsesPostId()
        {
            // arrange
            var post = new BlogMLPost {
                Title = null, PostName = null, ID = "87618298"
            };
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.AreEqual("Post #87618298", entry.Title);
        }
        public void ConvertBlogPost_WithPostHavingBase64EncodedExcerpt_DecodesContent()
        {
            // arrange
            var post = new BlogMLPost {
                HasExcerpt = true, Excerpt = BlogMLContent.Create("This is a story about a 3 hour voyage", ContentTypes.Base64)
            };
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.AreEqual("This is a story about a 3 hour voyage", entry.Description);
        }
        public void ConvertBlogPost_WithNullTitleNameButWithPostUrlContainingBlogSpotDotCom_UsesLastSegmentAsTitle()
        {
            // arrange
            var post = new BlogMLPost {
                PostUrl = "http://example.blogspot.com/2003/07/the-last-segment.html"
            };
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.AreEqual("the last segment", entry.Title);
        }
        public void ConvertBlogPost_WithTitleTooLong_TruncatesTitleToMaxLength()
        {
            // arrange
            var title = new string('a', 256);
            var post  = new BlogMLPost {
                Title = title
            };
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.AreEqual(255, entry.Title.Length);
        }
        public void ConvertBlogPost_WithPostHavingExcerpt_SetsEntryDescription()
        {
            // arrange
            var post = new BlogMLPost {
                HasExcerpt = true, Excerpt = new BlogMLContent {
                    Text = "This is a story about a 3 hour voyage"
                }
            };
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.AreEqual("This is a story about a 3 hour voyage", entry.Description);
        }
        public void ConvertBlogPost_WithDateModified_ReturnsItAsDatePublishedUtc()
        {
            // arrange
            DateTime utcNow = DateTime.ParseExact("2009/08/15 11:00 PM", "yyyy/MM/dd hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
            var      post   = new BlogMLPost {
                Approved = true, DateModified = utcNow
            };
            var blog   = new Mock <Blog>();
            var mapper = new BlogMLImportMapper();

            // act
            var entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), blog.Object);

            // assert
            Assert.AreEqual(utcNow, entry.DatePublishedUtc);
        }
        public void ConvertBlogPost_WithApprovedPost_SetsAppropriatePublishPropertiesOfEntry()
        {
            // arrange
            var post = new BlogMLPost {
                Approved = true
            };
            var mapper = new BlogMLImportMapper();

            // act
            var entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), null);

            // assert
            Assert.IsTrue(entry.IsActive);
            Assert.IsTrue(entry.DisplayOnHomePage);
            Assert.IsTrue(entry.IncludeInMainSyndication);
            Assert.IsTrue(entry.IsAggregated);
        }
        public void ConvertBlogPost_WithSyndicatedDate_ConvertsDateToBlogTimezone()
        {
            // arrange
            DateTime utcNow = DateTime.ParseExact("2009/08/15 11:00 PM", "yyyy/MM/dd hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
            var      post   = new BlogMLPost {
                Approved = true, DateModified = utcNow
            };
            var      blog     = new Mock <Blog>();
            DateTime expected = DateTime.ParseExact("2009/08/15 05:00 PM", "yyyy/MM/dd hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);

            blog.Setup(b => b.TimeZone.FromUtc(utcNow)).Returns(expected);
            var mapper = new BlogMLImportMapper();

            // act
            var entry = mapper.ConvertBlogPost(post, new BlogMLBlog(), blog.Object);

            // assert
            Assert.AreEqual(expected, entry.DateSyndicated);
        }
        public void ConvertBlogPost_WithAuthorTitleTooLong_TruncatesTitleToMaxLength()
        {
            // arrange
            var title = new string('a', 51);
            var blog  = new BlogMLBlog();

            blog.Authors.Add(new BlogMLAuthor {
                ID = "123", Title = title
            });
            var post = new BlogMLPost();

            post.Authors.Add("123");
            var mapper = new BlogMLImportMapper();

            // act
            Entry entry = mapper.ConvertBlogPost(post, blog, null);

            // assert
            Assert.AreEqual(50, entry.Author.Length);
        }
        public void ConvertBlogPost_WithAuthorMatchingBlogAuthor_SetsAuthorNameAndEmail()
        {
            // arrange
            var blog = new BlogMLBlog();

            blog.Authors.Add(new BlogMLAuthor {
                ID = "111", Title = "Not-Haacked", Email = "*****@*****.**"
            });
            blog.Authors.Add(new BlogMLAuthor {
                ID = "222", Title = "Haacked", Email = "*****@*****.**"
            });
            var post = new BlogMLPost();

            post.Authors.Add("222");
            var mapper = new BlogMLImportMapper();

            // act
            var entry = mapper.ConvertBlogPost(post, blog, null);

            // assert
            Assert.AreEqual("Haacked", entry.Author);
            Assert.AreEqual("*****@*****.**", entry.Email);
        }