// ----------------------------------------------------------------------- // // Copyright (c) Hibernating Rhinos LTD. All rights reserved. // // ----------------------------------------------------------------------- using System.Linq; using Raven.Abstractions.Indexing; using Raven.Abstractions.Util; using Raven.Client; using Raven.Client.Indexes; using Raven.Tests.Helpers; using Xunit; namespace Raven.Tests.Issues { public class RavenDB_4300 : RavenTestBase { // The search text must // (1) contain a space // (2) end in a backslash private const string SearchText = "Thing One \\"; [Fact] public void Escaping_Beforehand_Works() { using (var store = NewRemoteDocumentStore()) { new ExampleIndex().Execute(store); Populate(store); WaitForIndexing(store); using (var session = store.OpenSession()) { var query = session.Query(); query.Customize(c => c.WaitForNonStaleResultsAsOfLastWrite()); var results = query.Where(x => x.Name == RavenQuery.Escape(SearchText, false, false)) .As() .ToList(); Assert.NotEmpty(results); } } } [Fact] public void No_Escaping_Causes_Error() { using (var store = NewRemoteDocumentStore()) { new ExampleIndex().Execute(store); Populate(store); WaitForIndexing(store); using (var session = store.OpenSession()) { var query = session.Query(); query.Customize(c => c.WaitForNonStaleResultsAsOfLastWrite()); var results = query.Where(x => x.Name == SearchText) .As() .ToList(); Assert.NotEmpty(results); } } } private static void Populate(IDocumentStore store) { using (var session = store.OpenSession()) { var example1 = new Example { Name = "Thing One \\" }; var example2 = new Example { Name = "Thing Two" }; var example3 = new Example { Name = "Thing Three" }; session.Store(example1); session.Store(example2); session.Store(example3); session.SaveChanges(); } } public class Example { public string Name { get; set; } } public class ExampleIndex : AbstractIndexCreationTask { public ExampleIndex() { Map = venues => from v in venues select new { v.Name, }; Index(x => x.Name, FieldIndexing.Analyzed); } public class ReduceResult { public string Name { get; set; } } } } }