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); }
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); }
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); }