blacklight 5.1.1 → 5.2.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/VERSION +1 -1
  4. data/app/assets/javascripts/blacklight/search_context.js +38 -24
  5. data/app/helpers/blacklight/blacklight_helper_behavior.rb +49 -70
  6. data/app/helpers/blacklight/catalog_helper_behavior.rb +1 -8
  7. data/app/helpers/blacklight/configuration_helper_behavior.rb +10 -2
  8. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -1
  9. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +2 -2
  10. data/app/helpers/blacklight/url_helper_behavior.rb +41 -7
  11. data/app/views/catalog/_facet_layout.html.erb +2 -2
  12. data/app/views/catalog/_per_page_widget.html.erb +4 -4
  13. data/app/views/catalog/_previous_next_doc.html.erb +1 -1
  14. data/app/views/catalog/_show_tools.html.erb +1 -1
  15. data/app/views/catalog/show.html.erb +1 -1
  16. data/app/views/layouts/blacklight.html.erb +1 -1
  17. data/blacklight.gemspec +1 -1
  18. data/config/jetty.yml +3 -0
  19. data/config/locales/blacklight.es.yml +220 -0
  20. data/gemfiles/rails4.1.gemfile +10 -0
  21. data/lib/blacklight/base.rb +1 -1
  22. data/lib/blacklight/catalog/search_context.rb +15 -15
  23. data/lib/blacklight/catalog.rb +19 -6
  24. data/lib/blacklight/configuration.rb +126 -31
  25. data/lib/blacklight/document_presenter.rb +168 -0
  26. data/lib/blacklight/request_builders.rb +288 -0
  27. data/lib/blacklight/routes.rb +6 -2
  28. data/lib/blacklight/solr/request.rb +1 -1
  29. data/lib/blacklight/solr_helper.rb +50 -323
  30. data/lib/blacklight/solr_response/facets.rb +7 -3
  31. data/lib/blacklight/utils.rb +39 -7
  32. data/lib/blacklight.rb +5 -3
  33. data/lib/generators/blacklight/install_generator.rb +17 -5
  34. data/lib/generators/blacklight/models_generator.rb +0 -1
  35. data/lib/generators/blacklight/templates/catalog_controller.rb +6 -0
  36. data/lib/generators/blacklight/templates/config/jetty.yml +8 -4
  37. data/lib/generators/blacklight/templates/config/solr.yml +2 -0
  38. data/spec/controllers/catalog_controller_spec.rb +41 -22
  39. data/spec/features/alternate_controller_spec.rb +1 -1
  40. data/spec/features/search_filters_spec.rb +24 -24
  41. data/spec/features/search_results_spec.rb +9 -4
  42. data/spec/features/search_sort_spec.rb +1 -1
  43. data/spec/helpers/blacklight_helper_spec.rb +87 -0
  44. data/spec/helpers/catalog_helper_spec.rb +5 -10
  45. data/spec/helpers/configuration_helper_spec.rb +22 -1
  46. data/spec/helpers/facets_helper_spec.rb +6 -0
  47. data/spec/helpers/render_constraints_helper_spec.rb +1 -2
  48. data/spec/helpers/url_helper_spec.rb +45 -2
  49. data/spec/lib/blacklight/routes_spec.rb +4 -4
  50. data/spec/lib/blacklight/solr_helper_spec.rb +364 -253
  51. data/spec/lib/blacklight/solr_response/facets_spec.rb +82 -0
  52. data/spec/lib/blacklight/solr_response_spec.rb +3 -1
  53. data/spec/lib/document_presenter_spec.rb +216 -0
  54. data/spec/lib/utils_spec.rb +8 -0
  55. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  56. data/spec/views/catalog/index.html.erb_spec.rb +29 -21
  57. data/spec/views/catalog/show.html.erb_spec.rb +11 -7
  58. data/template.demo.rb +20 -0
  59. metadata +12 -4
  60. data/lib/generators/blacklight/jetty_generator.rb +0 -70
@@ -9,24 +9,36 @@ require 'spec_helper'
9
9
  # to talk with solr and get results)? when we do a document request, does
10
10
  # blacklight code get a single document returned?)
11
11
  #
12
- describe 'Blacklight::SolrHelper' do
12
+ describe Blacklight::SolrHelper do
13
13
 
14
14
  # SolrHelper is a controller layer mixin, which depends
15
15
  # on being mixed into a class which has #params (from Rails)
16
16
  # and #blacklight_config
17
- def params
18
- {}
19
- end
17
+ class SolrHelperTestClass
18
+ include Blacklight::SolrHelper
20
19
 
21
- def blacklight_config
22
- @config ||= CatalogController.blacklight_config
23
- end
24
-
25
- def blacklight_config=(config)
26
- @config = config
20
+ attr_accessor :blacklight_config
21
+ attr_accessor :blacklight_solr
22
+
23
+ def initialize blacklight_config, blacklight_solr
24
+ self.blacklight_config = blacklight_config
25
+ self.blacklight_solr = blacklight_solr
26
+ end
27
+
28
+ def params
29
+ {}
30
+ end
31
+
32
+ def logger
33
+ Rails.logger
34
+ end
27
35
  end
28
36
 
29
- include Blacklight::SolrHelper
37
+ subject { SolrHelperTestClass.new blacklight_config, blacklight_solr }
38
+
39
+ let(:blacklight_config) { Blacklight::Configuration.new }
40
+ let(:copy_of_catalog_config) { ::CatalogController.blacklight_config.deep_copy }
41
+ let(:blacklight_solr) { Blacklight.solr }
30
42
 
31
43
  before(:each) do
32
44
  @all_docs_query = ''
@@ -40,32 +52,92 @@ describe 'Blacklight::SolrHelper' do
40
52
  @subject_search_params = {:commit=>"search", :search_field=>"subject", :action=>"index", :"controller"=>"catalog", :"rows"=>"10", :"q"=>"wome"}
41
53
  end
42
54
 
55
+ describe "#find" do
56
+ it "should use the configured solr path" do
57
+ blacklight_config.solr_path = 'xyz'
58
+ blacklight_solr.should_receive(:send_and_receive).with('xyz', anything).and_return("{}".to_json)
59
+ expect(subject.find({})).to be_a_kind_of Blacklight::SolrResponse
60
+ end
61
+
62
+ it "should override the configured solr path" do
63
+ blacklight_config.solr_path = 'xyz'
64
+ blacklight_solr.should_receive(:send_and_receive).with('abc', anything).and_return("{}".to_json)
65
+ expect(subject.find('abc', {})).to be_a_kind_of Blacklight::SolrResponse
66
+ end
67
+
68
+ it "should use a default :qt param" do
69
+ blacklight_config.qt = 'xyz'
70
+ blacklight_solr.should_receive(:send_and_receive).with('select', hash_including(params: { qt: 'xyz'})).and_return("{}".to_json)
71
+ expect(subject.find({})).to be_a_kind_of Blacklight::SolrResponse
72
+ end
73
+
74
+ it "should use the provided :qt param" do
75
+ blacklight_config.qt = 'xyz'
76
+ blacklight_solr.should_receive(:send_and_receive).with('select', hash_including(params: { qt: 'abc'})).and_return("{}".to_json)
77
+ expect(subject.find({qt: 'abc'})).to be_a_kind_of Blacklight::SolrResponse
78
+ end
79
+
80
+ describe "http_method configuration" do
81
+ describe "using default" do
82
+
83
+ it "defaults to get" do
84
+ expect(blacklight_config.http_method).to eq :get
85
+ blacklight_solr.should_receive(:send_and_receive) do |path, params|
86
+ expect(path).to eq 'select'
87
+ expect(params[:method]).to eq :get
88
+ expect(params[:params]).to include(:q)
89
+ end.and_return({'response'=>{'docs'=>[]}})
90
+ subject.find(:q => @all_docs_query)
91
+ end
92
+ end
93
+
94
+ describe "setting to post" do
95
+ let (:blacklight_config) {config = Blacklight::Configuration.new; config.http_method=:post; config}
96
+
97
+ it "keep value set to post" do
98
+ expect(blacklight_config.http_method).to eq :post
99
+ blacklight_solr.should_receive(:send_and_receive) do |path, params|
100
+ expect(path).to eq 'select'
101
+ expect(params[:method]).to eq :post
102
+ expect(params[:data]).to include(:q)
103
+ end.and_return({'response'=>{'docs'=>[]}})
104
+ subject.find(:q => @all_docs_query)
105
+ end
106
+ end
107
+ end
108
+ end
43
109
 
110
+ describe "http_method configuration", :integration => true do
111
+ let (:blacklight_config) {config = Blacklight::Configuration.new; config.http_method=:post; config}
112
+
113
+ it "should send a post request to solr and get a response back" do
114
+ response = subject.find(:q => @all_docs_query)
115
+ expect(response.docs.length).to be >= 1
116
+ end
117
+ end
44
118
 
45
119
  # SPECS for actual search parameter generation
46
120
  describe "solr_search_params" do
47
121
  it "allows customization of solr_search_params_logic" do
48
122
  # Normally you'd include a new module into (eg) your CatalogController
