public string Search(string culture)
        {
            using (var luceneDir = new RandomIdRAMDirectory())
            {
                var fieldNames = new[] { "title", "title_en-us", "title_fr-fr" };
                using (var indexer = CreateTestIndex(luceneDir, fieldNames))
                {
                    var pcq = CreatePublishedContentQuery(indexer);

                    var results = pcq.Search("Products", culture, "TestIndex");

                    var ids = results.Select(x => x.Content.Id).ToArray();

                    return(string.Join(", ", ids));
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Used to create and manage a testable index
        /// </summary>
        /// <param name="publishedValuesOnly"></param>
        /// <param name="index"></param>
        /// <param name="contentRebuilder"></param>
        /// <param name="contentValueSetBuilder"></param>
        /// <param name="parentId"></param>
        /// <returns></returns>
        protected IDisposable GetSynchronousContentIndex(
            bool publishedValuesOnly,
            out UmbracoContentIndex index,
            out ContentIndexPopulator contentRebuilder,
            out ContentValueSetBuilder contentValueSetBuilder,
            int?parentId = null,
            IContentService contentService = null)
        {
            contentValueSetBuilder = IndexInitializer.GetContentValueSetBuilder(publishedValuesOnly);

            ISqlContext             sqlContext = Mock.Of <ISqlContext>(x => x.Query <IContent>() == Mock.Of <IQuery <IContent> >());
            IUmbracoDatabaseFactory dbFactory  = Mock.Of <IUmbracoDatabaseFactory>(x => x.SqlContext == sqlContext);

            if (contentService == null)
            {
                contentService = IndexInitializer.GetMockContentService();
            }

            contentRebuilder = IndexInitializer.GetContentIndexRebuilder(contentService, publishedValuesOnly, dbFactory);

            var luceneDir = new RandomIdRAMDirectory();

            ContentValueSetValidator validator;

            // if only published values then we'll change the validator for tests to
            // ensure we don't support protected nodes and that we
            // mock the public access service for the special protected node.
            if (publishedValuesOnly)
            {
                var publicAccessServiceMock = new Mock <IPublicAccessService>();
                publicAccessServiceMock.Setup(x => x.IsProtected(It.IsAny <string>()))
                .Returns((string path) =>
                {
                    if (path.EndsWith("," + ExamineDemoDataContentService.ProtectedNode))
                    {
                        return(Attempt <PublicAccessEntry> .Succeed());
                    }
                    return(Attempt <PublicAccessEntry> .Fail());
                });

                var scopeProviderMock = new Mock <IScopeProvider>();
                scopeProviderMock.Setup(x => x.CreateScope(
                                            It.IsAny <IsolationLevel>(),
                                            It.IsAny <RepositoryCacheMode>(),
                                            It.IsAny <IEventDispatcher>(),
                                            It.IsAny <IScopedNotificationPublisher>(),
                                            It.IsAny <bool?>(),
                                            It.IsAny <bool>(),
                                            It.IsAny <bool>()))
                .Returns(Mock.Of <IScope>);

                validator = new ContentValueSetValidator(
                    publishedValuesOnly,
                    false,
                    publicAccessServiceMock.Object,
                    scopeProviderMock.Object,
                    parentId);
            }
            else
            {
                validator = new ContentValueSetValidator(publishedValuesOnly, parentId);
            }

            index = IndexInitializer.GetUmbracoIndexer(
                HostingEnvironment,
                RunningRuntimeState,
                luceneDir,
                validator: validator);

            IDisposable syncMode = index.WithThreadingMode(IndexThreadingMode.Synchronous);

            return(new DisposableWrapper(syncMode, index, luceneDir));
        }