public void LoadsSpecifiedRevisionAsLatest()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry = new Entry { Name = name, Author = "A1" };
                    var revision1 = entry.Revise();
                    revision1.Body = "Hello";
                    var revision2 = entry.Revise();
                    revision2.Body = "Goodbye";
                    repo.Add(entry);
                });

            Database.WithRepository(
                repo =>
                {
                    var entry = repo.FindFirst(new EntryByNameAndRevisionQuery(name, 1));
                    Assert.AreEqual("Hello", entry.Body);

                    entry = repo.FindFirst(new EntryByNameAndRevisionQuery(name, 2));
                    Assert.AreEqual("Goodbye", entry.Body);
                });
        }
        public void ReturnsEntryWithWithRequestedTagOnly()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry = new Entry { Name = name, Author = "A1" };
                    var revision2 = entry.Revise();
                    revision2.Body = "Goodbye";
                    var tag = new Tag{ Name = "Awesome"};
                    tag.Entries.Add(entry);
                    entry.Tags.Add(tag);
                    repo.Add(entry);
                    repo.Add(tag);

                    var entry1 = new Entry { Name = name, Author = "A1" };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    var tag2 = new Tag { Name = "NotAwesome" };
                    tag2.Entries.Add(entry1);
                    entry1.Tags.Add(tag2);
                    repo.Add(entry1);
                    repo.Add(tag2);
                });

            Database.WithRepository(
                repo =>
                {
                    var result = repo.Find(new GetEntriesByTagQuery("Awesome"), 0, 2);
                    Assert.AreEqual(1, result.Count);
                    Assert.AreEqual(result.TotalResults, 1);
                    Assert.AreEqual(1, result[0].TagsCommaSeparated.Split(new[]{","}, StringSplitOptions.RemoveEmptyEntries).Length);
                });
        }
        public override void TestQuery()
        {
            var name = Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry1 = new Entry { Name = "bar-" + name, Title = name.ToString(), Author = "A1" };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry1);

                    var entry2 = new Entry { Name = "foo-" + name, Title = name.ToString(), Author = "A1" };
                    var revision2 = entry2.Revise();
                    revision2.Body = "Goodbye";
                    repo.Add(entry2);
                });

            Database.WithRepository(
                repo =>
                {
                    var result = repo.Find(new SimpleSearchEntriesQuery(name.ToString()), 0, 1);
                    Assert.AreEqual(1, result.Count);
                    Assert.GreaterOrEqual(2, result.TotalResults);
                });
        }
        public override void TestQuery()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                    {
                        var entry1 = new Entry { Name = name, Author = "A1", Status = EntryStatus.PublicBlog };
                        var revision1 = entry1.Revise();
                        revision1.Body = "Hello";
                        repo.Add(entry1);

                        var entry2 = new Entry { Name = name, Author = "A1", Status = EntryStatus.Private };
                        var revision2 = entry2.Revise();
                        revision2.Body = "Goodbye";
                        repo.Add(entry2);

                        var entry3 = new Entry { Name = name, Author = "A1", Status = EntryStatus.PublicPage };
                        var revision3 = entry3.Revise();
                        revision3.Body = "Goodbye";
                        repo.Add(entry3);
                    });

            Database.WithRepository(
                repo =>
                    {
                        var result = repo.Find(new GetEntriesQuery(), 0, 1);
                        Assert.AreEqual(1, result.Count);
                        Assert.GreaterOrEqual(result.TotalResults, 2);
                    });
        }
        public override void TestQuery()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry1 = new Entry { Name = name, Author = "A1" };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry1);

                    var entry2 = new Entry { Name = name, Author = "A1" };
                    var revision2 = entry2.Revise();
                    revision2.Body = "Goodbye";
                    repo.Add(entry2);
                });

            Database.WithRepository(
                repo =>
                {
                    var entry = repo.FindFirst(new EntryByNameAndRevisionQuery(name, 1));
                    Assert.AreEqual("A1", entry.Author);
                });
        }
        public override void TestQuery()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry = new Entry { Name = name, Author = "A1", Status = EntryStatus.PublicBlog };
                    var revision2 = entry.Revise();
                    revision2.Body = "Goodbye";
                    var tag = new Tag { Name = "Awesome" };
                    tag.Entries.Add(entry);
                    entry.Tags.Add(tag);
                    repo.Add(entry);
                    repo.Add(tag);

                    var entry1 = new Entry { Name = name, Author = "A1", Status = EntryStatus.PublicBlog };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry1);
                });

            Database.WithRepository(
                repo =>
                {
                    var result = repo.Find(new GetEntriesQuery(EntryStatus.PublicBlog), 0, 2);
                    Assert.AreEqual(2, result.Count);
                    Assert.AreEqual(result.TotalResults, 2);
                    Assert.AreEqual(1, result[0].TagsCommaSeparated.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).Length);
                });
        }
        public override void TestQuery()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry1 = new Entry { Name = name, Author = "A1" };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry1);
                    var comment1 = entry1.Comment();
                    comment1.AuthorName = "A2";
                    comment1.AuthorEmail = "*****@*****.**";
                    comment1.AuthorUrl = "somesite.com";
                    comment1.Body = "some comment";
                    repo.Add(comment1);
                });

            Database.WithRepository(
                repo =>
                {
                    var result = repo.Find(new GetFullEntriesQuery(true), 0, 1);
                    Assert.AreEqual(1, result.Count);
                    Assert.AreEqual(1, result.Single().Comments.Count);
                });
        }
