Skip to content

Commit 866fc5e

Browse files
committed
Adding a search filter test and ensuring all tests clean up.
1 parent 8db9d27 commit 866fc5e

File tree

1 file changed

+167
-73
lines changed

1 file changed

+167
-73
lines changed
Lines changed: 167 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
using Lucene.Net.Analysis.Standard;
12
using Lucene.Net.Index;
3+
using Lucene.Net.QueryParsers;
24
using Lucene.Net.Search;
35
using NUnit.Framework;
46
using System;
57
using System.Collections;
8+
using System.Linq;
9+
using Version = Lucene.Net.Util.Version;
610

711
namespace NHibernate.Search.Tests.Filter
812
{
@@ -23,108 +27,184 @@ protected override IList Mappings
2327
[Test]
2428
public void ParameterizedFilter()
2529
{
26-
CreateData();
27-
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
28-
s.Transaction.Begin();
29-
BooleanQuery query = new BooleanQuery();
30-
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
31-
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
32-
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
30+
try
31+
{
32+
CreateData();
33+
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
34+
s.Transaction.Begin();
35+
BooleanQuery query = new BooleanQuery();
36+
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
37+
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
38+
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
3339

34-
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
35-
ftQuery.EnableFullTextFilter("security").SetParameter("Login", "andre");
36-
Assert.AreEqual(1, ftQuery.ResultSize, "Should filter to limit to Emmanuel");
40+
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
41+
ftQuery.EnableFullTextFilter("security").SetParameter("Login", "andre");
42+
Assert.AreEqual(1, ftQuery.ResultSize, "Should filter to limit to Emmanuel");
3743

38-
s.Transaction.Commit();
39-
s.Close();
40-
DeleteData();
44+
s.Transaction.Commit();
45+
s.Close();
46+
}
47+
finally
48+
{
49+
DeleteData();
50+
}
51+
}
52+
53+
[Test]
54+
public void ParameterizedFilterWithSearchQuery()
55+
{
56+
try
57+
{
58+
const string n = "NoMatch";
59+
const string y = "Match";
60+
61+
using (var session = OpenSession())
62+
{
63+
session.Transaction.Begin();
64+
65+
var deliveryDate = new DateTime(2000, 1, 1);
66+
saveNewDriver(session, 1, n, n, deliveryDate, -1);
67+
saveNewDriver(session, 2, y, y, deliveryDate, -1);
68+
saveNewDriver(session, 3, y, y, deliveryDate, -1);
69+
saveNewDriver(session, 4, n, n, deliveryDate, -1);
70+
saveNewDriver(session, 5, y, y, deliveryDate, -1);
71+
saveNewDriver(session, 6, n, y, deliveryDate, -1);
72+
saveNewDriver(session, 7, n, n, deliveryDate, -1);
73+
saveNewDriver(session, 8, y, n, deliveryDate, -1);
74+
saveNewDriver(session, 9, y, y, deliveryDate, -1);
75+
saveNewDriver(session, 10, n, n, deliveryDate, -1);
76+
saveNewDriver(session, 11, y, y, deliveryDate, -1);
77+
saveNewDriver(session, 12, n, n, deliveryDate, -1);
78+
saveNewDriver(session, 13, n, n, deliveryDate, -1);
79+
saveNewDriver(session, 14, n, y, deliveryDate, -1);
80+
saveNewDriver(session, 15, y, n, deliveryDate, -1);
81+
session.Transaction.Commit();
82+
}
83+
84+
using (var session = OpenSession())
85+
using (var ftSession = Search.CreateFullTextSession(session))
86+
{
87+
var parser = new QueryParser(Version.LUCENE_29, "name", new StandardAnalyzer(Version.LUCENE_29));
88+
var query = parser.Parse("name:" + y);
89+
var ftQuery = ftSession.CreateFullTextQuery(query, typeof (Driver));
90+
ftQuery.EnableFullTextFilter("security").SetParameter("Login", y);
91+
var results = ftQuery.List();
92+
93+
var expectedIds = new[] {2, 3, 5, 9, 11};
94+
var actualIds = results.Cast<Driver>().OrderBy(x => x.Id).Select(x => x.Id);
95+
Assert.AreEqual(expectedIds, actualIds, "The query should return only drivers where name AND teacher match.");
96+
}
97+
}
98+
finally
99+
{
100+
DeleteData();
101+
}
41102
}
42103

43104
[Test]
44105
[Ignore("Need to implement BestDriversFilter")]
45106
public void CombinedFilters()
46107
{
47-
CreateData();
48-
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
49-
s.Transaction.Begin();
50-
BooleanQuery query = new BooleanQuery();
51-
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
52-
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
53-
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
54-
55-
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
56-
ftQuery.EnableFullTextFilter("bestDriver");
57-
ftQuery.EnableFullTextFilter("security").SetParameter("Login", "andre");
58-
Assert.AreEqual(1, ftQuery.ResultSize, "Should filter to limit to Emmanuel");
59-
60-
ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
61-
ftQuery.EnableFullTextFilter("bestDriver");
62-
ftQuery.EnableFullTextFilter("security").SetParameter("login", "andre");
63-
ftQuery.DisableFullTextFilter("security");
64-
ftQuery.DisableFullTextFilter("bestDriver");
65-
Assert.AreEqual(3, ftQuery.ResultSize, "Should not filter anymore");
108+
try
109+
{
110+
CreateData();
111+
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
112+
s.Transaction.Begin();
113+
BooleanQuery query = new BooleanQuery();
114+
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
115+
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
116+
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
66117

67-
s.Transaction.Commit();
68-
s.Close();
69-
DeleteData();
118+
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
119+
ftQuery.EnableFullTextFilter("bestDriver");
120+
ftQuery.EnableFullTextFilter("security").SetParameter("Login", "andre");
121+
Assert.AreEqual(1, ftQuery.ResultSize, "Should filter to limit to Emmanuel");
122+
123+
ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
124+
ftQuery.EnableFullTextFilter("bestDriver");
125+
ftQuery.EnableFullTextFilter("security").SetParameter("login", "andre");
126+
ftQuery.DisableFullTextFilter("security");
127+
ftQuery.DisableFullTextFilter("bestDriver");
128+
Assert.AreEqual(3, ftQuery.ResultSize, "Should not filter anymore");
129+
130+
s.Transaction.Commit();
131+
s.Close();
132+
}
133+
finally
134+
{
135+
DeleteData();
136+
}
70137
}
71138

72139
[Test]
73140
[Ignore("Need to implement ExcludeAllFilter")]
74141
public void Cache()
75142
{
76-
CreateData();
77-
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
78-
s.Transaction.Begin();
79-
BooleanQuery query = new BooleanQuery();
80-
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
81-
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
82-
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
143+
try
144+
{
145+
CreateData();
146+
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
147+
s.Transaction.Begin();
148+
BooleanQuery query = new BooleanQuery();
149+
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
150+
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
151+
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
83152

84-
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
85-
Assert.AreEqual(3, ftQuery.ResultSize, "No filter should happen");
153+
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
154+
Assert.AreEqual(3, ftQuery.ResultSize, "No filter should happen");
86155

87-
ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
88-
ftQuery.EnableFullTextFilter("cachetest");
89-
Assert.AreEqual(0, ftQuery.ResultSize, "Should filter out all");
156+
ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
157+
ftQuery.EnableFullTextFilter("cachetest");
158+
Assert.AreEqual(0, ftQuery.ResultSize, "Should filter out all");
159+
160+
ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
161+
ftQuery.EnableFullTextFilter("cachetest");
162+
try
163+
{
164+
int i = ftQuery.ResultSize;
165+
}
166+
catch (NotSupportedException)
167+
{
168+
Assert.Fail("Cache does not work");
169+
}
170+
171+
s.Transaction.Commit();
172+
s.Close();
90173

91-
ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
92-
ftQuery.EnableFullTextFilter("cachetest");
93-
try
94-
{
95-
int i = ftQuery.ResultSize;
96174
}
97-
catch (NotSupportedException)
175+
finally
98176
{
99-
Assert.Fail("Cache does not work");
177+
DeleteData();
100178
}
101-
102-
s.Transaction.Commit();
103-
s.Close();
104-
DeleteData();
105179
}
106180

107181
[Test]
108182
[Ignore("Need to implement BestDriversFilter")]
109183
public void StraightFilters()
110184
{
111-
CreateData();
112-
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
113-
s.Transaction.Begin();
114-
BooleanQuery query = new BooleanQuery();
115-
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
116-
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
117-
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
185+
try
186+
{
187+
CreateData();
188+
IFullTextSession s = Search.CreateFullTextSession(OpenSession());
189+
s.Transaction.Begin();
190+
BooleanQuery query = new BooleanQuery();
191+
query.Add(new TermQuery(new Term("teacher", "andre")), BooleanClause.Occur.SHOULD);
192+
query.Add(new TermQuery(new Term("teacher", "max")), BooleanClause.Occur.SHOULD);
193+
query.Add(new TermQuery(new Term("teacher", "aaron")), BooleanClause.Occur.SHOULD);
118194

119-
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
120-
ftQuery.EnableFullTextFilter("bestDriver");
121-
Lucene.Net.Search.Filter dateFilter = new RangeFilter("delivery", "2001", "2005", true, true);
122-
ftQuery.SetFilter(dateFilter);
123-
Assert.AreEqual(1, ftQuery.ResultSize, "Should select only liz");
195+
IFullTextQuery ftQuery = s.CreateFullTextQuery(query, typeof(Driver));
196+
ftQuery.EnableFullTextFilter("bestDriver");
197+
Lucene.Net.Search.Filter dateFilter = new RangeFilter("delivery", "2001", "2005", true, true);
198+
ftQuery.SetFilter(dateFilter);
199+
Assert.AreEqual(1, ftQuery.ResultSize, "Should select only liz");
124200

125-
s.Transaction.Commit();
126-
s.Close();
127-
DeleteData();
201+
s.Transaction.Commit();
202+
s.Close();
203+
}
204+
finally
205+
{
206+
DeleteData();
207+
}
128208
}
129209

130210
#endregion
@@ -171,6 +251,20 @@ private void CreateData()
171251
s.Transaction.Commit();
172252
s.Close();
173253
}
254+
255+
private static void saveNewDriver(ISession session, int id, string name, string teacher, DateTime delivery, int score)
256+
{
257+
var driver = new Driver
258+
{
259+
Id = id,
260+
Name = name,
261+
Teacher = teacher,
262+
Delivery = delivery,
263+
Score = score
264+
};
265+
session.Save(driver);
266+
}
267+
174268
#endregion
175269
}
176270
}

0 commit comments

Comments
 (0)