private static void AssertFilter(string documentType, IEnumerable <DynamicWrapper> items, Func <IDocumentFilterBuilder, object> expectedFilter, Func <IDocumentFilterBuilder, object> actualFilter)
        {
            var documentStorage = DocumentStorageTestHelpers.GetEmptyStorage(documentType);

            documentStorage.InsertMany(items);
            AssertFilter(documentStorage, expectedFilter, actualFilter);
        }
예제 #2
0
        private static void AssertSelect(string documentType, DynamicWrapper item, Action <IDocumentProjectionBuilder> expectedSelect, Action <IDocumentProjectionBuilder> actualSelect)
        {
            var documentStorage = DocumentStorageTestHelpers.GetEmptyStorage(documentType);

            documentStorage.InsertOne(item);

            var expectedValue = documentStorage.Find().Project(expectedSelect).FirstOrDefault();
            var actualValue   = documentStorage.Find().Project(actualSelect).FirstOrDefault();

            AreEqualDynamicWrapper(expectedValue, actualValue);
        }
예제 #3
0
        public void ShouldIncludeTextScore()
        {
            // Given

            const string selectExpression1 = "textScore()";
            const string selectExpression2 = "textScore(myTextScore)";

            Action <IDocumentProjectionBuilder> expectedSelectExpression1 = p => p.IncludeTextScore();
            Action <IDocumentProjectionBuilder> expectedSelectExpression2 = p => p.IncludeTextScore("myTextScore");

            var item = new DynamicWrapper
            {
                { "prop1", "Item1" },
                { "prop2", 12345 },
                { "date", DateTime.Today }
            };

            // When
            var selectActualExpression1 = ParseSelect(selectExpression1);
            var selectActualExpression2 = ParseSelect(selectExpression2);

            // Then

            var textIndex = new DocumentIndex {
                Key = new Dictionary <string, DocumentIndexKeyType> {
                    { "prop1", DocumentIndexKeyType.Text }
                }
            };
            var documentStorage = DocumentStorageTestHelpers.GetEmptyStorage(nameof(ShouldIncludeTextScore), textIndex);

            documentStorage.InsertOne(item);

            var expectedValue1 = documentStorage.FindText("Item1").Project(expectedSelectExpression1).FirstOrDefault();
            var actualValue1   = documentStorage.FindText("Item1").Project(selectActualExpression1).FirstOrDefault();

            AreEqualDynamicWrapper(expectedValue1, actualValue1);

            var expectedValue2 = documentStorage.FindText("Item1").Project(expectedSelectExpression2).FirstOrDefault();
            var actualValue2   = documentStorage.FindText("Item1").Project(selectActualExpression2).FirstOrDefault();

            AreEqualDynamicWrapper(expectedValue2, actualValue2);
        }
        public void ShouldFilterByText()
        {
            // Given

            const string searchSingleWordFilter                        = "text('coffee')";
            const string searchWithoutTermFilter                       = "text('coffee -shop')";
            const string searchWithLanguageFilter                      = "text('leche', 'es')";
            const string diacriticInsensitiveSearchFilter              = "text('сы́рники CAFÉS')";
            const string caseSensitiveSearchForTermFilter              = "text('Coffee', null, true)";
            const string caseSensitiveSearchForPhraseFilter            = "text('\"Café Con Leche\"', null, true)";
            const string caseSensitiveSearchWithNegatedTermFilter      = "text('Coffee -shop', null, true)";
            const string diacriticSensitiveSearchForTermFilter         = "text('CAFÉ', null, false, true)";
            const string diacriticSensitiveSearchWithNegatedTermFilter = "text('leches -cafés', null, false, true)";

            Func <IDocumentFilterBuilder, object> searchSingleWordExpectedFilter                        = f => f.Text("coffee");
            Func <IDocumentFilterBuilder, object> searchWithoutTermExpectedFilter                       = f => f.Text("coffee -shop");
            Func <IDocumentFilterBuilder, object> searchWithLanguageExpectedFilter                      = f => f.Text("leche", "es");
            Func <IDocumentFilterBuilder, object> diacriticInsensitiveSearchExpectedFilter              = f => f.Text("сы́рники CAFÉS");
            Func <IDocumentFilterBuilder, object> caseSensitiveSearchForTermExpectedFilter              = f => f.Text("Coffee", caseSensitive: true);
            Func <IDocumentFilterBuilder, object> caseSensitiveSearchForPhraseExpectedFilter            = f => f.Text("\"Café Con Leche\"", caseSensitive: true);
            Func <IDocumentFilterBuilder, object> caseSensitiveSearchWithNegatedTermExpectedFilter      = f => f.Text("Coffee -shop", caseSensitive: true);
            Func <IDocumentFilterBuilder, object> diacriticSensitiveSearchForTermExpectedFilter         = f => f.Text("CAFÉ", diacriticSensitive: true);
            Func <IDocumentFilterBuilder, object> diacriticSensitiveSearchWithNegatedTermExpectedFilter = f => f.Text("leches -cafés", diacriticSensitive: true);

            var items = new[]
            {
                new DynamicWrapper {
                    { "_id", 1 }, { "subject", "coffee" }, { "author", "xyz" }, { "views", 50 }
                },
                new DynamicWrapper {
                    { "_id", 2 }, { "subject", "Coffee Shopping" }, { "author", "efg" }, { "views", 5 }
                },
                new DynamicWrapper {
                    { "_id", 3 }, { "subject", "Baking a cake" }, { "author", "abc" }, { "views", 90 }
                },
                new DynamicWrapper {
                    { "_id", 4 }, { "subject", "baking" }, { "author", "xyz" }, { "views", 100 }
                },
                new DynamicWrapper {
                    { "_id", 5 }, { "subject", "Café Con Leche" }, { "author", "abc" }, { "views", 200 }
                },
                new DynamicWrapper {
                    { "_id", 6 }, { "subject", "Сырники" }, { "author", "jkl" }, { "views", 80 }
                },
                new DynamicWrapper {
                    { "_id", 7 }, { "subject", "coffee and cream" }, { "author", "efg" }, { "views", 10 }
                },
                new DynamicWrapper {
                    { "_id", 8 }, { "subject", "Cafe con Leche" }, { "author", "xyz" }, { "views", 10 }
                }
            };

            // When
            var searchSingleWordActualFilter                        = ParseFilter(searchSingleWordFilter);
            var searchWithoutTermActualFilter                       = ParseFilter(searchWithoutTermFilter);
            var searchWithLanguageActualFilter                      = ParseFilter(searchWithLanguageFilter);
            var diacriticInsensitiveSearchActualFilter              = ParseFilter(diacriticInsensitiveSearchFilter);
            var caseSensitiveSearchForTermActualFilter              = ParseFilter(caseSensitiveSearchForTermFilter);
            var caseSensitiveSearchForPhraseActualFilter            = ParseFilter(caseSensitiveSearchForPhraseFilter);
            var caseSensitiveSearchWithNegatedTermActualFilter      = ParseFilter(caseSensitiveSearchWithNegatedTermFilter);
            var diacriticSensitiveSearchForTermActualFilter         = ParseFilter(diacriticSensitiveSearchForTermFilter);
            var diacriticSensitiveSearchWithNegatedTermActualFilter = ParseFilter(diacriticSensitiveSearchWithNegatedTermFilter);

            // Then

            var textIndex = new DocumentIndex {
                Key = new Dictionary <string, DocumentIndexKeyType> {
                    { "subject", DocumentIndexKeyType.Text }
                }
            };
            var documentStorage = DocumentStorageTestHelpers.GetEmptyStorage(nameof(ShouldFilterByText), textIndex);

            documentStorage.InsertMany(items);

            AssertFilter(documentStorage, searchSingleWordExpectedFilter, searchSingleWordActualFilter);
            AssertFilter(documentStorage, searchWithoutTermExpectedFilter, searchWithoutTermActualFilter);
            AssertFilter(documentStorage, searchWithLanguageExpectedFilter, searchWithLanguageActualFilter);
            AssertFilter(documentStorage, diacriticInsensitiveSearchExpectedFilter, diacriticInsensitiveSearchActualFilter);
            AssertFilter(documentStorage, caseSensitiveSearchForTermExpectedFilter, caseSensitiveSearchForTermActualFilter);
            AssertFilter(documentStorage, caseSensitiveSearchForPhraseExpectedFilter, caseSensitiveSearchForPhraseActualFilter);
            AssertFilter(documentStorage, caseSensitiveSearchWithNegatedTermExpectedFilter, caseSensitiveSearchWithNegatedTermActualFilter);
            AssertFilter(documentStorage, diacriticSensitiveSearchForTermExpectedFilter, diacriticSensitiveSearchForTermActualFilter);
            AssertFilter(documentStorage, diacriticSensitiveSearchWithNegatedTermExpectedFilter, diacriticSensitiveSearchWithNegatedTermActualFilter);
        }