Beispiel #1
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>
    /// <param name="contentService"></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);

        var sqlContext = Mock.Of <ISqlContext>(x => x.Query <IContent>() == Mock.Of <IQuery <IContent> >());
        var 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);

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

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