Ejemplo n.º 1
0
        private void TestQuery(
            Func <IQueryable <SearchResultItem>, IList <SearchResultItem> > actFunction,
            Action <Query> assert)
        {
            using (var db = new Db {
                new ItemBuilder().WithDisplayName("test").Build()
            })
            {
                var   repository = new Mock <IAlgoliaRepository>();
                Query query      = null;
                repository.Setup(t => t.SearchAsync(It.IsAny <Query>()))
                .ReturnsAsync(new JObject())
                .Callback((Query q) => query = q);

                var index = new AlgoliaBaseIndex("algolia_master_index", repository.Object);

                using (var context = index.CreateSearchContext())
                {
                    var queryable = context.GetQueryable <SearchResultItem>();

                    //Act
                    var actual = actFunction(queryable);

                    //Assert
                    Assert.IsNotNull(actual);
                    repository.Verify(t => t.SearchAsync(It.IsAny <Query>()), Times.Once);

                    assert(query);
                }
            }
        }
        public void CrawlerShouldIncludeTemplates()
        {
            // arrange
            using (var db = new Db {
                _source
            })
            {
                var item = db.GetItem("/sitecore/content/source");
                item.Should().NotBeNull();

                var repository = new Mock <IAlgoliaRepository>();
                repository.Setup(t => t.ClearIndexAsync()).ReturnsAsync(JObject.Parse(@"{""taskID"": 722}"));

                var sut = new AlgoliaBaseIndex("test", repository.Object);
                sut.PropertyStore = new NullPropertyStore();
                var configuration = new AlgoliaIndexConfiguration();
                configuration.DocumentOptions = new DocumentBuilderOptions();
                configuration.IncludeTemplate(TestData.TestTemplateId.ToString());

                sut.Configuration = configuration;
                var crawler = new SitecoreItemCrawler();
                crawler.Database = "master";
                crawler.Root     = "/sitecore/content";
                sut.Crawlers.Add(crawler);
                crawler.Initialize(sut);
                sut.Initialize();

                //Act
                sut.Rebuild();

                //Assert
                repository.Verify(t => t.SaveObjectsAsync(It.Is <IEnumerable <JObject> >(o => o.Any())), Times.Once);
            }
        }
        public void CrawlerExludeNotShowInSearchResultsDocuments(string showInSearchResultsFieldName, bool shouldBeCrawled)
        {
            // arrange
            var source = new DbItem("source", TestData.TestItemId, TestData.TestTemplateId)
            {
                { "Show In Search Results", "" }
            };

            using (var db = new Db {
                source
            })
            {
                var item = db.GetItem("/sitecore/content/source");
                item.Should().NotBeNull();

                var repository = new Mock <IAlgoliaRepository>();
                repository.Setup(t => t.ClearIndexAsync()).ReturnsAsync(JObject.Parse(@"{""taskID"": 722}"));

                var sut = new AlgoliaBaseIndex("test", repository.Object);
                sut.PropertyStore = new NullPropertyStore();
                var configuration = new AlgoliaIndexConfiguration
                {
                    DocumentOptions = new DocumentBuilderOptions()
                };

                sut.Configuration = configuration;
                var crawler = new AlgoliaCrawler
                {
                    Database = "master",
                    Root     = "/sitecore/content",
                    ShowInSearchResultsFieldName = showInSearchResultsFieldName,
                };
                sut.Crawlers.Add(crawler);
                crawler.Initialize(sut);
                sut.Initialize();

                //Act
                sut.Rebuild();

                //Assert
                var actual = shouldBeCrawled ? Times.Once() : Times.Never();

                repository.Verify(t => t.SaveObjectsAsync(It.Is <IEnumerable <JObject> >(o => o.Any())), actual);
            }
        }
        public void DeleteTest()
        {
            // arrange
            using (var db = new Db {
                _source
            })
            {
                var item = db.GetItem("/sitecore/content/source");
                item.Should().NotBeNull();

                string id = string.Empty;

                var repository = new Mock <IAlgoliaRepository>();
                repository.Setup(t => t.DeleteAllObjByTag(It.IsAny <string>()))
                .ReturnsAsync(1)
                .Callback <string>(s => id = s);

                var sut = new AlgoliaBaseIndex("test", repository.Object);
                sut.PropertyStore = new NullPropertyStore();
                var configuration = new AlgoliaIndexConfiguration();
                configuration.DocumentOptions = new DocumentBuilderOptions();
                sut.Configuration             = configuration;
                var crawler = new SitecoreItemCrawler();
                crawler.Database = "master";
                crawler.Root     = "/sitecore/content";
                sut.Crawlers.Add(crawler);
                crawler.Initialize(sut);
                sut.Initialize();

                //Act
                sut.Delete(new IndexableId <ID>(item.ID));

                //Assert
                repository.Verify(t => t.DeleteAllObjByTag(It.IsAny <string>()), Times.Once);
                id.Should().Be("id_" + item.ID);
                repository.Verify(t => t.DeleteAllObjByTag("id_" + item.ID.ToString()), Times.Once);
            }
        }