-
Notifications
You must be signed in to change notification settings - Fork 1
/
dm_lucene_adapter_spec.rb
156 lines (131 loc) · 4.52 KB
/
dm_lucene_adapter_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
require File.dirname(__FILE__) + '/spec_helper'
describe DataMapper::Adapters::LuceneAdapter do
it "should create" do
Book.create(:author => "kristian", :title => "me and the corner").new?.should be_false
end
it "should read all" do
size = Book.all.size
(1..3).each do
Book.create(:author => "kristian", :title => "me and the corner")
end
b = Book.all
b.size.should == size + 3
end
it "should delete" do
books = []
(1..4).each do
books << Book.create(:author => "kristian", :title => "me and the corner")
end
id = books.last.id
size = Book.all.size
books.each do |b|
b.destroy if b.id % 2 == 0
end
b = Book.all
size.should == b.size + 2
book = Book.create(:author => "kristian 2", :title => "me and the corner 2")
id.should == book.id
b = Book.all
size.should == b.size + 1
end
it 'should read a single' do
book = Book.create(:author => "kristian", :title => "me and the corner")
b = Book.get(book.id)
b.id.should == book.id
end
it 'should update' do
book = Book.create(:author => "kristian", :title => "me and the corner")
book.author = "sanuka"
book.save
b = Book.get(book.id)
b.author.should == "sanuka"
end
describe "search" do
before :all do
@size = Book.all(:author => "sanuka").size
@len = 5
(1..@len).each do |i|
Book.create(:author => "kristian", :title => "me and the corner #{i}")
Book.create(:author => "sanuka", :title => "me and the corner #{i}")
Book.create(:author => "#{i}sanuka", :title => "me and the corner")
Book.create(:author => "#{i}sanuka#{i}", :title => "me and the corner")
end
end
describe "ascending" do
after :each do
id = 0
@books.each do |b|
b.id.should > id
id = b.id
end
end
it 'should find 5 with simple query' do
@books = Book.all(:author => "sanuka")
@books.size.should == @size + @len
@books.each { |b| b.author.should == "sanuka" }
end
it 'should find 5 with not query' do
@books = Book.all(:author.not => "sanuka")
@books.each { |b| b.author.should_not == "sanuka" }
(@books.size + @size + @len).should == Book.all.size
end
it 'should find nothing with simple query' do
@books = Book.all(:author => "saumya")
@books.size.should == 0
end
it 'should find 5 with fuzzy query' do
@books = Book.all(:author.like => "sanaku")
@books.size.should == @size + @len
@books.each { |b| b.author.should =~ /sanuka/ }
end
it 'should find 5 with fuzzy query on total' do
@books = Book.all(:total.like => "sanaku corner")
@books.size.should == @size + @len
@books.each { |b| b.author.should =~ /sanuka/ }
end
it 'should find 5 with single char wildcards query' do
@books = Book.all(:author.like => "san?k?")
@books.size.should == @size + @len
@books.each { |b| b.author.should =~ /sanuka/ }
end
it 'should find 5 with wildcards query' do
@books = Book.all(:author.like => "sa*ka")
@books.size.should == @size + @len
@books.each { |b| b.author.should =~ /sanuka/ }
end
it 'should obey offset' do
@books = Book.all(:author.like => "san?k?", :limit => @size)
@books.size.should == @size
end
it 'should obey offset with empty query' do
@books = Book.all(:limit => @size)
@books.size.should == @size
end
it 'should obey offset and limit' do
@books = Book.all(:author.like => "san?k?", :offset => @size, :limit => @len)
@books.size.should == @len
end
it 'should obey offset and limit with empty query' do
@books = Book.all(:offset => @size, :limit => @len)
@books.size.should == @len
end
end
describe "descending" do
after :each do
id = 12311230123321
@books.each do |b|
b.id.should < id
id = b.id
end
end
it 'should obey offset and limit descending order' do
@books = Book.all(:author.like => "san?k?", :offset => @size, :limit => @len, :order => [:id.desc])
@books.size.should == @len
end
it 'should obey offset and limit descending order with emtpy query' do
@books = Book.all(:offset => @len, :limit => @size, :order => [:id.desc])
@books.size.should == @size
end
end
end
end