49
123
  # but a sub-class defininig it directly is simpler for test.
50
- def add_foo_to_solr_params(solr_params, user_params)
124
+ subject.stub(:add_foo_to_solr_params) do |solr_params, user_params|
51
125
  solr_params[:wt] = "TESTING"
52
126
  end
53
-
54
127
 
55
- self.solr_search_params_logic += [:add_foo_to_solr_params]
56
-
57
-
58
- expect(self.solr_search_params[:wt]).to eq "TESTING"
128
+ subject.solr_search_params_logic += [:add_foo_to_solr_params]
129
+
130
+ expect(subject.solr_search_params[:wt]).to eq "TESTING"
59
131
  end
60
132
 
61
133
 
62
134
  describe 'for an entirely empty search' do
63
- def params
64
- {}
65
- end
66
135
  before do
67
- @produced_params = self.solr_search_params
136
+ @produced_params = subject.solr_search_params.with_indifferent_access
68
137
  end
138
+
139
+ let(:blacklight_config) { copy_of_catalog_config }
140
+
69
141
  it 'should not have a q param' do
70
142
  expect(@produced_params[:q]).to be_nil
71
143
  expect(@produced_params["spellcheck.q"]).to be_nil
@@ -75,7 +147,7 @@ describe 'Blacklight::SolrHelper' do
75
147
  end
76
148
  it 'should have default facet fields' do
77
149
  # remove local params from the facet.field
78
- expect(@produced_params[:"facet.field"].map { |x| x.gsub(/\{![^}]+\}/, '') }).to eq blacklight_config.facet_fields_to_add_to_solr
150
+ expect(@produced_params[:"facet.field"].map { |x| x.gsub(/\{![^}]+\}/, '') }).to match_array ["format", "subject_topic_facet", "pub_date", "language_facet", "lc_1letter_facet", "subject_geo_facet", "subject_era_facet"]
79
151
  end
80
152
 
81
153
  it "should have default qt" do
@@ -90,7 +162,7 @@ describe 'Blacklight::SolrHelper' do
90
162
 
91
163
  describe "for an empty string search" do
92
164
  it "should return empty string q in solr parameters" do
93
- solr_params = solr_search_params(:q => "")
165
+ solr_params = subject.solr_search_params(:q => "")
94
166
  expect(solr_params[:q]).to eq ""
95
167
  expect(solr_params["spellcheck.q"]).to eq ""
96
168
  end
@@ -98,7 +170,7 @@ describe 'Blacklight::SolrHelper' do
98
170
 
99
171
  describe "for request params also passed in as argument" do
100
172
  it "should only have one value for the key 'q' regardless if a symbol or string" do
101
- solr_params = solr_search_params( :q => "some query", 'q' => 'another value' )
173
+ solr_params = subject.solr_search_params( :q => "some query", 'q' => 'another value' )
102
174
  expect(solr_params[:q]).to eq 'some query'
103
175
  expect(solr_params['q']).to eq 'some query'
104
176
  end
@@ -108,7 +180,7 @@ describe 'Blacklight::SolrHelper' do
108
180
  describe "for one facet, no query" do
109
181
  it "should have proper solr parameters" do
110
182
 
111
- solr_params = solr_search_params(:f => @single_facet)
183
+ solr_params = subject.solr_search_params(:f => @single_facet)
112
184
 
113
185
  expect(solr_params[:q]).to be_blank
114
186
  expect(solr_params["spellcheck.q"]).to be_blank
@@ -121,7 +193,7 @@ describe 'Blacklight::SolrHelper' do
121
193
 
122
194
  describe "with Multi Facets, No Query" do
123
195
  it 'should have fq set properly' do
124
- solr_params = solr_search_params(:f => @multi_facets)
196
+ solr_params = subject.solr_search_params(:f => @multi_facets)
125
197
 
126
198
  @multi_facets.each_pair do |facet_field, value_list|
127
199
  value_list ||= []
@@ -136,7 +208,7 @@ describe 'Blacklight::SolrHelper' do
136
208
 
137
209
  describe "with Multi Facets, Multi Word Query" do
138
210
  it 'should have fq and q set properly' do
139
- solr_params = solr_search_params(:q => @mult_word_query, :f => @multi_facets)
211
+ solr_params = subject.solr_search_params(:q => @mult_word_query, :f => @multi_facets)
140
212
 
141
213
  @multi_facets.each_pair do |facet_field, value_list|
142
214
  value_list ||= []
@@ -151,58 +223,55 @@ describe 'Blacklight::SolrHelper' do
151
223
 
152
224
  describe "facet_value_to_fq_string" do
153
225
 
154
- let :blacklight_config do
155
- Blacklight::Configuration.new
156
- end
157
-
158
226
  it "should use the raw handler for strings" do
159
- expect(facet_value_to_fq_string("facet_name", "my value")).to eq "{!raw f=facet_name}my value"
227
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!raw f=facet_name}my value"
160
228
  end
161
229
 
162
230
  it "should pass booleans through" do
163
- expect(facet_value_to_fq_string("facet_name", true)).to eq "facet_name:true"
231
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq "facet_name:true"
164
232
  end
165
233
 
166
234
  it "should pass boolean-like strings through" do
167
- expect(facet_value_to_fq_string("facet_name", "true")).to eq "facet_name:true"
235
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", "true")).to eq "facet_name:true"
168
236
  end
169
237
 
170
238
  it "should pass integers through" do
171
- expect(facet_value_to_fq_string("facet_name", 1)).to eq "facet_name:1"
239
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", 1)).to eq "facet_name:1"
172
240
  end
173
241
 
174
242
  it "should pass integer-like strings through" do
175
- expect(facet_value_to_fq_string("facet_name", "1")).to eq "facet_name:1"
243
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", "1")).to eq "facet_name:1"
176
244
  end
177
245
 
178
246
  it "should pass floats through" do
179
- expect(facet_value_to_fq_string("facet_name", 1.11)).to eq "facet_name:1.11"
247
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", 1.11)).to eq "facet_name:1.11"
180
248
  end
181
249
 
182
250
  it "should pass floats through" do
183
- expect(facet_value_to_fq_string("facet_name", "1.11")).to eq "facet_name:1.11"
251
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", "1.11")).to eq "facet_name:1.11"
184
252
  end
185
253
 
186
254
  it "should pass date-type fields through" do
187
255
  blacklight_config.facet_fields.stub(:[]).with('facet_name').and_return(double(:date => true, :query => nil, :tag => nil))
188
256
 
189
- expect(facet_value_to_fq_string("facet_name", "2012-01-01")).to eq "facet_name:2012-01-01"
257
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", "2012-01-01")).to eq "facet_name:2012-01-01"
190
258
  end
191
259
 
192
260
  it "should handle range requests" do
193
- expect(facet_value_to_fq_string("facet_name", 1..5)).to eq "facet_name:[1 TO 5]"
261
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", 1..5)).to eq "facet_name:[1 TO 5]"
194
262
  end
195
263
 
196
264
  it "should add tag local parameters" do
197
265
  blacklight_config.facet_fields.stub(:[]).with('facet_name').and_return(double(:query => nil, :tag => 'asdf', :date => nil))
198
266
 
199
- expect(facet_value_to_fq_string("facet_name", true)).to eq "{!tag=asdf}facet_name:true"
200
- expect(facet_value_to_fq_string("facet_name", "my value")).to eq "{!raw f=facet_name tag=asdf}my value"
267
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq "{!tag=asdf}facet_name:true"
268
+ expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!raw f=facet_name tag=asdf}my value"
201
269
  end
202
270
  end
203
271
 
204
272
  describe "solr parameters for a field search from config (subject)" do
205
- let(:solr_params) { solr_search_params @subject_search_params }
273
+ let(:solr_params) { subject.solr_search_params @subject_search_params }
274
+ let(:blacklight_config) { copy_of_catalog_config }
206
275
 
207
276
  it "should look up qt from field definition" do
208
277
  expect(solr_params[:qt]).to eq "search"
@@ -232,7 +301,7 @@ describe 'Blacklight::SolrHelper' do
232
301
  expect(solr_params[:"spellcheck.dictionary"]).to eq "subject"
233
302
  end
234
303
  it "should add on :solr_local_parameters using Solr LocalParams style" do
235
- params = solr_search_params( @subject_search_params )
304
+ params = subject.solr_search_params( @subject_search_params )
236
305
 
237
306
  #q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
238
307
  #the LocalParams are really there
@@ -245,11 +314,9 @@ describe 'Blacklight::SolrHelper' do
245
314
 
246
315
  describe "overriding of qt parameter" do
247
316
  it "should return the correct overriden parameter" do
248
- def params
249
- super.merge(:qt => "overridden")
250
- end
317
+ subject.stub(params: { qt: 'overridden' })
251
318
 
252
- expect(solr_search_params[:qt]).to eq "overridden"
319
+ expect(subject.solr_search_params[:qt]).to eq "overridden"
253
320
  end
254
321
  end
255
322
 
@@ -257,7 +324,7 @@ describe 'Blacklight::SolrHelper' do
257
324
  it "should return the correct overriden parameter" do
