public void Index_Delete_Index_Item_Ensure_Heirarchy_Removed()
        {
            var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance <PropertyEditorCollection>(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false);

            using (var luceneDir = new RandomIdRamDirectory())
                using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir))
                    using (indexer.ProcessNonAsync())
                    {
                        var searcher = indexer.GetSearcher();

                        //create the whole thing
                        rebuilder.Populate(indexer);

                        //now delete a node that has children

                        indexer.DeleteFromIndex(1140.ToString());
                        //this node had children: 1141 & 1142, let's ensure they are also removed

                        var results = searcher.CreateQuery().Id(1141).Execute();
                        Assert.AreEqual(0, results.Count());

                        results = searcher.CreateQuery().Id(1142).Execute();
                        Assert.AreEqual(0, results.Count());
                    }
        }
        public void Index_Reindex_Content()
        {
            var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance <PropertyEditorCollection>(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false);

            using (var luceneDir = new RandomIdRamDirectory())
                using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
                                                                        validator: new ContentValueSetValidator(false)))
                    using (indexer.ProcessNonAsync())
                    {
                        var searcher = indexer.GetSearcher();

                        //create the whole thing
                        rebuilder.Populate(indexer);

                        var result = searcher.CreateQuery().Field(LuceneIndex.CategoryFieldName, IndexTypes.Content).Execute();
                        Assert.AreEqual(21, result.TotalItemCount);

                        //delete all content
                        foreach (var r in result)
                        {
                            indexer.DeleteFromIndex(r.Id);
                        }


                        //ensure it's all gone
                        result = searcher.CreateQuery().Field(LuceneIndex.CategoryFieldName, IndexTypes.Content).Execute();
                        Assert.AreEqual(0, result.TotalItemCount);

                        //call our indexing methods
                        rebuilder.Populate(indexer);

                        result = searcher.CreateQuery().Field(LuceneIndex.CategoryFieldName, IndexTypes.Content).Execute();
                        Assert.AreEqual(21, result.TotalItemCount);
                    }
        }
        public void Index_Protected_Content_Not_Indexed()
        {
            var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance <PropertyEditorCollection>(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false);


            using (var luceneDir = new RandomIdRamDirectory())
                using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir))
                    using (indexer.ProcessNonAsync())
                        using (var searcher = ((LuceneSearcher)indexer.GetSearcher()).GetLuceneSearcher())
                        {
                            //create the whole thing
                            rebuilder.Populate(indexer);


                            var protectedQuery = new BooleanQuery();
                            protectedQuery.Add(
                                new BooleanClause(
                                    new TermQuery(new Term(LuceneIndex.CategoryFieldName, IndexTypes.Content)),
                                    Occur.MUST));

                            protectedQuery.Add(
                                new BooleanClause(
                                    new TermQuery(new Term(LuceneIndex.ItemIdFieldName, ExamineDemoDataContentService.ProtectedNode.ToString())),
                                    Occur.MUST));

                            var collector = TopScoreDocCollector.Create(100, true);

                            searcher.Search(protectedQuery, collector);

                            Assert.AreEqual(0, collector.TotalHits, "Protected node should not be indexed");
                        }
        }
        public void Rebuild_Index()
        {
            var contentRebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance <PropertyEditorCollection>(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false);
            var mediaRebuilder   = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance <PropertyEditorCollection>(), IndexInitializer.GetMockMediaService());

            using (var luceneDir = new RandomIdRamDirectory())
                using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir,
                                                                        validator: new ContentValueSetValidator(false)))
                    using (indexer.ProcessNonAsync())
                    {
                        var searcher = indexer.GetSearcher();

                        //create the whole thing
                        contentRebuilder.Populate(indexer);
                        mediaRebuilder.Populate(indexer);

                        var result = searcher.CreateQuery().All().Execute();

                        Assert.AreEqual(29, result.TotalItemCount);
                    }
        }
        public void Test_Sort_Order_Sorting()
        {
            long totalRecs;
            var  demoData = new ExamineDemoDataContentService(TestFiles.umbraco_sort);
            var  allRecs  = demoData.GetLatestContentByXPath("//*[@isDoc]")
                            .Root
                            .Elements()
                            .Select(x => Mock.Of <IContent>(
                                        m =>
                                        m.Id == (int)x.Attribute("id") &&
                                        m.ParentId == (int)x.Attribute("parentID") &&
                                        m.Level == (int)x.Attribute("level") &&
                                        m.CreatorId == 0 &&
                                        m.SortOrder == (int)x.Attribute("sortOrder") &&
                                        m.CreateDate == (DateTime)x.Attribute("createDate") &&
                                        m.UpdateDate == (DateTime)x.Attribute("updateDate") &&
                                        m.Name == (string)x.Attribute("nodeName") &&
                                        m.GetCultureName(It.IsAny <string>()) == (string)x.Attribute("nodeName") &&
                                        m.Path == (string)x.Attribute("path") &&
                                        m.Properties == new PropertyCollection() &&
                                        m.Published == true &&
                                        m.ContentType == Mock.Of <ISimpleContentType>(mt =>
                                                                                      mt.Icon == "test" &&
                                                                                      mt.Alias == x.Name.LocalName &&
                                                                                      mt.Id == (int)x.Attribute("nodeType"))))
                            .ToArray();
            var contentService = Mock.Of <IContentService>(
                x => x.GetPagedDescendants(
                    It.IsAny <int>(), It.IsAny <long>(), It.IsAny <int>(), out totalRecs, It.IsAny <IQuery <IContent> >(), It.IsAny <Ordering>())
                ==
                allRecs);

            var propertyEditors = Factory.GetInstance <PropertyEditorCollection>();
            var rebuilder       = IndexInitializer.GetContentIndexRebuilder(propertyEditors, contentService, ScopeProvider.SqlContext, true);

            using (var luceneDir = new RandomIdRamDirectory())
                using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir))
                    using (indexer.ProcessNonAsync())
                    {
                        indexer.CreateIndex();
                        rebuilder.Populate(indexer);

                        var searcher = indexer.GetSearcher();

                        var numberSortedCriteria = searcher.CreateQuery()
                                                   .ParentId(1148)
                                                   .OrderBy(new SortableField("sortOrder", SortType.Int));
                        var numberSortedResult = numberSortedCriteria.Execute();

                        var stringSortedCriteria = searcher.CreateQuery()
                                                   .ParentId(1148)
                                                   .OrderBy(new SortableField("sortOrder"));//will default to string
                        var stringSortedResult = stringSortedCriteria.Execute();

                        Assert.AreEqual(12, numberSortedResult.TotalItemCount);
                        Assert.AreEqual(12, stringSortedResult.TotalItemCount);

                        Assert.IsTrue(IsSortedByNumber(numberSortedResult));
                        Assert.IsFalse(IsSortedByNumber(stringSortedResult));
                    }
        }