public void UsingDuplicateFieldNameShouldThrowException()
        {
            IObjectTokenization config = new ObjectTokenizationBuilder <string, string>()
                                         .WithField("Field1", o => o)
                                         .WithField("Field2", o => o)
                                         .WithField("Field1", o => o)
                                         .WithKey(i => i)
                                         .Build();

            Assert.Throws <LiftiException>(() => new IndexedFieldLookup(config.GetConfiguredFields(), new PlainTextExtractor(), Tokenizer.Default))
            .Message.Should().Be("Duplicate field name used: Field1. Field names must be unique across all item types registered with an index.");
        }
        /// <summary>
        /// Creates an <see cref="ObjectTokenization{TItem, TKey}"/> configuration entry for an item of type <typeparamref name="TItem"/>
        /// in the index.
        /// </summary>
        /// <param name="optionsBuilder">
        /// A delegate capable of specifying all the required options for the item tokenization options.
        /// </param>
        public FullTextIndexBuilder <TKey> WithObjectTokenization <TItem>(Func <ObjectTokenizationBuilder <TItem, TKey>, ObjectTokenizationBuilder <TItem, TKey> > optionsBuilder)
        {
            if (optionsBuilder is null)
            {
                throw new ArgumentNullException(nameof(optionsBuilder));
            }

            var builder = new ObjectTokenizationBuilder <TItem, TKey>();

            this.itemTokenizationOptions.Add(optionsBuilder(builder).Build());

            return(this);
        }
        public void UsingMoreThan255IdsShouldThrowException()
        {
            var itemConfigBuilder = new ObjectTokenizationBuilder <string, string>()
                                    .WithKey(i => i);

            for (var i = 0; i < 256; i++)
            {
                itemConfigBuilder = itemConfigBuilder.WithField("Field" + i, r => r);
            }

            IObjectTokenization config = itemConfigBuilder.Build();

            Assert.Throws <LiftiException>(() => new IndexedFieldLookup(config.GetConfiguredFields(), new PlainTextExtractor(), Tokenizer.Default))
            .Message.Should().Be("Only 255 distinct fields can currently be indexed");
        }
        public IndexedFieldLookupTests()
        {
            IObjectTokenization itemConfig = new ObjectTokenizationBuilder <string, string>()
                                             .WithKey(i => i)
                                             .WithField("Field1", r => r)
                                             .WithField("Field2", r => r)
                                             .WithField("Field3", r => r)
                                             .WithField("FieldX", r => r, o => o.WithStemming())
                                             .WithField("FieldY", r => r)
                                             .Build();

            this.sut = new IndexedFieldLookup(
                itemConfig.GetConfiguredFields(),
                new PlainTextExtractor(),
                Tokenizer.Default);
        }