258
325
  solr_parameters = {:fq => 'a string' }
259
326
 
260
- add_facet_fq_to_solr(solr_parameters, {})
327
+ subject.add_facet_fq_to_solr(solr_parameters, {})
261
328
 
262
329
  expect(solr_parameters[:fq]).to be_a_kind_of Array
263
330
  end
@@ -273,17 +340,17 @@ describe 'Blacklight::SolrHelper' do
273
340
  end
274
341
  end
275
342
 
276
- subject do
343
+ let(:solr_parameters) do
277
344
  solr_parameters = Blacklight::Solr::Request.new
278
345
 
279
- add_solr_fields_to_query(solr_parameters, {})
346
+ subject.add_solr_fields_to_query(solr_parameters, {})
280
347
 
281
348
  solr_parameters
282
349
  end
283
350
 
284
351
  it "should add any extra solr parameters from index and show fields" do
285
- expect(subject[:'f.an_index_field.hl.alternativeField']).to eq "field_x"
286
- expect(subject[:'f.a_show_field.hl.alternativeField']).to eq "field_y"
352
+ expect(solr_parameters[:'f.an_index_field.hl.alternativeField']).to eq "field_x"
353
+ expect(solr_parameters[:'f.a_show_field.hl.alternativeField']).to eq "field_y"
287
354
  end
288
355
  end
289
356
 
@@ -301,12 +368,15 @@ describe 'Blacklight::SolrHelper' do
301
368
  config
302
369
  end
303
370
 
304
- it "should add sort parameters" do
305
-
371
+ let(:solr_parameters) do
306
372
  solr_parameters = Blacklight::Solr::Request.new
307
373
 
308
- add_facetting_to_solr(solr_parameters, {})
374
+ subject.add_facetting_to_solr(solr_parameters, {})
309
375
 
376
+ solr_parameters
377
+ end
378
+
379
+ it "should add sort parameters" do
310
380
  expect(solr_parameters[:facet]).to be_true
311
381
 
312
382
  expect(solr_parameters[:'facet.field']).to include('test_field')
@@ -314,25 +384,81 @@ describe 'Blacklight::SolrHelper' do
314
384
  end
315
385
 
316
386
  it "should add facet exclusions" do
317
- solr_parameters = Blacklight::Solr::Request.new
318
-
319
- add_facetting_to_solr(solr_parameters, {})
320
-
321
387
  expect(solr_parameters[:'facet.query']).to include('{!ex=xyz}some:query')
322
388
  expect(solr_parameters[:'facet.pivot']).to include('{!ex=xyz}a,b')
323
389
  end
324
390
 
325
391
  it "should add any additional solr_params" do
326
- solr_parameters = Blacklight::Solr::Request.new
392
+ expect(solr_parameters[:'f.some-field.facet.mincount']).to eq 15
393
+ end
327
394
 
328
- add_facetting_to_solr(solr_parameters, {})
395
+ describe ":include_in_request" do
396
+ let(:solr_parameters) do
397
+ solr_parameters = Blacklight::Solr::Request.new
398
+ subject.add_facetting_to_solr(solr_parameters, {})
399
+ solr_parameters
400
+ end
329
401
 
330
- expect(solr_parameters[:'f.some-field.facet.mincount']).to eq 15
402
+ it "should respect the include_in_request parameter" do
403
+ blacklight_config.add_facet_field 'yes_facet', include_in_request: true
404
+ blacklight_config.add_facet_field 'no_facet', include_in_request: false
405
+
406
+ expect(solr_parameters[:'facet.field']).to include('yes_facet')
407
+ expect(solr_parameters[:'facet.field']).not_to include('no_facet')
408
+ end
409
+
410
+ it "should default to including facets if add_facet_fields_to_solr_request! was called" do
411
+ blacklight_config.add_facet_field 'yes_facet'
412
+ blacklight_config.add_facet_field 'no_facet', include_in_request: false
413
+ blacklight_config.add_facet_fields_to_solr_request!
414
+
415
+ expect(solr_parameters[:'facet.field']).to include('yes_facet')
416
+ expect(solr_parameters[:'facet.field']).not_to include('no_facet')
417
+ end
418
+ end
419
+
420
+ describe ":add_facet_fields_to_solr_request!" do
421
+
422
+ let(:blacklight_config) do
423
+ config = Blacklight::Configuration.new
424
+ config.add_facet_field 'yes_facet', include_in_request: true
425
+ config.add_facet_field 'no_facet', include_in_request: false
426
+ config.add_facet_field 'maybe_facet'
427
+ config.add_facet_field 'another_facet'
428
+ config
429
+ end
430
+
431
+ let(:solr_parameters) do
432
+ solr_parameters = Blacklight::Solr::Request.new
433
+ subject.add_facetting_to_solr(solr_parameters, {})
434
+ solr_parameters
435
+ end
436
+
437
+ it "should add facets to the solr request" do
438
+ blacklight_config.add_facet_fields_to_solr_request!
439
+ expect(solr_parameters[:'facet.field']).to match_array ['yes_facet', 'maybe_facet', 'another_facet']
440
+ end
441
+
442
+ it "should not override field-specific configuration by default" do
443
+ blacklight_config.add_facet_fields_to_solr_request!
444
+ expect(solr_parameters[:'facet.field']).to_not include 'no_facet'
445
+ end
446
+
447
+ it "should allow white-listing facets" do
448
+ blacklight_config.add_facet_fields_to_solr_request! 'maybe_facet'
449
+ expect(solr_parameters[:'facet.field']).to include 'maybe_facet'
450
+ expect(solr_parameters[:'facet.field']).not_to include 'another_facet'
451
+ end
452
+
453
+ it "should allow white-listed facets to override any field-specific include_in_request configuration" do
454
+ blacklight_config.add_facet_fields_to_solr_request! 'no_facet'
455
+ expect(solr_parameters[:'facet.field']).to include 'no_facet'
456
+ end
331
457
  end
332
458
  end
333
459
 
334
460
  describe "with a complex parameter environment" do
335
- def blacklight_config
461
+ let(:blacklight_config) do
336
462
  config = Blacklight::Configuration.new
337
463
  config.add_search_field("test_field",
338
464
  :display_label => "Test",
@@ -341,23 +467,24 @@ describe 'Blacklight::SolrHelper' do
341
467
  )
342
468
  return config
343
469
  end
344
- def params
345
- {:search_field => "test_field", :q => "test query", "facet.field" => "extra_facet"}
470
+
471
+ before do
472
+ subject.stub params: {:search_field => "test_field", :q => "test query", "facet.field" => "extra_facet"}
346
473
  end
347
474
 
348
475
  it "should merge parameters from search_field definition" do
349
- solr_params = solr_search_params
476
+ solr_params = subject.solr_search_params
350
477
 
351
478
  expect(solr_params[:qf]).to eq "fieldOne^2.3 fieldTwo fieldThree^0.4"
352
479
  expect(solr_params[:spellcheck]).to eq 'false'
353
480
  end
354
481
  it "should merge empty string parameters from search_field definition" do
355
- expect(solr_search_params[:pf]).to eq ""
482
+ expect(subject.solr_search_params[:pf]).to eq ""
356
483
  end
357
484
 
358
485
  describe "should respect proper precedence of settings, " do
359
486
  before do
360
- @produced_params = solr_search_params
487
+ @produced_params = subject.solr_search_params
361
488
  end
362
489
 
363
490
 
@@ -385,30 +512,28 @@ describe 'Blacklight::SolrHelper' do
385
512
  end
386
513
 
387
514
  describe "sorting" do
515
+ let(:blacklight_config) { copy_of_catalog_config }
388
516
 
389
517
  it "should send the default sort parameter to solr" do
390
- expect(solr_search_params[:sort]).to eq 'score desc, pub_date_sort desc, title_sort asc'
518
+ expect(subject.solr_search_params[:sort]).to eq 'score desc, pub_date_sort desc, title_sort asc'
391
519
  end
392
520
 
393
521
  it "should not send a sort parameter to solr if the sort value is blank" do
394
- def blacklight_config
395
- config = Blacklight::Configuration.new
396
- config.add_sort_field('', :label => 'test')
397
- return config
398
- end
522
+ blacklight_config.sort_fields = {}
523
+ blacklight_config.add_sort_field('', :label => 'test')
399
524
 
400
- produced_params = solr_search_params
525
+ produced_params = subject.solr_search_params
401
526
  expect(produced_params).not_to have_key(:sort)
402
527
  end
403
528
 
404
529
  it "should pass through user sort parameters" do
405
- produced_params = solr_search_params( :sort => 'solr_test_field desc' )
530
+ produced_params = subject.solr_search_params( :sort => 'solr_test_field desc' )
406
531
  expect(produced_params[:sort]).to eq 'solr_test_field desc'
407
532
  end
408
533
  end
409
534
 
410
535
  describe "for :solr_local_parameters config" do
411
- def blacklight_config
536
+ let(:blacklight_config) do
412
537
  config = Blacklight::Configuration.new
