elasticsearch-model 6.0.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +5 -0
- data/README.md +14 -7
- data/Rakefile +27 -36
- data/elasticsearch-model.gemspec +1 -1
- data/examples/activerecord_mapping_completion.rb +2 -15
- data/gemfiles/3.0.gemfile +6 -1
- data/gemfiles/4.0.gemfile +7 -1
- data/gemfiles/5.0.gemfile +6 -0
- data/lib/elasticsearch/model.rb +15 -8
- data/lib/elasticsearch/model/adapters/active_record.rb +7 -26
- data/lib/elasticsearch/model/indexing.rb +5 -3
- data/lib/elasticsearch/model/naming.rb +6 -1
- data/lib/elasticsearch/model/response.rb +2 -2
- data/lib/elasticsearch/model/response/pagination.rb +2 -192
- data/lib/elasticsearch/model/response/pagination/kaminari.rb +109 -0
- data/lib/elasticsearch/model/response/pagination/will_paginate.rb +95 -0
- data/lib/elasticsearch/model/response/result.rb +1 -1
- data/lib/elasticsearch/model/version.rb +1 -1
- data/spec/elasticsearch/model/adapter_spec.rb +119 -0
- data/spec/elasticsearch/model/adapters/active_record/associations_spec.rb +334 -0
- data/spec/elasticsearch/model/adapters/active_record/basic_spec.rb +340 -0
- data/spec/elasticsearch/model/adapters/active_record/dynamic_index_name_spec.rb +18 -0
- data/spec/elasticsearch/model/adapters/active_record/import_spec.rb +187 -0
- data/spec/elasticsearch/model/adapters/active_record/multi_model_spec.rb +110 -0
- data/spec/elasticsearch/model/adapters/active_record/namespaced_model_spec.rb +38 -0
- data/spec/elasticsearch/model/adapters/active_record/pagination_spec.rb +315 -0
- data/spec/elasticsearch/model/adapters/active_record/parent_child_spec.rb +75 -0
- data/spec/elasticsearch/model/adapters/active_record/serialization_spec.rb +61 -0
- data/spec/elasticsearch/model/adapters/active_record_spec.rb +207 -0
- data/spec/elasticsearch/model/adapters/default_spec.rb +41 -0
- data/spec/elasticsearch/model/adapters/mongoid/basic_spec.rb +267 -0
- data/spec/elasticsearch/model/adapters/mongoid/multi_model_spec.rb +66 -0
- data/spec/elasticsearch/model/adapters/mongoid_spec.rb +235 -0
- data/spec/elasticsearch/model/adapters/multiple_spec.rb +125 -0
- data/spec/elasticsearch/model/callbacks_spec.rb +33 -0
- data/spec/elasticsearch/model/client_spec.rb +66 -0
- data/spec/elasticsearch/model/hash_wrapper_spec.rb +12 -0
- data/spec/elasticsearch/model/importing_spec.rb +214 -0
- data/spec/elasticsearch/model/indexing_spec.rb +918 -0
- data/spec/elasticsearch/model/module_spec.rb +101 -0
- data/spec/elasticsearch/model/multimodel_spec.rb +55 -0
- data/spec/elasticsearch/model/naming_inheritance_spec.rb +184 -0
- data/spec/elasticsearch/model/naming_spec.rb +186 -0
- data/spec/elasticsearch/model/proxy_spec.rb +107 -0
- data/spec/elasticsearch/model/response/aggregations_spec.rb +66 -0
- data/spec/elasticsearch/model/response/base_spec.rb +90 -0
- data/spec/elasticsearch/model/response/pagination/kaminari_spec.rb +410 -0
- data/spec/elasticsearch/model/response/pagination/will_paginate_spec.rb +262 -0
- data/spec/elasticsearch/model/response/records_spec.rb +118 -0
- data/spec/elasticsearch/model/response/response_spec.rb +131 -0
- data/spec/elasticsearch/model/response/result_spec.rb +122 -0
- data/spec/elasticsearch/model/response/results_spec.rb +56 -0
- data/spec/elasticsearch/model/searching_search_request_spec.rb +112 -0
- data/spec/elasticsearch/model/searching_spec.rb +49 -0
- data/spec/elasticsearch/model/serializing_spec.rb +22 -0
- data/spec/spec_helper.rb +161 -0
- data/spec/support/app.rb +21 -0
- data/spec/support/app/answer.rb +33 -0
- data/spec/support/app/article.rb +22 -0
- data/spec/support/app/article_for_pagination.rb +12 -0
- data/spec/support/app/article_with_custom_serialization.rb +13 -0
- data/spec/support/app/article_with_dynamic_index_name.rb +15 -0
- data/spec/support/app/author.rb +9 -0
- data/spec/support/app/authorship.rb +4 -0
- data/spec/support/app/category.rb +3 -0
- data/spec/support/app/comment.rb +3 -0
- data/spec/support/app/episode.rb +11 -0
- data/spec/support/app/image.rb +19 -0
- data/spec/support/app/import_article.rb +12 -0
- data/spec/support/app/mongoid_article.rb +21 -0
- data/spec/support/app/namespaced_book.rb +10 -0
- data/spec/support/app/parent_and_child_searchable.rb +24 -0
- data/spec/support/app/post.rb +14 -0
- data/spec/support/app/question.rb +27 -0
- data/spec/support/app/searchable.rb +48 -0
- data/spec/support/app/series.rb +11 -0
- data/spec/support/model.json +1 -0
- data/{test → spec}/support/model.yml +0 -0
- metadata +129 -86
- data/test/integration/active_record_associations_parent_child_test.rb +0 -188
- data/test/integration/active_record_associations_test.rb +0 -339
- data/test/integration/active_record_basic_test.rb +0 -255
- data/test/integration/active_record_custom_serialization_test.rb +0 -67
- data/test/integration/active_record_import_test.rb +0 -168
- data/test/integration/active_record_namespaced_model_test.rb +0 -56
- data/test/integration/active_record_pagination_test.rb +0 -149
- data/test/integration/dynamic_index_name_test.rb +0 -52
- data/test/integration/mongoid_basic_test.rb +0 -240
- data/test/integration/multiple_models_test.rb +0 -176
- data/test/support/model.json +0 -1
- data/test/test_helper.rb +0 -92
- data/test/unit/adapter_active_record_test.rb +0 -157
- data/test/unit/adapter_default_test.rb +0 -41
- data/test/unit/adapter_mongoid_test.rb +0 -161
- data/test/unit/adapter_multiple_test.rb +0 -106
- data/test/unit/adapter_test.rb +0 -69
- data/test/unit/callbacks_test.rb +0 -31
- data/test/unit/client_test.rb +0 -27
- data/test/unit/hash_wrapper_test.rb +0 -13
- data/test/unit/importing_test.rb +0 -224
- data/test/unit/indexing_test.rb +0 -720
- data/test/unit/module_test.rb +0 -68
- data/test/unit/multimodel_test.rb +0 -38
- data/test/unit/naming_inheritance_test.rb +0 -94
- data/test/unit/naming_test.rb +0 -103
- data/test/unit/proxy_test.rb +0 -98
- data/test/unit/response_aggregations_test.rb +0 -46
- data/test/unit/response_base_test.rb +0 -40
- data/test/unit/response_pagination_kaminari_test.rb +0 -433
- data/test/unit/response_pagination_will_paginate_test.rb +0 -398
- data/test/unit/response_records_test.rb +0 -91
- data/test/unit/response_result_test.rb +0 -90
- data/test/unit/response_results_test.rb +0 -34
- data/test/unit/response_test.rb +0 -104
- data/test/unit/searching_search_request_test.rb +0 -78
- data/test/unit/searching_test.rb +0 -41
- data/test/unit/serializing_test.rb +0 -17
@@ -1,398 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'will_paginate'
|
3
|
-
require 'will_paginate/collection'
|
4
|
-
|
5
|
-
class Elasticsearch::Model::ResponsePaginationWillPaginateTest < Test::Unit::TestCase
|
6
|
-
class ModelClass
|
7
|
-
def self.index_name; 'foo'; end
|
8
|
-
def self.document_type; 'bar'; end
|
9
|
-
|
10
|
-
# WillPaginate adds this method to models (see WillPaginate::PerPage module)
|
11
|
-
def self.per_page
|
12
|
-
33
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Subsclass Response so we can include WillPaginate module without conflicts with Kaminari.
|
17
|
-
class WillPaginateResponse < Elasticsearch::Model::Response::Response
|
18
|
-
include Elasticsearch::Model::Response::Pagination::WillPaginate
|
19
|
-
end
|
20
|
-
|
21
|
-
RESPONSE = { 'took' => '5', 'timed_out' => false, '_shards' => {'one' => 'OK'},
|
22
|
-
'hits' => { 'total' => 100, 'hits' => (1..100).to_a.map { |i| { _id: i } } } }
|
23
|
-
|
24
|
-
context "Response pagination" do
|
25
|
-
|
26
|
-
setup do
|
27
|
-
@search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass, '*'
|
28
|
-
@response = WillPaginateResponse.new ModelClass, @search, RESPONSE
|
29
|
-
@response.klass.stubs(:client).returns mock('client')
|
30
|
-
|
31
|
-
@expected_methods = [
|
32
|
-
# methods needed by WillPaginate::CollectionMethods
|
33
|
-
:current_page,
|
34
|
-
:offset,
|
35
|
-
:per_page,
|
36
|
-
:total_entries,
|
37
|
-
:length,
|
38
|
-
|
39
|
-
# methods defined by WillPaginate::CollectionMethods
|
40
|
-
:total_pages,
|
41
|
-
:previous_page,
|
42
|
-
:next_page,
|
43
|
-
:out_of_bounds?,
|
44
|
-
]
|
45
|
-
end
|
46
|
-
|
47
|
-
should "have pagination methods" do
|
48
|
-
assert_respond_to @response, :paginate
|
49
|
-
|
50
|
-
@expected_methods.each do |method|
|
51
|
-
assert_respond_to @response, method
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context "response.results" do
|
56
|
-
should "have pagination methods" do
|
57
|
-
@expected_methods.each do |method|
|
58
|
-
assert_respond_to @response.results, method
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "response.records" do
|
64
|
-
should "have pagination methods" do
|
65
|
-
@expected_methods.each do |method|
|
66
|
-
@response.klass.stubs(:find).returns([])
|
67
|
-
assert_respond_to @response.records, method
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "#offset method" do
|
73
|
-
should "calculate offset using current_page and per_page" do
|
74
|
-
@response.per_page(3).page(3)
|
75
|
-
assert_equal 6, @response.offset
|
76
|
-
end
|
77
|
-
end
|
78
|
-
context "#length method" do
|
79
|
-
should "return count of paginated results" do
|
80
|
-
@response.per_page(3).page(3)
|
81
|
-
assert_equal 3, @response.length
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context "#paginate method" do
|
86
|
-
should "set from/size using defaults" do
|
87
|
-
@response.klass.client
|
88
|
-
.expects(:search)
|
89
|
-
.with do |definition|
|
90
|
-
assert_equal 0, definition[:from]
|
91
|
-
assert_equal 33, definition[:size]
|
92
|
-
true
|
93
|
-
end
|
94
|
-
.returns(RESPONSE)
|
95
|
-
|
96
|
-
assert_nil @response.search.definition[:from]
|
97
|
-
assert_nil @response.search.definition[:size]
|
98
|
-
|
99
|
-
@response.paginate(page: nil).to_a
|
100
|
-
assert_equal 0, @response.search.definition[:from]
|
101
|
-
assert_equal 33, @response.search.definition[:size]
|
102
|
-
end
|
103
|
-
|
104
|
-
should "set from/size using default per_page" do
|
105
|
-
@response.klass.client
|
106
|
-
.expects(:search)
|
107
|
-
.with do |definition|
|
108
|
-
assert_equal 33, definition[:from]
|
109
|
-
assert_equal 33, definition[:size]
|
110
|
-
true
|
111
|
-
end
|
112
|
-
.returns(RESPONSE)
|
113
|
-
|
114
|
-
assert_nil @response.search.definition[:from]
|
115
|
-
assert_nil @response.search.definition[:size]
|
116
|
-
|
117
|
-
@response.paginate(page: 2).to_a
|
118
|
-
assert_equal 33, @response.search.definition[:from]
|
119
|
-
assert_equal 33, @response.search.definition[:size]
|
120
|
-
end
|
121
|
-
|
122
|
-
should "set from/size using custom page and per_page" do
|
123
|
-
@response.klass.client
|
124
|
-
.expects(:search)
|
125
|
-
.with do |definition|
|
126
|
-
assert_equal 18, definition[:from]
|
127
|
-
assert_equal 9, definition[:size]
|
128
|
-
true
|
129
|
-
end
|
130
|
-
.returns(RESPONSE)
|
131
|
-
|
132
|
-
assert_nil @response.search.definition[:from]
|
133
|
-
assert_nil @response.search.definition[:size]
|
134
|
-
|
135
|
-
@response.paginate(page: 3, per_page: 9).to_a
|
136
|
-
assert_equal 18, @response.search.definition[:from]
|
137
|
-
assert_equal 9, @response.search.definition[:size]
|
138
|
-
end
|
139
|
-
|
140
|
-
should "search for first page if specified page is < 1" do
|
141
|
-
@response.klass.client
|
142
|
-
.expects(:search)
|
143
|
-
.with do |definition|
|
144
|
-
assert_equal 0, definition[:from]
|
145
|
-
assert_equal 33, definition[:size]
|
146
|
-
true
|
147
|
-
end
|
148
|
-
.returns(RESPONSE)
|
149
|
-
|
150
|
-
assert_nil @response.search.definition[:from]
|
151
|
-
assert_nil @response.search.definition[:size]
|
152
|
-
|
153
|
-
@response.paginate(page: "-1").to_a
|
154
|
-
assert_equal 0, @response.search.definition[:from]
|
155
|
-
assert_equal 33, @response.search.definition[:size]
|
156
|
-
end
|
157
|
-
|
158
|
-
should "use the param_name" do
|
159
|
-
@response.klass.client
|
160
|
-
.expects(:search)
|
161
|
-
.with do |definition|
|
162
|
-
assert_equal 10, definition[:from]
|
163
|
-
true
|
164
|
-
end
|
165
|
-
.returns(RESPONSE)
|
166
|
-
|
167
|
-
@response.paginate(my_page: 2, per_page: 10, param_name: :my_page).to_a
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
context "#page and #per_page shorthand methods" do
|
172
|
-
should "set from/size using default per_page" do
|
173
|
-
@response.page(5)
|
174
|
-
assert_equal 132, @response.search.definition[:from]
|
175
|
-
assert_equal 33, @response.search.definition[:size]
|
176
|
-
end
|
177
|
-
|
178
|
-
should "set from/size when calling #page then #per_page" do
|
179
|
-
@response.page(5).per_page(3)
|
180
|
-
assert_equal 12, @response.search.definition[:from]
|
181
|
-
assert_equal 3, @response.search.definition[:size]
|
182
|
-
end
|
183
|
-
|
184
|
-
should "set from/size when calling #per_page then #page" do
|
185
|
-
@response.per_page(3).page(5)
|
186
|
-
assert_equal 12, @response.search.definition[:from]
|
187
|
-
assert_equal 3, @response.search.definition[:size]
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
context "#current_page method" do
|
192
|
-
should "return 1 by default" do
|
193
|
-
@response.paginate({})
|
194
|
-
assert_equal 1, @response.current_page
|
195
|
-
end
|
196
|
-
|
197
|
-
should "return current page number" do
|
198
|
-
@response.paginate(page: 3, per_page: 9)
|
199
|
-
assert_equal 3, @response.current_page
|
200
|
-
end
|
201
|
-
|
202
|
-
should "return nil if not pagination set" do
|
203
|
-
assert_equal nil, @response.current_page
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
context "#per_page method" do
|
208
|
-
should "return value set in paginate call" do
|
209
|
-
@response.paginate(per_page: 8)
|
210
|
-
assert_equal 8, @response.per_page
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
context "#total_entries method" do
|
215
|
-
should "return total from response" do
|
216
|
-
@response.expects(:results).returns(mock('results', total: 100))
|
217
|
-
assert_equal 100, @response.total_entries
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
context "Multimodel response pagination" do
|
223
|
-
setup do
|
224
|
-
@multimodel = Elasticsearch::Model::Multimodel.new ModelClass
|
225
|
-
@search = Elasticsearch::Model::Searching::SearchRequest.new @multimodel, '*'
|
226
|
-
@response = WillPaginateResponse.new @multimodel, @search, RESPONSE
|
227
|
-
@response.klass.stubs(:client).returns mock('client')
|
228
|
-
|
229
|
-
@expected_methods = [
|
230
|
-
# methods needed by WillPaginate::CollectionMethods
|
231
|
-
:current_page,
|
232
|
-
:offset,
|
233
|
-
:per_page,
|
234
|
-
:total_entries,
|
235
|
-
:length,
|
236
|
-
|
237
|
-
# methods defined by WillPaginate::CollectionMethods
|
238
|
-
:total_pages,
|
239
|
-
:previous_page,
|
240
|
-
:next_page,
|
241
|
-
:out_of_bounds?,
|
242
|
-
]
|
243
|
-
end
|
244
|
-
|
245
|
-
should "have pagination methods" do
|
246
|
-
assert_respond_to @response, :paginate
|
247
|
-
|
248
|
-
@expected_methods.each do |method|
|
249
|
-
assert_respond_to @response, method
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
context "response.results" do
|
254
|
-
should "have pagination methods" do
|
255
|
-
@expected_methods.each do |method|
|
256
|
-
assert_respond_to @response.results, method
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
context "#offset method" do
|
262
|
-
should "calculate offset using current_page and per_page" do
|
263
|
-
@response.per_page(3).page(3)
|
264
|
-
assert_equal 6, @response.offset
|
265
|
-
end
|
266
|
-
end
|
267
|
-
context "#length method" do
|
268
|
-
should "return count of paginated results" do
|
269
|
-
@response.per_page(3).page(3)
|
270
|
-
assert_equal 3, @response.length
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
context "#paginate method" do
|
275
|
-
should "set from/size using WillPaginate defaults, ignoring aggregated models configuration" do
|
276
|
-
@response.klass.client
|
277
|
-
.expects(:search)
|
278
|
-
.with do |definition|
|
279
|
-
assert_equal 0, definition[:from]
|
280
|
-
assert_equal ::WillPaginate.per_page, definition[:size]
|
281
|
-
true
|
282
|
-
end
|
283
|
-
.returns(RESPONSE)
|
284
|
-
|
285
|
-
assert_nil @response.search.definition[:from]
|
286
|
-
assert_nil @response.search.definition[:size]
|
287
|
-
|
288
|
-
@response.paginate(page: nil).to_a
|
289
|
-
assert_equal 0, @response.search.definition[:from]
|
290
|
-
assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
|
291
|
-
end
|
292
|
-
|
293
|
-
should "set from/size using default per_page, ignoring aggregated models' configuration" do
|
294
|
-
@response.klass.client
|
295
|
-
.expects(:search)
|
296
|
-
.with do |definition|
|
297
|
-
assert_equal ::WillPaginate.per_page, definition[:from]
|
298
|
-
assert_equal ::WillPaginate.per_page, definition[:size]
|
299
|
-
true
|
300
|
-
end
|
301
|
-
.returns(RESPONSE)
|
302
|
-
|
303
|
-
assert_nil @response.search.definition[:from]
|
304
|
-
assert_nil @response.search.definition[:size]
|
305
|
-
|
306
|
-
@response.paginate(page: 2).to_a
|
307
|
-
assert_equal ::WillPaginate.per_page, @response.search.definition[:from]
|
308
|
-
assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
|
309
|
-
end
|
310
|
-
|
311
|
-
should "set from/size using custom page and per_page" do
|
312
|
-
@response.klass.client
|
313
|
-
.expects(:search)
|
314
|
-
.with do |definition|
|
315
|
-
assert_equal 18, definition[:from]
|
316
|
-
assert_equal 9, definition[:size]
|
317
|
-
true
|
318
|
-
end
|
319
|
-
.returns(RESPONSE)
|
320
|
-
|
321
|
-
assert_nil @response.search.definition[:from]
|
322
|
-
assert_nil @response.search.definition[:size]
|
323
|
-
|
324
|
-
@response.paginate(page: 3, per_page: 9).to_a
|
325
|
-
assert_equal 18, @response.search.definition[:from]
|
326
|
-
assert_equal 9, @response.search.definition[:size]
|
327
|
-
end
|
328
|
-
|
329
|
-
should "search for first page if specified page is < 1" do
|
330
|
-
@response.klass.client
|
331
|
-
.expects(:search)
|
332
|
-
.with do |definition|
|
333
|
-
assert_equal 0, definition[:from]
|
334
|
-
assert_equal ::WillPaginate.per_page, definition[:size]
|
335
|
-
true
|
336
|
-
end
|
337
|
-
.returns(RESPONSE)
|
338
|
-
|
339
|
-
assert_nil @response.search.definition[:from]
|
340
|
-
assert_nil @response.search.definition[:size]
|
341
|
-
|
342
|
-
@response.paginate(page: "-1").to_a
|
343
|
-
assert_equal 0, @response.search.definition[:from]
|
344
|
-
assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
|
345
|
-
end
|
346
|
-
end
|
347
|
-
|
348
|
-
context "#page and #per_page shorthand methods" do
|
349
|
-
should "set from/size using default per_page" do
|
350
|
-
@response.page(5)
|
351
|
-
assert_equal 120, @response.search.definition[:from]
|
352
|
-
assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
|
353
|
-
end
|
354
|
-
|
355
|
-
should "set from/size when calling #page then #per_page" do
|
356
|
-
@response.page(5).per_page(3)
|
357
|
-
assert_equal 12, @response.search.definition[:from]
|
358
|
-
assert_equal 3, @response.search.definition[:size]
|
359
|
-
end
|
360
|
-
|
361
|
-
should "set from/size when calling #per_page then #page" do
|
362
|
-
@response.per_page(3).page(5)
|
363
|
-
assert_equal 12, @response.search.definition[:from]
|
364
|
-
assert_equal 3, @response.search.definition[:size]
|
365
|
-
end
|
366
|
-
end
|
367
|
-
|
368
|
-
context "#current_page method" do
|
369
|
-
should "return 1 by default" do
|
370
|
-
@response.paginate({})
|
371
|
-
assert_equal 1, @response.current_page
|
372
|
-
end
|
373
|
-
|
374
|
-
should "return current page number" do
|
375
|
-
@response.paginate(page: 3, per_page: 9)
|
376
|
-
assert_equal 3, @response.current_page
|
377
|
-
end
|
378
|
-
|
379
|
-
should "return nil if not pagination set" do
|
380
|
-
assert_equal nil, @response.current_page
|
381
|
-
end
|
382
|
-
end
|
383
|
-
|
384
|
-
context "#per_page method" do
|
385
|
-
should "return value set in paginate call" do
|
386
|
-
@response.paginate(per_page: 8)
|
387
|
-
assert_equal 8, @response.per_page
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
context "#total_entries method" do
|
392
|
-
should "return total from response" do
|
393
|
-
@response.expects(:results).returns(mock('results', total: 100))
|
394
|
-
assert_equal 100, @response.total_entries
|
395
|
-
end
|
396
|
-
end
|
397
|
-
end
|
398
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Elasticsearch::Model::RecordsTest < Test::Unit::TestCase
|
4
|
-
context "Response records" do
|
5
|
-
class DummyCollection
|
6
|
-
include Enumerable
|
7
|
-
|
8
|
-
def each(&block); ['FOO'].each(&block); end
|
9
|
-
def size; ['FOO'].size; end
|
10
|
-
def empty?; ['FOO'].empty?; end
|
11
|
-
def foo; 'BAR'; end
|
12
|
-
end
|
13
|
-
|
14
|
-
class DummyModel
|
15
|
-
def self.index_name; 'foo'; end
|
16
|
-
def self.document_type; 'bar'; end
|
17
|
-
|
18
|
-
def self.find(*args)
|
19
|
-
DummyCollection.new
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
RESPONSE = { 'hits' => { 'total' => 123, 'max_score' => 456, 'hits' => [{'_id' => '1', 'foo' => 'bar'}] } }
|
24
|
-
RESULTS = Elasticsearch::Model::Response::Results.new DummyModel, RESPONSE
|
25
|
-
|
26
|
-
setup do
|
27
|
-
search = Elasticsearch::Model::Searching::SearchRequest.new DummyModel, '*'
|
28
|
-
search.stubs(:execute!).returns RESPONSE
|
29
|
-
|
30
|
-
response = Elasticsearch::Model::Response::Response.new DummyModel, search
|
31
|
-
@records = Elasticsearch::Model::Response::Records.new DummyModel, response
|
32
|
-
end
|
33
|
-
|
34
|
-
should "access the records" do
|
35
|
-
assert_respond_to @records, :records
|
36
|
-
assert_equal 1, @records.records.size
|
37
|
-
assert_equal 'FOO', @records.records.first
|
38
|
-
end
|
39
|
-
|
40
|
-
should "delegate Enumerable methods to records" do
|
41
|
-
assert ! @records.empty?
|
42
|
-
assert_equal 'FOO', @records.first
|
43
|
-
end
|
44
|
-
|
45
|
-
should "delegate methods to records" do
|
46
|
-
assert_respond_to @records, :foo
|
47
|
-
assert_equal 'BAR', @records.foo
|
48
|
-
end
|
49
|
-
|
50
|
-
should "have each_with_hit method" do
|
51
|
-
@records.each_with_hit do |record, hit|
|
52
|
-
assert_equal 'FOO', record
|
53
|
-
assert_equal 'bar', hit.foo
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
should "have map_with_hit method" do
|
58
|
-
assert_equal ['FOO---bar'], @records.map_with_hit { |record, hit| "#{record}---#{hit.foo}" }
|
59
|
-
end
|
60
|
-
|
61
|
-
should "return the IDs" do
|
62
|
-
assert_equal ['1'], @records.ids
|
63
|
-
end
|
64
|
-
|
65
|
-
context "with adapter" do
|
66
|
-
module DummyAdapter
|
67
|
-
module RecordsMixin
|
68
|
-
def records
|
69
|
-
['FOOBAR']
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def records_mixin
|
74
|
-
RecordsMixin
|
75
|
-
end; module_function :records_mixin
|
76
|
-
end
|
77
|
-
|
78
|
-
should "delegate the records method to the adapter" do
|
79
|
-
Elasticsearch::Model::Adapter.expects(:from_class)
|
80
|
-
.with(DummyModel)
|
81
|
-
.returns(DummyAdapter)
|
82
|
-
|
83
|
-
@records = Elasticsearch::Model::Response::Records.new DummyModel,
|
84
|
-
RESPONSE
|
85
|
-
|
86
|
-
assert_equal ['FOOBAR'], @records.records
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
end
|