예제 #8
0
        public override void TestQuery()
        {
            var name = "test-" + Guid.NewGuid();
            Entry entry = null;

            Database.WithRepository(
                repo =>
                    {
                        entry = new Entry {Name = name, Author = "A1", Status = EntryStatus.PublicBlog};
                        var revision = entry.Revise();
                        revision.Body = "Hello";
                        repo.Add(entry);
                        var comment = entry.Comment();
                        comment.AuthorName = "Test";
                        comment.AuthorEmail = "*****@*****.**";
                        comment.AuthorUrl = "";
                        comment.Body = "Comment";
                        comment.Posted = DateTime.Now;
                        comment.Entry = entry;
                        comment.IsSpam = false;
                        repo.Add(comment);

                        var comment2 = entry.Comment();
                        comment2.AuthorName = "Test";
                        comment2.AuthorEmail = "*****@*****.**";
                        comment2.AuthorUrl = "";
                        comment2.Body = "Comment";
                        comment2.Posted = DateTime.Now;
                        comment2.Entry = entry;
                        comment2.IsSpam = false;
                        repo.Add(comment2);

                        var comment3 = entry.Comment();
                        comment3.AuthorName = "Test";
                        comment3.AuthorEmail = "*****@*****.**";
                        comment3.AuthorUrl = "";
                        comment3.Body = "Comment";
                        comment3.Posted = DateTime.Now;
                        comment3.Entry = entry;
                        comment3.IsSpam = true;
                        repo.Add(comment3);
                    });

            Database.WithSession(
                s =>
                    {
                        var repo = new AdminRepository(s);

                        repo.UpdateCommentCountFor(entry.Id);
                    });

            Database.WithRepository(
                repo => Assert.AreEqual(2, repo.Get<Entry>(entry.Id).CommentCount));
        }
        public void ReturnsEntry()
        {
            var name = Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry1 = new Entry { Name = "bar-" + name, Title = name.ToString(), Author = "A1" };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry1);

                    var entry2 = new Entry { Name = "foo-" + name, Title = name.ToString(), Author = "A1" };
                    var revision2 = entry2.Revise();
                    revision2.Body = "Goodbye";
                    repo.Add(entry2);
                });

            //todo: TableFullTextChangeTrackingOn doesn't check if full text is enabled for that table, need to find IsFullTextIndexEnabled property
            var executeScalar = Database.AdHoc.ExecuteScalar(
                "SELECT FullTextServiceProperty('IsFullTextInstalled') + OBJECTPROPERTY(OBJECT_ID('$schema$.Entry'), 'TableFullTextChangeTrackingOn')");
            var isFullTextEnabled = (int)executeScalar;

            //Idealy the test will run when full text is installed and enabled, if not, still test like based search
            if (isFullTextEnabled == 2)
            {
                //Database.AdHoc.ExecuteNonQuery("ALTER FULLTEXT INDEX ON $schema$.[Entry] START UPDATE POPULATION");

                //Database.WithRepository(
                //repo =>
                //{
                //    var result = repo.Find(new SearchEntriesQuery(name.ToString()), 0, 1);
                //    Assert.AreEqual(1, result.Count);
                //    Assert.GreaterOrEqual(2, result.TotalResults);
                //});

                Database.AdHoc.ExecuteNonQuery("ALTER FULLTEXT INDEX ON $schema$.[Entry] SET CHANGE_TRACKING = OFF");
                Database.AdHoc.ExecuteNonQuery("EXEC sys.sp_fulltext_table @tabname=N'$schema$.[Entry]', @action=N'deactivate'");
            }

            Database.WithRepository(
                repo =>
                {
                    var result = repo.Find(new SearchEntriesQuery(name.ToString()), 0, 1);
                    Assert.AreEqual(1, result.Count);
                    Assert.GreaterOrEqual(2, result.TotalResults);
                });

            if (isFullTextEnabled == 2)
            {
                //Database.AdHoc.ExecuteNonQuery("EXEC sys.sp_fulltext_table @tabname=N'$schema$.[Entry]', @action=N'activate'");
            }
        }
        public void ReturnsComments()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry = new Entry { Name = name, Author = "A1" };
                    var revision = entry.Revise();
                    revision.Body = "Hello";
                    repo.Add(entry);
                    var comment = new Comment
                    {
                        AuthorName = "Test",
                        AuthorEmail = "*****@*****.**",
                        AuthorUrl = "",
                        Body = "Comment",
                        Posted = DateTime.Now,
                        Entry = entry,
                        IsSpam = false
                    };
                    var comment2 = new Comment
                    {
                        AuthorName = "Test2",
                        AuthorEmail = "*****@*****.**",
                        AuthorUrl = "",
                        Body = "Comment2",
                        Posted = DateTime.Now,
                        Entry = entry,
                        IsSpam = false
                    };
                    entry.Comments.Add(comment);
                    entry.Comments.Add(comment2);
                    repo.Add(comment);
                    repo.Add(comment2);
                });

            Database.WithRepository(
                repo =>
                {
                    var result = repo.Find(new GetCommentsQuery(), 0, 1);
                    Assert.AreEqual(1, result.Count);
                    Assert.GreaterOrEqual(result.TotalResults, 2);
                });
        }
        public void MatchesEntryByName()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry1 = new Entry { Name = name, Author = "A1" };
                    var revision1 = entry1.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry1);
                });

            Database.WithRepository(
                repo =>
                {
                    var entry = repo.FindFirst(new EntryByNameQuery(name));
                    Assert.AreEqual("A1", entry.Author);
                });
        }
        public override void TestQuery()
        {
            var name = "test-" + Guid.NewGuid();

            Database.WithRepository(
                repo =>
                {
                    var entry = new Entry
                    {
                        Name = name,
                        Author = "A1"
                    };
                    var revision1 = entry.Revise();
                    revision1.Body = "Hello";
                    repo.Add(entry);
                    var comment = new Comment
                    {
                        AuthorName = "Test",
                        AuthorEmail = "*****@*****.**",
                        AuthorUrl = "",
                        Body = "Comment",
                        Posted = DateTime.Now,
                        Entry = entry
                    };
                    entry.Comments.Add(comment);
                    repo.Add(comment);
                });

            Database.WithRepository(
                repo =>
                {
                    var entry = repo.FindFirst(new EntryByNameQuery(name));
                    Assert.AreEqual("A1", entry.Author);
                    Assert.AreEqual("Test", entry.Comments.First().AuthorName);
                });
        }