413
538
  config.add_search_field(
414
539
  "custom_author_key",
@@ -428,12 +553,12 @@ describe 'Blacklight::SolrHelper' do
428
553
  return config
429
554
  end
430
555
 
431
- def params
432
- {:search_field => "custom_author_key", :q => "query"}
556
+ before do
557
+ subject.stub params: {:search_field => "custom_author_key", :q => "query"}
433
558
  end
434
559
 
435
560
  before do
436
- @result = solr_search_params
561
+ @result = subject.solr_search_params
437
562
  end
438
563
 
439
564
  it "should pass through ordinary params" do
@@ -450,22 +575,29 @@ describe 'Blacklight::SolrHelper' do
450
575
  end
451
576
 
452
577
  describe "mapping facet.field" do
578
+ let(:blacklight_config) do
579
+ Blacklight::Configuration.new do |config|
580
+ config.add_facet_field 'some_field'
581
+ config.add_facet_fields_to_solr_request!
582
+ end
583
+ end
584
+
453
585
  it "should add single additional facet.field from app" do
454
- solr_params = solr_search_params( "facet.field" => "additional_facet" )
586
+ solr_params = subject.solr_search_params( "facet.field" => "additional_facet" )
455
587
  expect(solr_params[:"facet.field"]).to include("additional_facet")
456
- expect(solr_params[:"facet.field"]).to have_at_least(2).fields
588
+ expect(solr_params[:"facet.field"]).to have(2).fields
457
589
  end
458
590
  it "should map multiple facet.field to additional facet.field" do
459
- solr_params = solr_search_params( "facet.field" => ["add_facet1", "add_facet2"] )
591
+ solr_params = subject.solr_search_params( "facet.field" => ["add_facet1", "add_facet2"] )
460
592
  expect(solr_params[:"facet.field"]).to include("add_facet1")
461
593
  expect(solr_params[:"facet.field"]).to include("add_facet2")
462
- expect(solr_params[:"facet.field"]).to have_at_least(3).fields
594
+ expect(solr_params[:"facet.field"]).to have(3).fields
463
595
  end
464
596
  it "should map facets[fields][] to additional facet.field" do
465
- solr_params = solr_search_params( "facets" => ["add_facet1", "add_facet2"] )
597
+ solr_params = subject.solr_search_params( "facets" => ["add_facet1", "add_facet2"] )
466
598
  expect(solr_params[:"facet.field"]).to include("add_facet1")
467
599
  expect(solr_params[:"facet.field"]).to include("add_facet2")
468
- expect(solr_params[:"facet.field"]).to have_at_least(3).fields
600
+ expect(solr_params[:"facet.field"]).to have(3).fields
469
601
  end
470
602
  end
471
603
 
@@ -474,11 +606,13 @@ describe 'Blacklight::SolrHelper' do
474
606
  describe "solr_facet_params" do
475
607
  before do
476
608
  @facet_field = 'format'
477
- @generated_solr_facet_params = solr_facet_params(@facet_field)
609
+ @generated_solr_facet_params = subject.solr_facet_params(@facet_field)
478
610
 
479
611
  @sort_key = Blacklight::Solr::FacetPaginator.request_keys[:sort]
480
612
  @page_key = Blacklight::Solr::FacetPaginator.request_keys[:page]
481
- @config = Blacklight::Configuration.new do |config|
613
+ end
614
+ let(:blacklight_config) do
615
+ Blacklight::Configuration.new do |config|
482
616
  config.add_facet_fields_to_solr_request!
483
617
  config.add_facet_field 'format'
484
618
  config.add_facet_field 'format_ordered', :sort => :count
@@ -486,6 +620,7 @@ describe 'Blacklight::SolrHelper' do
486
620
 
487
621
  end
488
622
  end
623
+
489
624
  it 'sets rows to 0' do
490
625
  expect(@generated_solr_facet_params[:rows]).to eq 0
491
626
  end
@@ -496,48 +631,47 @@ describe 'Blacklight::SolrHelper' do
496
631
  expect(@generated_solr_facet_params[:"f.#{@facet_field}.facet.offset"]).to eq 0
497
632
  end
498
633
  it 'uses offset manually set, and converts it to an integer' do
499
- solr_params = solr_facet_params(@facet_field, @page_key => 2)
634
+ solr_params = subject.solr_facet_params(@facet_field, @page_key => 2)
500
635
  expect(solr_params[:"f.#{@facet_field}.facet.offset"]).to eq 20
501
636
  end
502
637
  it 'defaults limit to 20' do
503
- solr_params = solr_facet_params(@facet_field)
638
+ solr_params = subject.solr_facet_params(@facet_field)
504
639
  expect(solr_params[:"f.#{@facet_field}.facet.limit"]).to eq 21
505
640
  end
506
641
 
507
642
  describe 'if facet_list_limit is defined in controller' do
508
- def facet_list_limit
509
- 1000
643
+ before do
644
+ subject.stub facet_list_limit: 1000
510
645
  end
511
646
  it 'uses controller method for limit' do
512
- solr_params = solr_facet_params(@facet_field)
647
+ solr_params = subject.solr_facet_params(@facet_field)
513
648
  expect(solr_params[:"f.#{@facet_field}.facet.limit"]).to eq 1001
514
649
  end
515
650
 
516
651
  it 'uses controller method for limit when a ordinary limit is set' do
517
- solr_params = solr_facet_params(@facet_field)
652
+ solr_params = subject.solr_facet_params(@facet_field)
518
653
  expect(solr_params[:"f.#{@facet_field}.facet.limit"]).to eq 1001
519
654
  end
520
655
  end
521
656
 
522
657
  it 'uses the default sort' do
523
- solr_params = solr_facet_params(@facet_field)
658
+ solr_params = subject.solr_facet_params(@facet_field)
524
659
  expect(solr_params[:"f.#{@facet_field}.facet.sort"]).to be_blank
525
660
  end
526
661
 
527
662
  it "uses the field-specific sort" do
528
- @facet_field = 'format_ordered'
529
- solr_params = solr_facet_params(@facet_field)
530
- expect(solr_params[:"f.#{@facet_field}.facet.sort"]).to eq :count
663
+ solr_params = subject.solr_facet_params('format_ordered')
664
+ expect(solr_params[:"f.format_ordered.facet.sort"]).to eq :count
531
665
  end
532
666
 
533
667
  it 'uses sort provided in the parameters' do
534
- solr_params = solr_facet_params(@facet_field, @sort_key => "index")
668
+ solr_params = subject.solr_facet_params(@facet_field, @sort_key => "index")
535
669
  expect(solr_params[:"f.#{@facet_field}.facet.sort"]).to eq 'index'
536
670
  end
537
671
  it "comes up with the same params as #solr_search_params to constrain context for facet list" do
538
672
  search_params = {:q => 'tibetan history', :f=> {:format=>'Book', :language_facet=>'Tibetan'}}
539
- solr_search_params = solr_search_params( search_params )
540
- solr_facet_params = solr_facet_params('format', search_params)
673
+ solr_search_params = subject.solr_search_params( search_params )
674
+ solr_facet_params = subject.solr_facet_params('format', search_params)
541
675
 
542
676
  solr_search_params.each_pair do |key, value|
543
677
  # The specific params used for fetching the facet list we
@@ -549,15 +683,13 @@ describe 'Blacklight::SolrHelper' do
549
683
 
550
684
  end
551
685
  end
552
- describe "for facet limit parameters config ed" do
553
- def params
554
- {:search_field => "test_field", :q => "test query"}
555
- end
556
-
557
-
558
- before do
559
- @generated_params = solr_search_params
686
+ describe "for facet limit parameters config ed" do
687
+ before do
688
+ subject.stub params: {:search_field => "test_field", :q => "test query"}
689
+ @generated_params = subject.solr_search_params
560
690
  end
691
+
692
+ let(:blacklight_config) { copy_of_catalog_config }
561
693
 
562
694
  it "should include specifically configged facet limits +1" do
563
695
  expect(@generated_params[:"f.subject_topic_facet.facet.limit"]).to eq 21
@@ -570,7 +702,7 @@ describe 'Blacklight::SolrHelper' do
570
702
 
571
703
  describe "get_facet_pagination", :integration => true do
572
704
  before(:each) do
573
- @facet_paginator = get_facet_pagination(@facet_field)
705
+ @facet_paginator = subject.get_facet_pagination(@facet_field)
574
706
  end
575
707
  it 'should return a facet paginator' do
576
708
  expect(@facet_paginator).to be_a_kind_of(Blacklight::Solr::FacetPaginator)
@@ -583,21 +715,22 @@ describe 'Blacklight::SolrHelper' do
583
715
  # SPECS FOR SEARCH RESULTS FOR QUERY
584
716
  describe 'Search Results', :integration => true do
585
717
 
718
+ let(:blacklight_config) { copy_of_catalog_config }
586
719
  describe 'for a sample query returning results' do
587
720
 
588
- before(:all) do
589
- (@solr_response, @document_list) = get_search_results(:q => @all_docs_query)
721
+ before do
722
+ (@solr_response, @document_list) = subject.get_search_results(:q => @all_docs_query)
590
723
  end
591
724
 
592
725
  it "should use the configured request handler " do
593
726
  blacklight_config.stub(:default_solr_params).and_return({:qt => 'custom_request_handler'})
594
727
  blacklight_solr.should_receive(:send_and_receive) do |path, params|
595
728
  expect(path).to eq 'select'
596
- expect(params[:params][:'facet.field']).to eq ["format", "{!ex=pub_date_single}pub_date", "subject_topic_facet", "language_facet", "lc_1letter_facet", "subject_geo_facet", "subject_era_facet"]
597
- expect(params[:params][:"facet.query"]).to eq ["pub_date:[#{5.years.ago.year} TO *]", "pub_date:[#{10.years.ago.year} TO *]", "pub_date:[#{25.years.ago.year} TO *]"]
598
- expect(params[:params]).to include(:rows => 10, :qt=>"custom_request_handler", :q=>"", "spellcheck.q"=>"", :"f.subject_topic_facet.facet.limit"=>21, :sort=>"score desc, pub_date_sort desc, title_sort asc")
729
+ expect(params[:params]['facet.field']).to eq ["format", "{!ex=pub_date_single}pub_date", "subject_topic_facet", "language_facet", "lc_1letter_facet", "subject_geo_facet", "subject_era_facet"]
730
+ expect(params[:params]["facet.query"]).to eq ["pub_date:[#{5.years.ago.year} TO *]", "pub_date:[#{10.years.ago.year} TO *]", "pub_date:[#{25.years.ago.year} TO *]"]
731
+ expect(params[:params]).to include('rows' => 10, 'qt'=>"custom_request_handler", 'q'=>"", "spellcheck.q"=>"", "f.subject_topic_facet.facet.limit"=>21, 'sort'=>"score desc, pub_date_sort desc, title_sort asc")
599
732
  end.and_return({'response'=>{'docs'=>[]}})
600
- get_search_results(:q => @all_docs_query)
733
+ subject.get_search_results(:q => @all_docs_query)
601
734
  end
602
735
 
603
736
  it 'should have a @response.docs list of the same size as @document_list' do
@@ -619,8 +752,8 @@ describe 'Blacklight::SolrHelper' do
619
752
  end
620
753
 
621
754
  describe "for a query returning a grouped response" do
622
- before(:all) do
623
- (@solr_response, @document_list) = get_search_results({:q => @all_docs_query}, :group => true, :'group.field' => 'pub_date_sort')
755
+ before do
756
+ (@solr_response, @document_list) = subject.get_search_results({:q => @all_docs_query}, :group => true, :'group.field' => 'pub_date_sort')
624
757
  end
625
758
 
626
759
  it "should have an empty document list" do
@@ -633,13 +766,12 @@ describe 'Blacklight::SolrHelper' do
633
766
  end
634
767
  end
635
768
 
636
- describe "for a query returning multiple groups" do
637
- before(:all) do
638
- (@solr_response, @document_list) = get_search_results({:q => @all_docs_query}, :group => true, :'group.field' => ['pub_date_sort', 'title_sort'])
639
- end
769
+ describe "for a query returning multiple groups", integration: true do
770
+ let(:blacklight_config) { copy_of_catalog_config }
640
771
 
641
- def grouped_key_for_results
642
- 'title_sort'
772
+ before do
773
+ subject.stub grouped_key_for_results: 'title_sort'
774
+ (@solr_response, @document_list) = subject.get_search_results({:q => @all_docs_query}, :group => true, :'group.field' => ['pub_date_sort', 'title_sort'])
643
775
  end
644
776
 
645
777
  it "should have an empty document list" do
@@ -654,7 +786,7 @@ describe 'Blacklight::SolrHelper' do
654
786
 
655
787
  describe '#query_solr' do
656
788
  it 'should have results' do
657
- solr_response = query_solr(:q => @single_word_query)
789
+ solr_response = subject.query_solr(:q => @single_word_query)
658
790
  expect(solr_response.docs).to have_at_least(1).result
659
791
  end
660
792
 
@@ -662,7 +794,7 @@ describe 'Blacklight::SolrHelper' do
662
794
 
663
795
  describe 'for All Docs Query, No Facets' do
664
796
  it 'should have non-nil values for required doc fields set in initializer' do
665
- (solr_response, document_list) = get_search_results(:q => @all_docs_query)
797
+ (solr_response, document_list) = subject.get_search_results(:q => @all_docs_query)
666
798
  result_docs = document_list
667
799
  document = result_docs.first
668
800
  expect(document.get(blacklight_config.index.title_field)).not_to be_nil
@@ -675,12 +807,12 @@ describe 'Blacklight::SolrHelper' do
675
807
  describe "Single Word Query with no Facets" do
676
808
 
677
809
  it 'should have results' do
678
- solr_response = query_solr(:q => @single_word_query)
810
+ solr_response = subject.query_solr(:q => @single_word_query)
679
811
  expect(solr_response.docs).to have_at_least(1).result
680
812
  end
681
813
 
682
814
  it 'should have results' do
683
- (solr_response, document_list) = get_search_results(:q => @single_word_query)
815
+ (solr_response, document_list) = subject.get_search_results(:q => @single_word_query)
684
816
  expect(solr_response.docs).to have(document_list.size).results
685
817
  expect(solr_response.docs).to have_at_least(1).result
686
818
  end
@@ -689,7 +821,7 @@ describe 'Blacklight::SolrHelper' do
689
821
  describe "Multiple Words Query with No Facets" do
690
822
  it 'should have results' do
691
823
 
692
- (solr_response, document_list) = get_search_results(:q => @mult_word_query)
824
+ (solr_response, document_list) = subject.get_search_results(:q => @mult_word_query)
693
825
  expect(solr_response.docs).to have(document_list.size).results
694
826
  expect(solr_response.docs).to have_at_least(1).result
695
827
  end
@@ -697,7 +829,7 @@ describe 'Blacklight::SolrHelper' do
697
829
 
698
830
  describe "One Facet, No Query" do
699
831
  it 'should have results' do
700
- (solr_response, document_list) = get_search_results(:f => @single_facet)
832
+ (solr_response, document_list) = subject.get_search_results(:f => @single_facet)
701
833
  expect(solr_response.docs).to have(document_list.size).results
702
834
  expect(solr_response.docs).to have_at_least(1).result
703
835
  end
@@ -705,7 +837,7 @@ describe 'Blacklight::SolrHelper' do
705
837
 
706
838
  describe "Mult Facets, No Query" do
707
839
  it 'should have results' do
708
- (solr_response, document_list) = get_search_results(:f => @multi_facets)
840
+ (solr_response, document_list) = subject.get_search_results(:f => @multi_facets)
709
841
  expect(solr_response.docs).to have(document_list.size).results
710
842
  expect(solr_response.docs).to have_at_least(1).result
711
843
  end
@@ -713,7 +845,7 @@ describe 'Blacklight::SolrHelper' do
713
845
 
714
846
  describe "Single Word Query with One Facet" do
715
847
  it 'should have results' do
716
- (solr_response, document_list) = get_search_results(:q => @single_word_query, :f => @single_facet)
848
+ (solr_response, document_list) = subject.get_search_results(:q => @single_word_query, :f => @single_facet)
717
849
  expect(solr_response.docs).to have(document_list.size).results
718
850
  expect(solr_response.docs).to have_at_least(1).result
719
851
  end
@@ -721,7 +853,7 @@ describe 'Blacklight::SolrHelper' do
721
853
 
722
854
  describe "Multiple Words Query with Multiple Facets" do
723
855
  it 'should have results' do
724
- (solr_response, document_list) = get_search_results(:q => @mult_word_query, :f => @multi_facets)
856
+ (solr_response, document_list) = subject.get_search_results(:q => @mult_word_query, :f => @multi_facets)
725
857
  expect(solr_response.docs).to have(document_list.size).results
726
858
  expect(solr_response.docs).to have_at_least(1).result
727
859
  end
@@ -729,7 +861,7 @@ describe 'Blacklight::SolrHelper' do
729
861
 
730
862
  describe "for All Docs Query and One Facet" do
731
863
  it 'should have results' do
732
- (solr_response, document_list) = get_search_results(:q => @all_docs_query, :f => @single_facet)
864
+ (solr_response, document_list) = subject.get_search_results(:q => @all_docs_query, :f => @single_facet)
733
865
  expect(solr_response.docs).to have(document_list.size).results
734
866
  expect(solr_response.docs).to have_at_least(1).result
735
867
  end
@@ -739,7 +871,7 @@ describe 'Blacklight::SolrHelper' do
739
871
 
740
872
  describe "for Query Without Results and No Facet" do
741
873
  it 'should have no results and not raise error' do
742
- (solr_response, document_list) = get_search_results(:q => @no_docs_query)
874
+ (solr_response, document_list) = subject.get_search_results(:q => @no_docs_query)
743
875
  expect(document_list).to have(0).results
744
876
  expect(solr_response.docs).to have(0).results
745
877
  end
@@ -747,7 +879,7 @@ describe 'Blacklight::SolrHelper' do
747
879
 
748
880
  describe "for Query Without Results and One Facet" do
749
881
  it 'should have no results and not raise error' do
750
- (solr_response, document_list) = get_search_results(:q => @no_docs_query, :f => @single_facet)
882
+ (solr_response, document_list) = subject.get_search_results(:q => @no_docs_query, :f => @single_facet)
751
883
  expect(document_list).to have(0).results
752
884
  expect(solr_response.docs).to have(0).results
753
885
  end
@@ -755,7 +887,7 @@ describe 'Blacklight::SolrHelper' do
755
887
 
756
888
  describe "for All Docs Query and Bad Facet" do
757
889
  it 'should have no results and not raise error' do
758
- (solr_response, document_list) = get_search_results(:q => @all_docs_query, :f => @bad_facet)
890
+ (solr_response, document_list) = subject.get_search_results(:q => @all_docs_query, :f => @bad_facet)
759
891
  expect(document_list).to have(0).results
760
892
  expect(solr_response.docs).to have(0).results
761
893
  end
@@ -770,17 +902,21 @@ describe 'Blacklight::SolrHelper' do
770
902
  # SPECS FOR SEARCH RESULTS FOR FACETS
771
903
  describe 'Facets in Search Results for All Docs Query', :integration => true do
772
904
 
773
- before(:all) do
774
- (solr_response, document_list) = get_search_results(:q => @all_docs_query)
905
+ let(:blacklight_config) { copy_of_catalog_config }
906
+
907
+ before do
908
+ (solr_response, document_list) = subject.get_search_results(:q => @all_docs_query)
775
909
  @facets = solr_response.facets
776
910
  end
777
911
 
778
912
  it 'should have more than one facet' do
779
913
  expect(@facets).to have_at_least(1).facet
780
914
  end
781
- it 'should have all facets specified in initializer' do
782
- blacklight_config.facet_fields_to_add_to_solr.each do |field|
783
- expect(@facets.find {|f| f.name == field}).not_to be_nil
915
+ it 'should have all facets specified in initializer' do
916
+ fields = blacklight_config.facet_fields.reject { |k,v| v.query || v.pivot }
917
+ expect(@facets.map { |f| f.name }).to match_array fields.map { |k, v| v.field }
918
+ fields.each do |key, field|
919
+ expect(@facets.find {|f| f.name == field.field}).not_to be_nil
784
920
  end
785
921
  end
786
922
  it 'should have at least one value for each facet' do
@@ -810,46 +946,47 @@ describe 'Blacklight::SolrHelper' do
810
946
 
811
947
  # SPECS FOR SEARCH RESULTS FOR PAGING
812
948
  describe 'Paging', :integration => true do
949
+ let(:blacklight_config) { copy_of_catalog_config }
813
950
 
814
951
  it 'should start with first results by default' do
815
- (solr_response, document_list) = get_search_results(:q => @all_docs_query)
952
+ (solr_response, document_list) = subject.get_search_results(:q => @all_docs_query)
816
953
  expect(solr_response.params[:start].to_i).to eq 0
817
954
  end
818
955
  it 'should have number of results (per page) set in initializer, by default' do
819
- (solr_response, document_list) = get_search_results(:q => @all_docs_query)
956
+ (solr_response, document_list) = subject.get_search_results(:q => @all_docs_query)
820
957
  expect(solr_response.docs).to have(blacklight_config[:default_solr_params][:rows]).items
821
958
  expect(document_list).to have(blacklight_config[:default_solr_params][:rows]).items
822
959
  end
823
960
 
824
961
  it 'should get number of results per page requested' do
825
962
  num_results = 3 # non-default value
826
- (solr_response1, document_list1) = get_search_results(:q => @all_docs_query, :per_page => num_results)
963
+ (solr_response1, document_list1) = subject.get_search_results(:q => @all_docs_query, :per_page => num_results)
827
964
  expect(document_list1).to have(num_results).docs
828
965
  expect(solr_response1.docs).to have(num_results).docs
829
966
  end
830
967
 
831
968
  it 'should get number of rows requested' do
832
969
  num_results = 4 # non-default value
833
- (solr_response1, document_list1) = get_search_results(:q => @all_docs_query, :rows => num_results)
970
+ (solr_response1, document_list1) = subject.get_search_results(:q => @all_docs_query, :rows => num_results)
834
971
  expect(document_list1).to have(num_results).docs
835
972
  expect(solr_response1.docs).to have(num_results).docs
836
973
  end
837
974
 
838
975
  it 'should skip appropriate number of results when requested - default per page' do
839
976
  page = 3
840
- (solr_response2, document_list2) = get_search_results(:q => @all_docs_query, :page => page)
977
+ (solr_response2, document_list2) = subject.get_search_results(:q => @all_docs_query, :page => page)
841
978
  expect(solr_response2.params[:start].to_i).to eq blacklight_config[:default_solr_params][:rows] * (page-1)
842
979
  end
843
980
  it 'should skip appropriate number of results when requested - non-default per page' do
844
981
  page = 3
845
982
  num_results = 3
846
- (solr_response2a, document_list2a) = get_search_results(:q => @all_docs_query, :per_page => num_results, :page => page)
983
+ (solr_response2a, document_list2a) = subject.get_search_results(:q => @all_docs_query, :per_page => num_results, :page => page)
847
984
  expect(solr_response2a.params[:start].to_i).to eq num_results * (page-1)
848
985
  end
849
986
 
850
987
  it 'should have no results when prompted for page after last result' do
851
988
  big = 5000
852
- (solr_response3, document_list3) = get_search_results(:q => @all_docs_query, :rows => big, :page => big)
989
+ (solr_response3, document_list3) = subject.get_search_results(:q => @all_docs_query, :rows => big, :page => big)
853
990
  expect(document_list3).to have(0).docs
854
991
  expect(solr_response3.docs).to have(0).docs
855
992
  end
@@ -857,12 +994,12 @@ describe 'Blacklight::SolrHelper' do
857
994
  it 'should show first results when prompted for page before first result' do
858
995
  # FIXME: should it show first results, or should it throw an error for view to deal w?
859
996
  # Solr throws an error for a negative start value
860
- (solr_response4, document_list4) = get_search_results(:q => @all_docs_query, :page => '-1')
997
+ (solr_response4, document_list4) = subject.get_search_results(:q => @all_docs_query, :page => '-1')
861
998
  expect(solr_response4.params[:start].to_i).to eq 0
862
999
  end
863
1000
  it 'should have results available when asked for more than are in response' do
864
1001
  big = 5000
865
- (solr_response5, document_list5) = get_search_results(:q => @all_docs_query, :rows => big, :page => 1)
1002
+ (solr_response5, document_list5) = subject.get_search_results(:q => @all_docs_query, :rows => big, :page => 1)
866
1003
  expect(solr_response5.docs).to have(document_list5.length).docs
867
1004
  expect(solr_response5.docs).to have_at_least(1).doc
868
1005
  end
@@ -871,22 +1008,28 @@ describe 'Blacklight::SolrHelper' do
871
1008
 
872
1009
  # SPECS FOR SINGLE DOCUMENT REQUESTS
873
1010
  describe 'Get Document By Id', :integration => true do
874
- before(:all) do
1011
+ before do
875
1012
  @doc_id = '2007020969'
876
1013
  @bad_id = "redrum"
877
- @response2, @document = get_solr_response_for_doc_id(@doc_id)
1014
+ @response2, @document = subject.get_solr_response_for_doc_id(@doc_id)
878
1015
  end
879
1016
 
880
1017
  it "should raise Blacklight::InvalidSolrID for an unknown id" do
881
1018
  expect {
882
- get_solr_response_for_doc_id(@bad_id)
1019
+ subject.get_solr_response_for_doc_id(@bad_id)
883
1020
  }.to raise_error(Blacklight::Exceptions::InvalidSolrID)
884
1021
  end
885
1022
 
886
1023
  it "should use a provided document request handler " do
887
1024
  blacklight_config.stub(:document_solr_request_handler => 'document')
888
- blacklight_solr.should_receive(:get).with('select', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
889
- expect { get_solr_response_for_doc_id(@doc_id)}.to raise_error Blacklight::Exceptions::InvalidSolrID
1025
+ blacklight_solr.should_receive(:send_and_receive).with('select', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
1026
+ expect { subject.get_solr_response_for_doc_id(@doc_id)}.to raise_error Blacklight::Exceptions::InvalidSolrID
1027
+ end
1028
+
1029
+ it "should use a provided document solr path " do
1030
+ blacklight_config.stub(:document_solr_path => 'get')
1031
+ blacklight_solr.should_receive(:send_and_receive).with('get', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
1032
+ expect { subject.get_solr_response_for_doc_id(@doc_id)}.to raise_error Blacklight::Exceptions::InvalidSolrID
890
1033
  end
891
1034
 
892
1035
  it "should have a non-nil result for a known id" do
@@ -906,20 +1049,25 @@ describe 'Blacklight::SolrHelper' do
906
1049
 
907
1050
  describe "solr_doc_params" do
908
1051
  it "should default to using the 'document' requestHandler" do
909
- doc_params = solr_doc_params('asdfg')
1052
+ doc_params = subject.solr_doc_params('asdfg')
910
1053
  expect(doc_params[:qt]).to eq 'document'
911
1054
  end
912
1055
 
1056
+ it "should default to using the id parameter when sending solr queries" do
1057
+ doc_params = subject.solr_doc_params('asdfg')
1058
+ expect(doc_params[:id]).to eq 'asdfg'
1059
+ end
913
1060
 
914
- describe "blacklight config's default_document_solr_parameters" do
915
- def blacklight_config
916
- config = Blacklight::Configuration.new
917
- config.default_document_solr_params = { :qt => 'my_custom_handler', :asdf => '1234' }
918
- config
919
- end
1061
+ it "should use the document_unique_id_param configuration" do
1062
+ blacklight_config.stub(document_unique_id_param: :ids)
1063
+ doc_params = subject.solr_doc_params('asdfg')
1064
+ expect(doc_params[:ids]).to eq 'asdfg'
1065
+ end
920
1066
 
1067
+ describe "blacklight config's default_document_solr_parameters" do
921
1068
  it "should use parameters from the controller's default_document_solr_parameters" do
922
- doc_params = solr_doc_params('asdfg')
1069
+ blacklight_config.default_document_solr_params = { :qt => 'my_custom_handler', :asdf => '1234' }
1070
+ doc_params = subject.solr_doc_params('asdfg')
923
1071
  expect(doc_params[:qt]).to eq 'my_custom_handler'
924
1072
  expect(doc_params[:asdf]).to eq '1234'
925
1073
  end
@@ -938,7 +1086,7 @@ describe 'Blacklight::SolrHelper' do
938
1086
  end
939
1087
  =end
940
1088
  it "should respect the configuration-supplied unique id" do
941
- doc_params = solr_doc_params('"Strong Medicine speaks"')
1089
+ doc_params = subject.solr_doc_params('"Strong Medicine speaks"')
942
1090
  expect(doc_params[:id]).to eq '"Strong Medicine speaks"'
943
1091
  end
944
1092
  end
@@ -947,9 +1095,9 @@ describe 'Blacklight::SolrHelper' do
947
1095
 
948
1096
  # SPECS FOR SINGLE DOCUMENT VIA SEARCH
949
1097
  describe "Get Document Via Search", :integration => true do
950
- before(:all) do
1098
+ before do
951
1099
  @doc_row = 3
952
- @doc = get_single_doc_via_search(@doc_row, :q => @all_docs_query)
1100
+ @doc = subject.get_single_doc_via_search(@doc_row, :q => @all_docs_query)
953
1101
  end
954
1102
  =begin
955
1103
  # can't test these here, because the method only returns the document
@@ -977,7 +1125,7 @@ describe 'Blacklight::SolrHelper' do
977
1125
  end
978
1126
 
979
1127
  it "should limit search result by facets when supplied" do
980
- doc2 = get_single_doc_via_search(@doc_row , :q => @all_docs_query, :f => @multi_facets)
1128
+ doc2 = subject.get_single_doc_via_search(@doc_row , :q => @all_docs_query, :f => @multi_facets)
981
1129
  expect(doc2[:id]).not_to be_nil
982
1130
  end
983
1131
 
@@ -986,13 +1134,13 @@ describe 'Blacklight::SolrHelper' do
986
1134
  # SPECS FOR SPELLING SUGGESTIONS VIA SEARCH
987
1135
  describe "Searches should return spelling suggestions", :integration => true do
988
1136
  it 'search results for just-poor-enough-query term should have (multiple) spelling suggestions' do
989
- (solr_response, document_list) = get_search_results({:q => 'boo'})
1137
+ (solr_response, document_list) = subject.get_search_results({:q => 'boo'})
990
1138
  expect(solr_response.spelling.words).to include('bon')
991
1139
  expect(solr_response.spelling.words).to include('bod') #for multiple suggestions
992
1140
  end
993
1141
 
994
1142
  it 'search results for just-poor-enough-query term should have multiple spelling suggestions' do
995
- (solr_response, document_list) = get_search_results({:q => 'politica'})
1143
+ (solr_response, document_list) = subject.get_search_results({:q => 'politica'})
996
1144
  expect(solr_response.spelling.words).to include('policy') # less freq
997
1145
  expect(solr_response.spelling.words).to include('politics') # more freq
998
1146
  expect(solr_response.spelling.words).to include('political') # more freq
@@ -1005,17 +1153,17 @@ describe 'Blacklight::SolrHelper' do
1005
1153
  end
1006
1154
 
1007
1155
  it "title search results for just-poor-enough query term should have spelling suggestions" do
1008
- (solr_response, document_list) = get_search_results({:q => 'yehudiyam', :qt => 'search', :"spellcheck.dictionary" => "title"})
1156
+ (solr_response, document_list) = subject.get_search_results({:q => 'yehudiyam', :qt => 'search', :"spellcheck.dictionary" => "title"})
1009
1157
  expect(solr_response.spelling.words).to include('yehudiyim')
1010
1158
  end
1011
1159
 
1012
1160
  it "author search results for just-poor-enough-query term should have spelling suggestions" do
1013
- (solr_response, document_list) = get_search_results({:q => 'shirma', :qt => 'search', :"spellcheck.dictionary" => "author"})
1161
+ (solr_response, document_list) = subject.get_search_results({:q => 'shirma', :qt => 'search', :"spellcheck.dictionary" => "author"})
1014
1162
  expect(solr_response.spelling.words).to include('sharma')
1015
1163
  end
1016
1164
 
1017
1165
  it "subject search results for just-poor-enough-query term should have spelling suggestions" do
1018
- (solr_response, document_list) = get_search_results({:q => 'wome', :qt => 'search', :"spellcheck.dictionary" => "subject"})
1166
+ (solr_response, document_list) = subject.get_search_results({:q => 'wome', :qt => 'search', :"spellcheck.dictionary" => "subject"})
1019
1167
  expect(solr_response.spelling.words).to include('women')
1020
1168
  end
1021
1169
 
@@ -1027,52 +1175,56 @@ describe 'Blacklight::SolrHelper' do
1027
1175
  end
1028
1176
 
1029
1177
  describe "facet_limit_for" do
1178
+ let(:blacklight_config) { copy_of_catalog_config }
1030
1179
 
1031
1180
  it "should return specified value for facet_field specified" do
1032
- expect(facet_limit_for("subject_topic_facet")).to eq blacklight_config.facet_fields["subject_topic_facet"].limit
1181
+ expect(subject.facet_limit_for("subject_topic_facet")).to eq blacklight_config.facet_fields["subject_topic_facet"].limit
1033
1182
  end
1034
1183
  it "should generate proper solr param" do
1035
- expect(solr_search_params[:"f.subject_topic_facet.facet.limit"]).to eq 21
1184
+ expect(subject.solr_search_params[:"f.subject_topic_facet.facet.limit"]).to eq 21
1036
1185
  end
1037
1186
 
1038
1187
  it "facet_limit_hash should return hash with key being facet_field and value being configured limit" do
1039
1188
  # facet_limit_hash has been removed from solrhelper in refactor. should it go back?
1040
1189
  pending "facet_limit_hash has been removed from solrhelper in refactor. should it go back?"
1041
- expect(facet_limit_hash).to eq blacklight_config[:facet][:limits]
1190
+ expect(subject.facet_limit_hash).to eq blacklight_config[:facet][:limits]
1042
1191
  end
1043
1192
  it "should handle no facet_limits in config" do
1044
- def blacklight_config
1045
- config = Blacklight::Configuration.new
1046
- config.facet_fields = {}
1047
- return config
1048
- end
1193
+ blacklight_config.facet_fields = {}
1049
1194
 
1050
- expect(facet_limit_for("subject_topic_facet")).to be_nil
1195
+ expect(subject.facet_limit_for("subject_topic_facet")).to be_nil
1051
1196
 
1052
- expect(solr_search_params).not_to have_key(:"f.subject_topic_facet.facet.limit")
1197
+ expect(subject.solr_search_params).not_to have_key(:"f.subject_topic_facet.facet.limit")
1053
1198
 
1054
1199
  end
1055
1200
 
1056
1201
  describe "for 'true' configured values" do
1202
+ let(:blacklight_config) do
1203
+ config = Blacklight::Configuration.new
1204
+ config.add_facet_field "language_facet", limit: true
1205
+ config
1206
+ end
1057
1207
  it "should return nil if no @response available" do
1058
- expect(facet_limit_for("some_unknown_field")).to be_nil
1208
+ expect(subject.facet_limit_for("some_unknown_field")).to be_nil
1059
1209
  end
1060
1210
  it "should get from @response facet.limit if available" do
1061
- # Okay, this is cheesy, since we included SolrHelper directly
1062
- # into our example groups, we need to set an iVar here, so it will
1063
- # use it.
1064
- @response = double(params:{"facet.limit" => 11})
1065
- expect(facet_limit_for("language_facet")).to eq 10
1211
+ @response = double()
1212
+ @response.stub(:facet_by_field_name).with("language_facet").and_return(double(limit: nil))
1213
+ subject.instance_variable_set(:@response, @response)
1214
+ blacklight_config.facet_fields['language_facet'].limit = 10
1215
+ expect(subject.facet_limit_for("language_facet")).to eq 10
1066
1216
  end
1067
- it "should get from specific field in @response if available" do
1068
- @response = double(params: {"facet.limit" => 11,"f.language_facet.facet.limit" => 16})
1069
- expect(facet_limit_for("language_facet")).to eq 15
1217
+ it "should get the limit from the facet field in @response" do
1218
+ @response = double()
1219
+ @response.stub(:facet_by_field_name).with("language_facet").and_return(double(limit: 16))
1220
+ subject.instance_variable_set(:@response, @response)
1221
+ expect(subject.facet_limit_for("language_facet")).to eq 15
1070
1222
  end
1071
1223
  end
1072
1224
  end
1073
1225
 
1074
1226
  describe "with max per page enforced" do
1075
- def blacklight_config
1227
+ let(:blacklight_config) do
1076
1228
  config = Blacklight::Configuration.new
1077
1229
  config.max_per_page = 123
1078
1230
  return config
@@ -1080,7 +1232,7 @@ describe 'Blacklight::SolrHelper' do
1080
1232
 
1081
1233
  it "should enforce max_per_page against all parameters" do
1082
1234
  expect(blacklight_config.max_per_page).to eq 123
1083
- expect(solr_search_params(:per_page => 98765)[:rows]).to eq 123
1235
+ expect(subject.solr_search_params(:per_page => 98765)[:rows]).to eq 123
1084
1236
  end
1085
1237
  end
1086
1238
 
@@ -1090,18 +1242,18 @@ describe 'Blacklight::SolrHelper' do
1090
1242
  @mock_response.stub(:docs => [])
1091
1243
  end
1092
1244
  it "should contruct a solr query based on the field and value pair" do
1093
- self.should_receive(:find).with(an_instance_of(String), hash_including(:q => "field_name:(value)")).and_return(@mock_response)
1094
- get_solr_response_for_field_values('field_name', 'value')
1245
+ subject.should_receive(:find).with(hash_including(:q => "field_name:(value)")).and_return(@mock_response)
1246
+ subject.get_solr_response_for_field_values('field_name', 'value')
1095
1247
  end
1096
1248
 
1097
1249
  it "should OR multiple values together" do
1098
- self.should_receive(:find).with(an_instance_of(String), hash_including(:q => "field_name:(a OR b)")).and_return(@mock_response)
1099
- get_solr_response_for_field_values('field_name', ['a', 'b'])
1250
+ subject.should_receive(:find).with(hash_including(:q => "field_name:(a OR b)")).and_return(@mock_response)
1251
+ subject.get_solr_response_for_field_values('field_name', ['a', 'b'])
1100
1252
  end
1101
1253
 
1102
1254
  it "should escape crazy identifiers" do
1103
- self.should_receive(:find).with(an_instance_of(String), hash_including(:q => "field_name:(\"h://\\\"\\\'\")")).and_return(@mock_response)
1104
- get_solr_response_for_field_values('field_name', 'h://"\'')
1255
+ subject.should_receive(:find).with(hash_including(:q => "field_name:(\"h://\\\"\\\'\")")).and_return(@mock_response)
1256
+ subject.get_solr_response_for_field_values('field_name', 'h://"\'')
1105
1257
  end
1106
1258
  end
1107
1259
 
@@ -1113,100 +1265,59 @@ describe 'Blacklight::SolrHelper' do
1113
1265
  # more like this
1114
1266
  # nearby on shelf
1115
1267
  it "should raise a Blacklight exception if RSolr can't connect to the Solr instance" do
1116
- blacklight_solr.stub(:get).and_raise(Errno::ECONNREFUSED)
1117
- expect { find(:a => 123) }.to raise_exception(/Unable to connect to Solr instance/)
1268
+ blacklight_solr.stub(:send_and_receive).and_raise(Errno::ECONNREFUSED)
1269
+ expect { subject.find(:a => 123) }.to raise_exception(/Unable to connect to Solr instance/)
1118
1270
  end
1119
1271
 
1120
1272
  describe "grouped_key_for_results" do
1121
- let :blacklight_config do
1122
- Blacklight::Configuration.new
1123
- end
1124
-
1125
1273
  it "should pull the grouped key out of the config" do
1126
1274
  blacklight_config.index.group = 'xyz'
1127
- expect(self.grouped_key_for_results).to eq('xyz')
1275
+ expect(subject.grouped_key_for_results).to eq('xyz')
1128
1276
  end
1129
1277
  end
1130
1278
 
1131
1279
  describe "#with_tag_ex" do
1132
1280
  it "should add an !ex local parameter if the facet configuration requests it" do
1133
- expect(self.with_ex_local_param("xyz", "some-value")).to eq "{!ex=xyz}some-value"
1281
+ expect(subject.with_ex_local_param("xyz", "some-value")).to eq "{!ex=xyz}some-value"
1134
1282
  end
1135
1283
 
1136
1284
  it "should not add an !ex local parameter if it isn't configured" do
1137
1285
  mock_field = double()
1138
- expect(self.with_ex_local_param(nil, "some-value")).to eq "some-value"
1286
+ expect(subject.with_ex_local_param(nil, "some-value")).to eq "some-value"
1139
1287
  end
1140
1288
 
1141
1289
 
1142
1290
  end
1143
1291
 
1144
1292
  describe "#get_previous_and_next_documents_for_search" do
1145
- before(:all) do
1146
- @full_response, @all_docs = get_search_results({:q => ''}, :rows => 1000)
1293
+ before do
1294
+ @full_response, @all_docs = subject.get_search_results({:q => ''}, :rows => 1000)
1147
1295
  end
1148
1296
 
1149
1297
  it "should return the previous and next documents for a search" do
1150
- response, docs = get_previous_and_next_documents_for_search(4, :q => '')
1298
+ response, docs = subject.get_previous_and_next_documents_for_search(4, :q => '')
1151
1299
 
1152
1300
  expect(docs.first.id).to eq @all_docs[3].id
1153
1301
  expect(docs.last.id).to eq @all_docs[5].id
1154
1302
  end
1155
1303
 
1156
1304
  it "should return only the next document if the counter is 0" do
1157
- response, docs = get_previous_and_next_documents_for_search(0, :q => '')
1305
+ response, docs = subject.get_previous_and_next_documents_for_search(0, :q => '')
1158
1306
 
1159
1307
  expect(docs.first).to be_nil
1160
1308
  expect(docs.last.id).to eq @all_docs[1].id
1161
1309
  end
1162
1310
 
1163
1311
  it "should return only the previous document if the counter is the total number of documents" do
1164
- response, docs = get_previous_and_next_documents_for_search(@full_response.total - 1, :q => '')
1312
+ response, docs = subject.get_previous_and_next_documents_for_search(@full_response.total - 1, :q => '')
1165
1313
  expect(docs.first.id).to eq @all_docs.slice(-2).id
1166
1314
  expect(docs.last).to be_nil
1167
1315
  end
1168
1316
 
1169
1317
  it "should return an array of nil values if there is only one result" do
1170
- response, docs = get_previous_and_next_documents_for_search(0, :q => 'id:2007020969')
1318
+ response, docs = subject.get_previous_and_next_documents_for_search(0, :q => 'id:2007020969')
1171
1319
  expect(docs.last).to be_nil
1172
1320
  expect(docs.first).to be_nil
1173
1321
  end
1174
1322
  end
1175
-
1176
- describe "http_method configuration" do
1177
- describe "using default" do
1178
- let (:blacklight_config) {Blacklight::Configuration.new}
1179
-
1180
- it "defaults to get" do
1181
- expect(blacklight_config.http_method).to eq :get
1182
- blacklight_solr.should_receive(:send_and_receive) do |path, params|
1183
- expect(path).to eq 'select'
1184
- expect(params[:method]).to eq :get
1185
- expect(params[:params]).to include(:q)
1186
- end.and_return({'response'=>{'docs'=>[]}})
1187
- get_search_results(:q => @all_docs_query)
1188
- end
1189
- end
1190
-
1191
- describe "setting to post" do
1192
- let (:blacklight_config) {config = Blacklight::Configuration.new; config.http_method=:post; config}
1193
-
1194
- it "keep value set to post" do
1195
- expect(blacklight_config.http_method).to eq :post
1196
- blacklight_solr.should_receive(:send_and_receive) do |path, params|
1197
- expect(path).to eq 'select'
1198
- expect(params[:method]).to eq :post
1199
- expect(params[:data]).to include(:q)
1200
- end.and_return({'response'=>{'docs'=>[]}})
1201
- get_search_results(:q => @all_docs_query)
1202
- end
1203
-
1204
- it "should send a post request to solr", :integration => true do
1205
- response, docs = get_search_results(:q => @all_docs_query)
1206
- expect(docs.length).to be >= 1
1207
- end
1208
- end
1209
- end
1210
-
1211
1323
  end
1212
-