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 IndexBuilder()
        {
            var algoliaRepository = new Mock <IAlgoliaRepository>();

            _index         = new AlgoliaBaseIndex("index_name", algoliaRepository.Object);
            _configuration = new AlgoliaIndexConfiguration
            {
                DocumentOptions = new DocumentBuilderOptions(),
                FieldMap        = new FieldMap(),
                FieldReaders    = new FieldReaderMap(),
            };
            _index.Configuration = _configuration;
        }
        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);
            }
        }