예제 #13
0
        public IEnumerable<TaskStep> Execute(Dictionary<string, object> properties)
        {
            var inputFile = (string)properties["inputFile"];
            if (!File.Exists(inputFile))
            {
                throw new ArgumentException("The file: '{0}' does not exist.");
            }

            var progress = 0;
            yield return new TaskStep(progress++, "Input file '{0}' found", inputFile);

            using (var reader = new StreamReader(inputFile))
            {
                yield return new TaskStep(progress++, "Deserializing input file into BlogML object model");

                var blog = BlogMLSerializer.Deserialize(reader);

                yield return new TaskStep(progress++, "Successfully deserialized BlogML object model from input file");
                yield return new TaskStep(progress++, "Blog posts found: {0}", blog.Posts.Count);

                var remainingProgress = 100 - progress;
                var postCount = blog.Posts.Count;
                var postIndex = 0;

                foreach (var post in blog.Posts)
                {
                    postIndex++;
                    progress = (int)(((double)postIndex / postCount) * (double)remainingProgress);

                    var entry = new Entry();
                    entry.Author = authenticator.GetName();
                    entry.HideChrome = false;
                    entry.IsDiscussionEnabled = true;
                    entry.Status = post.PostType == BlogPostTypes.Article ? EntryStatus.PublicPage : EntryStatus.PublicBlog;
                    entry.Title = entry.MetaTitle = NoLongerThan(200, post.Title);
                    entry.Published = post.DateCreated < DateTime.Today.AddYears(-100) ? DateTime.UtcNow : post.DateCreated;
                    entry.Summary = post.HasExcerpt ? NoLongerThan(500, StripHtml(post.Excerpt.UncodedText)) : "";
                    entry.MetaDescription = post.HasExcerpt ? NoLongerThan(200, StripHtml(post.Excerpt.UncodedText)) : NoLongerThan(200, StripHtml(post.Content.UncodedText));
                    entry.Name = NoLongerThan(100, (post.PostUrl ?? post.PostName ?? post.ID).Trim('/'));

                    // Ensure this post wasn't already imported
                    var existing = repository.FindFirstOrDefault(new EntryByNameQuery(entry.Name));
                    if (existing != null)
                    {
                        yield return new TaskStep(progress, "Did NOT import post '{0}', because a post by this name already exists", entry.Name);

                        continue;
                    }

                    var revision = entry.Revise();
                    revision.Author = authenticator.GetName();
                    revision.Body = post.Content.UncodedText;
                    revision.Format = Formats.Html;
                    revision.Reason = "Imported from BlogML";

                    foreach (BlogMLComment comment in post.Comments)
                    {
                        var newComment = entry.Comment();
                        newComment.AuthorEmail = NoLongerThan(100, comment.UserEMail);
                        newComment.AuthorName = NoLongerThan(100, comment.UserName);
                        newComment.AuthorUrl = NoLongerThan(100, comment.UserUrl);
                        newComment.IsSpam = !comment.Approved;
                        newComment.Posted = comment.DateCreated < DateTime.Today.AddYears(-100) ? DateTime.UtcNow : comment.DateCreated;
                        newComment.Body = comment.Content.UncodedText;
                    }

                    foreach (BlogMLCategoryReference categoryRef in post.Categories)
                    {
                        var category = blog.Categories.FirstOrDefault(x => x.ID == categoryRef.Ref);
                        if (category == null)
                            continue;

                        var tagName = new string(
                            (category.Title?? string.Empty)
                            .ToLowerInvariant()
                            .Select(x => char.IsLetterOrDigit(x) ? x : '-')
                            .ToArray());

                        if (string.IsNullOrEmpty(tagName))
                            continue;

                        var existingTag = repository.FindFirstOrDefault(new SearchTagsByNameQuery(tagName));
                        if (existingTag == null)
                        {
                            existingTag = new Tag {Name = tagName};
                            repository.Add(existingTag);
                        }

                        existingTag.Add(entry);
                    }

                    repository.Add(entry);

                    yield return new TaskStep(progress, "Imported post '{0}'", entry.Name);
                }
            }
            yield break;
        }