blacklight 6.2.0 → 6.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.solr_wrapper +5 -0
- data/.travis.yml +3 -5
- data/Gemfile +3 -3
- data/VERSION +1 -1
- data/app/assets/javascripts/blacklight/core.js +19 -5
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +48 -20
- data/app/helpers/blacklight/configuration_helper_behavior.rb +1 -1
- data/app/helpers/blacklight/url_helper_behavior.rb +2 -1
- data/app/presenters/blacklight/document_presenter.rb +58 -150
- data/app/presenters/blacklight/field_presenter.rb +31 -0
- data/app/presenters/blacklight/index_presenter.rb +69 -0
- data/app/presenters/blacklight/link_alternate_presenter.rb +29 -0
- data/app/presenters/blacklight/rendering/abstract_step.rb +24 -0
- data/app/presenters/blacklight/rendering/helper_method.rb +23 -0
- data/app/presenters/blacklight/rendering/join.rb +16 -0
- data/app/presenters/blacklight/rendering/link_to_facet.rb +35 -0
- data/app/presenters/blacklight/rendering/microdata.rb +17 -0
- data/app/presenters/blacklight/rendering/pipeline.rb +32 -0
- data/app/presenters/blacklight/rendering/terminator.rb +9 -0
- data/app/presenters/blacklight/show_presenter.rb +93 -0
- data/app/services/blacklight/field_retriever.rb +58 -0
- data/app/views/catalog/_document_default.atom.builder +2 -3
- data/app/views/catalog/_document_default.rss.builder +2 -2
- data/app/views/kaminari/blacklight/_next_page.html.erb +9 -3
- data/app/views/kaminari/blacklight/_prev_page.html.erb +10 -3
- data/lib/blacklight/configuration.rb +15 -3
- data/lib/blacklight/configuration/null_field.rb +13 -0
- data/lib/blacklight/configuration/view_config.rb +6 -0
- data/lib/generators/blacklight/templates/catalog_controller.rb +1 -1
- data/lib/generators/blacklight/templates/config/blacklight.yml +1 -1
- data/lib/generators/blacklight/templates/config/jetty.yml +1 -1
- data/spec/controllers/alternate_controller_spec.rb +2 -2
- data/spec/controllers/application_controller_spec.rb +1 -1
- data/spec/controllers/blacklight/facet_spec.rb +3 -3
- data/spec/controllers/blacklight/search_fields_spec.rb +7 -7
- data/spec/controllers/blacklight/search_helper_spec.rb +44 -44
- data/spec/controllers/blacklight/suggest_search_spec.rb +1 -1
- data/spec/controllers/bookmarks_controller_spec.rb +6 -6
- data/spec/controllers/catalog_controller_spec.rb +125 -125
- data/spec/controllers/saved_searches_controller_spec.rb +4 -9
- data/spec/controllers/search_history_controller_spec.rb +3 -6
- data/spec/controllers/suggest_controller_spec.rb +2 -2
- data/spec/features/alternate_controller_spec.rb +3 -3
- data/spec/features/bookmarks_spec.rb +6 -6
- data/spec/features/did_you_mean_spec.rb +10 -10
- data/spec/features/facets_spec.rb +4 -4
- data/spec/features/record_view_spec.rb +4 -4
- data/spec/features/saved_searches_spec.rb +4 -4
- data/spec/features/search_context_spec.rb +4 -4
- data/spec/features/search_filters_spec.rb +10 -10
- data/spec/features/search_formats_spec.rb +2 -2
- data/spec/features/search_history_spec.rb +5 -5
- data/spec/features/search_pagination_spec.rb +4 -4
- data/spec/features/search_results_spec.rb +7 -7
- data/spec/features/search_sort_spec.rb +2 -2
- data/spec/features/search_spec.rb +6 -6
- data/spec/helpers/blacklight_helper_spec.rb +105 -65
- data/spec/helpers/catalog_helper_spec.rb +36 -36
- data/spec/helpers/configuration_helper_spec.rb +28 -28
- data/spec/helpers/facets_helper_spec.rb +39 -39
- data/spec/helpers/hash_as_hidden_fields_spec.rb +1 -1
- data/spec/helpers/render_constraints_helper_spec.rb +1 -1
- data/spec/helpers/search_history_constraints_helper_spec.rb +7 -7
- data/spec/helpers/url_helper_spec.rb +20 -17
- data/spec/lib/blacklight/search_state_spec.rb +2 -2
- data/spec/lib/blacklight/utils_spec.rb +15 -15
- data/spec/lib/blacklight_spec.rb +1 -1
- data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
- data/spec/models/blacklight/configurable_spec.rb +3 -3
- data/spec/models/blacklight/configuration_spec.rb +52 -52
- data/spec/models/blacklight/document_spec.rb +10 -10
- data/spec/models/blacklight/facet_paginator_spec.rb +5 -5
- data/spec/models/blacklight/search_builder_spec.rb +34 -34
- data/spec/models/blacklight/user_spec.rb +4 -4
- data/spec/models/bookmark_spec.rb +5 -5
- data/spec/models/record_mailer_spec.rb +11 -11
- data/spec/models/search_spec.rb +1 -1
- data/spec/models/solr_document_spec.rb +4 -4
- data/spec/presenters/document_presenter_spec.rb +94 -50
- data/spec/presenters/index_presenter_spec.rb +147 -0
- data/spec/presenters/pipeline_spec.rb +28 -0
- data/spec/presenters/show_presenter_spec.rb +287 -0
- data/spec/routing/catalog_routing_spec.rb +11 -11
- data/spec/spec_helper.rb +10 -1
- data/spec/support/backport_test.rb +38 -0
- data/spec/test_app_templates/Gemfile.extra +2 -10
- data/spec/views/_user_util_links.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -3
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +5 -5
- data/spec/views/catalog/_document.html.erb_spec.rb +2 -2
- data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +4 -4
- data/spec/views/catalog/_facets.html.erb_spec.rb +4 -4
- data/spec/views/catalog/_index_default.erb_spec.rb +5 -4
- data/spec/views/catalog/_index_header_default.html.erb_spec.rb +4 -3
- data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +3 -3
- data/spec/views/catalog/_search_header.erb_spec.rb +1 -1
- data/spec/views/catalog/_show_default.erb_spec.rb +6 -5
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +2 -1
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +8 -8
- data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +2 -2
- data/spec/views/catalog/_thumbnail_default.erb_spec.rb +3 -2
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +3 -3
- data/spec/views/catalog/facet.html.erb_spec.rb +3 -3
- data/spec/views/catalog/index.atom.builder_spec.rb +15 -14
- data/spec/views/catalog/index.html.erb_spec.rb +3 -3
- data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
- data/spec/views/catalog/show.html.erb_spec.rb +5 -4
- data/tasks/blacklight.rake +1 -1
- metadata +25 -4
- data/config/jetty.yml +0 -13
@@ -15,7 +15,7 @@ describe Blacklight::SuggestSearch do
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
describe '#suggest_results' do
|
18
|
-
it '
|
18
|
+
it 'calls send_and_recieve from a repository connection' do
|
19
19
|
expect(suggest_search).to receive(:suggest_handler_path).and_return(suggest_path)
|
20
20
|
expect(suggest_search.suggest_results).to eq 'sent'
|
21
21
|
end
|
@@ -5,7 +5,7 @@ describe BookmarksController do
|
|
5
5
|
# jquery 1.9 ajax does error callback if 200 returns empty body. so use 204 instead.
|
6
6
|
describe "update" do
|
7
7
|
it "has a 200 status code when creating a new one" do
|
8
|
-
|
8
|
+
put :update, xhr: true, params: { id: '2007020969', format: :js }
|
9
9
|
expect(response).to be_success
|
10
10
|
expect(response.code).to eq "200"
|
11
11
|
expect(JSON.parse(response.body)["bookmarks"]["count"]).to eq 1
|
@@ -16,7 +16,7 @@ describe BookmarksController do
|
|
16
16
|
allow(@controller).to receive_message_chain(:current_or_guest_user, :persisted?).and_return(true)
|
17
17
|
allow(@controller).to receive_message_chain(:current_or_guest_user, :bookmarks, :where, :exists?).and_return(false)
|
18
18
|
allow(@controller).to receive_message_chain(:current_or_guest_user, :bookmarks, :create).and_return(false)
|
19
|
-
|
19
|
+
put :update, xhr: true, params: { id: 'iamabooboo', format: :js }
|
20
20
|
expect(response.code).to eq "500"
|
21
21
|
end
|
22
22
|
end
|
@@ -28,7 +28,7 @@ describe BookmarksController do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "has a 200 status code when delete is success" do
|
31
|
-
|
31
|
+
delete :destroy, xhr: true, params: { id: '2007020969', format: :js }
|
32
32
|
expect(response).to be_success
|
33
33
|
expect(response.code).to eq "200"
|
34
34
|
expect(JSON.parse(response.body)["bookmarks"]["count"]).to eq 0
|
@@ -39,7 +39,7 @@ describe BookmarksController do
|
|
39
39
|
allow(@controller).to receive_message_chain(:current_or_guest_user, :existing_bookmark_for).and_return(bm)
|
40
40
|
allow(@controller).to receive_message_chain(:current_or_guest_user, :bookmarks, :find_by).and_return(double('bookmark', delete: nil, destroyed?: false))
|
41
41
|
|
42
|
-
|
42
|
+
delete :destroy, xhr: true, params: { id: 'pleasekillme', format: :js }
|
43
43
|
|
44
44
|
expect(response.code).to eq "500"
|
45
45
|
end
|
@@ -55,7 +55,7 @@ describe BookmarksController do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'finds the user from the encrypted token' do
|
58
|
-
get :index, encrypted_user_id: token
|
58
|
+
get :index, params: { encrypted_user_id: token }
|
59
59
|
expect(controller.send(:token_user).id).to eq user.id
|
60
60
|
end
|
61
61
|
|
@@ -63,7 +63,7 @@ describe BookmarksController do
|
|
63
63
|
let(:current_time) { Time.zone.now - 2.hours }
|
64
64
|
|
65
65
|
it 'is expired' do
|
66
|
-
get :index, encrypted_user_id: token
|
66
|
+
get :index, params: { encrypted_user_id: token }
|
67
67
|
expect do
|
68
68
|
controller.send(:token_user)
|
69
69
|
end.to raise_error(Blacklight::Exceptions::ExpiredSessionToken)
|
@@ -15,40 +15,40 @@ describe CatalogController do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
describe "preferred view" do
|
18
|
-
it "
|
19
|
-
get :index, q: 'foo', view: 'gallery'
|
18
|
+
it "saves the view choice" do
|
19
|
+
get :index, params: { q: 'foo', view: 'gallery' }
|
20
20
|
expect(session[:preferred_view]).to eq 'gallery'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
# check each user manipulated parameter
|
25
|
-
it "
|
26
|
-
get :index, q: user_query
|
25
|
+
it "has docs and facets for query with results", :integration => true do
|
26
|
+
get :index, params: { q: user_query }
|
27
27
|
expect(assigns(:response).docs).to_not be_empty
|
28
28
|
assert_facets_have_values(assigns(:response).aggregations)
|
29
29
|
end
|
30
|
-
it "
|
31
|
-
get :index, f: {"format" => 'Book'}
|
30
|
+
it "has docs and facets for existing facet value", :integration => true do
|
31
|
+
get :index, params: { f: {"format" => 'Book'} }
|
32
32
|
expect(assigns(:response).docs).to_not be_empty
|
33
33
|
assert_facets_have_values(assigns(:response).aggregations)
|
34
34
|
end
|
35
|
-
it "
|
35
|
+
it "has docs and facets for non-default results per page", :integration => true do
|
36
36
|
num_per_page = 7
|
37
|
-
get :index, :per_page
|
37
|
+
get :index, params: { per_page: num_per_page }
|
38
38
|
expect(assigns(:response).docs).to have(num_per_page).items
|
39
39
|
assert_facets_have_values(assigns(:response).aggregations)
|
40
40
|
end
|
41
41
|
|
42
|
-
it "
|
42
|
+
it "has docs and facets for second page", :integration => true do
|
43
43
|
page = 2
|
44
|
-
get :index, :page
|
44
|
+
get :index, params: { page: page }
|
45
45
|
expect(assigns(:response).docs).to_not be_empty
|
46
46
|
expect(assigns(:response).params[:start].to_i).to eq (page-1) * @controller.blacklight_config[:default_solr_params][:rows]
|
47
47
|
assert_facets_have_values(assigns(:response).aggregations)
|
48
48
|
end
|
49
49
|
|
50
|
-
it "
|
51
|
-
get :index, q: 'sadfdsafasdfsadfsadfsadf' # query for no results
|
50
|
+
it "has no docs or facet values for query without results", :integration => true do
|
51
|
+
get :index, params: { q: 'sadfdsafasdfsadfsadfsadf' } # query for no results
|
52
52
|
|
53
53
|
expect(assigns(:response).docs).to be_empty
|
54
54
|
assigns(:response).aggregations.each do |key, facet|
|
@@ -56,20 +56,20 @@ describe CatalogController do
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
it "
|
60
|
-
get :index, f: {example_query_facet_field: 'bogus'} # bogus custom facet value
|
59
|
+
it "shows 0 results when the user asks for an invalid value to a custom facet query", :integration => true do
|
60
|
+
get :index, params: { f: { example_query_facet_field: 'bogus' } } # bogus custom facet value
|
61
61
|
expect(assigns(:response).docs).to be_empty
|
62
62
|
end
|
63
63
|
|
64
|
-
it "
|
65
|
-
get :index, f: {example_query_facet_field: 'years_10'} # valid custom facet value with some results
|
64
|
+
it "returns results (possibly 0) when the user asks for a valid value to a custom facet query", :integration => true do
|
65
|
+
get :index, params: { f: { example_query_facet_field: 'years_10' } } # valid custom facet value with some results
|
66
66
|
expect(assigns(:response).docs).to_not be_empty
|
67
|
-
get :index, f: {example_query_facet_field: 'years_5'}
|
67
|
+
get :index, params: { f: {example_query_facet_field: 'years_5' } } # valid custom facet value with NO results
|
68
68
|
expect(assigns(:response).docs).to be_empty
|
69
69
|
end
|
70
70
|
|
71
|
-
it "
|
72
|
-
get :index, :q
|
71
|
+
it "has a spelling suggestion for an appropriately poor query", :integration => true do
|
72
|
+
get :index, params: { q: 'boo' }
|
73
73
|
expect(assigns(:response).spelling.words).to_not be_nil
|
74
74
|
end
|
75
75
|
|
@@ -78,7 +78,7 @@ describe CatalogController do
|
|
78
78
|
allow(controller).to receive(:search_results)
|
79
79
|
end
|
80
80
|
it "includes search hash with key :q" do
|
81
|
-
get :index, q: user_query
|
81
|
+
get :index, params: { q: user_query }
|
82
82
|
expect(session[:search]).to_not be_nil
|
83
83
|
expect(session[:search].keys).to include 'id'
|
84
84
|
|
@@ -89,11 +89,11 @@ describe CatalogController do
|
|
89
89
|
|
90
90
|
# check with no user manipulation
|
91
91
|
describe "for default query" do
|
92
|
-
it "
|
92
|
+
it "gets documents when no query", :integration => true do
|
93
93
|
get :index
|
94
94
|
expect(assigns(:response).docs).to_not be_empty
|
95
95
|
end
|
96
|
-
it "
|
96
|
+
it "gets facets when no query", :integration => true do
|
97
97
|
get :index
|
98
98
|
assert_facets_have_values(assigns(:response).aggregations)
|
99
99
|
end
|
@@ -113,8 +113,8 @@ describe CatalogController do
|
|
113
113
|
end
|
114
114
|
|
115
115
|
describe "with format :rss" do
|
116
|
-
it "
|
117
|
-
get :index, :format
|
116
|
+
it "gets the feed", :integration => true do
|
117
|
+
get :index, params: { format: 'rss' }
|
118
118
|
expect(response).to be_success
|
119
119
|
end
|
120
120
|
end
|
@@ -122,7 +122,7 @@ describe CatalogController do
|
|
122
122
|
describe "with format :json" do
|
123
123
|
render_views
|
124
124
|
before do
|
125
|
-
get :index, :format
|
125
|
+
get :index, params: { format: 'json' }
|
126
126
|
expect(response).to be_success
|
127
127
|
end
|
128
128
|
let(:json) { JSON.parse(response.body)['response'] }
|
@@ -166,27 +166,27 @@ describe CatalogController do
|
|
166
166
|
allow(@controller).to receive_messages search_results: [double, double]
|
167
167
|
end
|
168
168
|
|
169
|
-
it "
|
169
|
+
it "does not render when the config is false" do
|
170
170
|
blacklight_config.index.respond_to.yaml = false
|
171
|
-
expect { get :index, format: 'yaml' }.to raise_error ActionController::RoutingError
|
171
|
+
expect { get :index, params: { format: 'yaml' } }.to raise_error ActionController::RoutingError
|
172
172
|
end
|
173
173
|
|
174
174
|
it "renders the default when the config is true" do
|
175
175
|
# TODO: this should really stub a template and see if it gets rendered,
|
176
176
|
# but how to do that is non-obvious..
|
177
177
|
blacklight_config.index.respond_to.yaml = true
|
178
|
-
expect { get :index, format: 'yaml' }.to raise_error ActionView::MissingTemplate
|
178
|
+
expect { get :index, params: { format: 'yaml' } }.to raise_error ActionView::MissingTemplate
|
179
179
|
end
|
180
180
|
|
181
|
-
it "
|
181
|
+
it "passes a hash to the render call" do
|
182
182
|
blacklight_config.index.respond_to.yaml = { nothing: true, layout: false }
|
183
|
-
get :index, format: 'yaml'
|
183
|
+
get :index, params: { format: 'yaml' }
|
184
184
|
expect(response.body).to be_blank
|
185
185
|
end
|
186
186
|
|
187
|
-
it "
|
187
|
+
it "evaluates a proc" do
|
188
188
|
blacklight_config.index.respond_to.yaml = lambda { render text: "" }
|
189
|
-
get :index, format: 'yaml'
|
189
|
+
get :index, params: { format: 'yaml' }
|
190
190
|
expect(response.body).to be_empty
|
191
191
|
end
|
192
192
|
|
@@ -196,7 +196,7 @@ describe CatalogController do
|
|
196
196
|
end
|
197
197
|
|
198
198
|
blacklight_config.index.respond_to.yaml = :render_some_yaml
|
199
|
-
get :index, format: 'yaml'
|
199
|
+
get :index, params: { format: 'yaml' }
|
200
200
|
expect(response.body).to be_blank
|
201
201
|
end
|
202
202
|
end
|
@@ -206,38 +206,38 @@ describe CatalogController do
|
|
206
206
|
describe "track action" do
|
207
207
|
doc_id = '2007020969'
|
208
208
|
|
209
|
-
it "
|
210
|
-
put :track, :id
|
209
|
+
it "persists the search session id value into session[:search]" do
|
210
|
+
put :track, params: { id: doc_id, counter: 3, search_id: "123" }
|
211
211
|
expect(session[:search]['id']).to eq "123"
|
212
212
|
end
|
213
213
|
|
214
|
-
it "
|
215
|
-
put :track, :id
|
214
|
+
it "sets counter value into session[:search]" do
|
215
|
+
put :track, params: { id: doc_id, counter: 3 }
|
216
216
|
expect(session[:search]['counter']).to eq "3"
|
217
217
|
end
|
218
218
|
|
219
|
-
it "
|
220
|
-
put :track, :id
|
219
|
+
it "records the current per_page setting" do
|
220
|
+
put :track, params: { id: doc_id, counter: 3, per_page: 15 }
|
221
221
|
expect(session[:search]['per_page']).to eq "15"
|
222
222
|
end
|
223
223
|
|
224
|
-
it "
|
225
|
-
put :track, :id
|
224
|
+
it "redirects to show action for doc id" do
|
225
|
+
put :track, params: { id: doc_id, counter: 3 }
|
226
226
|
assert_redirected_to(solr_document_path(doc_id))
|
227
227
|
end
|
228
228
|
|
229
229
|
it "HTTP status code for redirect should be 303" do
|
230
|
-
put :track, :id
|
230
|
+
put :track, params: { id: doc_id, counter: 3 }
|
231
231
|
expect(response.status).to eq 303
|
232
232
|
end
|
233
233
|
|
234
|
-
it "
|
235
|
-
put :track, :id
|
234
|
+
it "redirects to the path given in the redirect param" do
|
235
|
+
put :track, params: { id: doc_id, counter: 3, redirect: '/xyz' }
|
236
236
|
assert_redirected_to("/xyz")
|
237
237
|
end
|
238
238
|
|
239
|
-
it "
|
240
|
-
put :track, :id
|
239
|
+
it "redirects to the path of the uri given in the redirect param" do
|
240
|
+
put :track, params: { id: doc_id, counter: 3, redirect: 'http://localhost:3000/xyz' }
|
241
241
|
assert_redirected_to("/xyz")
|
242
242
|
end
|
243
243
|
end
|
@@ -248,15 +248,15 @@ describe CatalogController do
|
|
248
248
|
doc_id = '2007020969'
|
249
249
|
|
250
250
|
describe "with format :html" do
|
251
|
-
it "
|
252
|
-
get :show, :id
|
251
|
+
it "gets document", :integration => true do
|
252
|
+
get :show, params: { id: doc_id }
|
253
253
|
expect(assigns[:document]).to_not be_nil
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
257
|
describe "with format :json" do
|
258
|
-
it "
|
259
|
-
get :show, id: doc_id, format: 'json'
|
258
|
+
it "gets the feed" do
|
259
|
+
get :show, params: { id: doc_id, format: 'json' }
|
260
260
|
expect(response).to be_success
|
261
261
|
json = JSON.parse response.body
|
262
262
|
expect(json["response"]["document"].keys).to match_array(["author_t", "opensearch_display", "marc_display", "published_display", "author_display", "lc_callnum_display", "title_t", "pub_date", "pub_date_sort", "subtitle_display", "format", "url_suppl_display", "material_type_display", "title_display", "subject_addl_t", "subject_t", "isbn_t", "id", "title_addl_t", "subject_geo_facet", "subject_topic_facet", "author_addl_t", "language_facet", "subtitle_t", "timestamp"])
|
@@ -276,33 +276,33 @@ describe CatalogController do
|
|
276
276
|
|
277
277
|
@search_session = { :id => current_search.id }
|
278
278
|
end
|
279
|
-
it "
|
279
|
+
it "sets previous document if counter present in session" do
|
280
280
|
session[:search] = @search_session.merge('counter' => 2)
|
281
|
-
get :show, :id
|
281
|
+
get :show, params: { id: doc_id }
|
282
282
|
expect(assigns[:previous_document]).to_not be_nil
|
283
283
|
end
|
284
|
-
it "
|
285
|
-
get :show, :id
|
284
|
+
it "does not set previous or next document if session is blank" do
|
285
|
+
get :show, params: { id: doc_id }
|
286
286
|
expect(assigns[:previous_document]).to be_nil
|
287
287
|
expect(assigns[:next_document]).to be_nil
|
288
288
|
end
|
289
|
-
it "
|
289
|
+
it "does not set previous or next document if session[:search]['counter'] is nil" do
|
290
290
|
session[:search] = {}
|
291
|
-
get :show, :id
|
291
|
+
get :show, params: { id: doc_id }
|
292
292
|
expect(assigns[:previous_document]).to be_nil
|
293
293
|
expect(assigns[:next_document]).to be_nil
|
294
294
|
end
|
295
|
-
it "
|
295
|
+
it "sets next document if counter present in session" do
|
296
296
|
session[:search] = @search_session.merge('counter' => 2)
|
297
|
-
get :show, :id
|
297
|
+
get :show, params: { id: doc_id }
|
298
298
|
expect(assigns[:next_document]).to_not be_nil
|
299
299
|
end
|
300
300
|
|
301
|
-
it "
|
301
|
+
it "does not break if solr returns an exception" do
|
302
302
|
allow(controller).to receive(:get_previous_and_next_documents_for_search) {
|
303
303
|
raise Blacklight::Exceptions::InvalidRequest.new "Error"
|
304
304
|
}
|
305
|
-
get :show, :id
|
305
|
+
get :show, params: { id: doc_id }
|
306
306
|
expect(assigns[:previous_document]).to be_nil
|
307
307
|
expect(assigns[:next_document]).to be_nil
|
308
308
|
end
|
@@ -310,15 +310,15 @@ describe CatalogController do
|
|
310
310
|
|
311
311
|
# NOTE: status code is always 200 in isolation mode ...
|
312
312
|
it "HTTP status code for GET should be 200", :integration => true do
|
313
|
-
get :show, :id
|
313
|
+
get :show, params: { id: doc_id }
|
314
314
|
expect(response).to be_success
|
315
315
|
end
|
316
|
-
it "
|
316
|
+
it "renders show.html.erb" do
|
317
317
|
@mock_response = double()
|
318
318
|
@mock_document = double()
|
319
319
|
allow(@mock_document).to receive_messages(:export_formats => {})
|
320
320
|
allow(controller).to receive_messages(fetch: [@mock_response, @mock_document])
|
321
|
-
get :show, :id
|
321
|
+
get :show, params: { id: doc_id }
|
322
322
|
expect(response).to render_template(:show)
|
323
323
|
end
|
324
324
|
|
@@ -330,10 +330,10 @@ describe CatalogController do
|
|
330
330
|
allow(controller).to receive_messages(:find => @mock_response )
|
331
331
|
end
|
332
332
|
before(:each) do
|
333
|
-
get :show, :id
|
333
|
+
get :show, params: { id: doc_id }
|
334
334
|
@document = assigns[:document]
|
335
335
|
end
|
336
|
-
it "
|
336
|
+
it "is a SolrDocument" do
|
337
337
|
expect(@document).to be_instance_of(SolrDocument)
|
338
338
|
end
|
339
339
|
end
|
@@ -380,8 +380,8 @@ describe CatalogController do
|
|
380
380
|
:get_single_doc_via_search => @mock_document)
|
381
381
|
end
|
382
382
|
|
383
|
-
it "
|
384
|
-
get :show, :id
|
383
|
+
it "responds to an extension-registered format properly" do
|
384
|
+
get :show, params: { id: doc_id, format: 'mock' }
|
385
385
|
expect(response).to be_success
|
386
386
|
expect(response.body).to match /mock_export/
|
387
387
|
end
|
@@ -404,12 +404,12 @@ describe CatalogController do
|
|
404
404
|
allow(controller).to receive_messages(find: @mock_response)
|
405
405
|
|
406
406
|
end
|
407
|
-
it "
|
408
|
-
get :opensearch, :format
|
407
|
+
it "returns an opensearch description" do
|
408
|
+
get :opensearch, params: { format: 'xml' }
|
409
409
|
expect(response).to be_success
|
410
410
|
end
|
411
|
-
it "
|
412
|
-
get :opensearch
|
411
|
+
it "returns valid JSON" do
|
412
|
+
get :opensearch, params: { format: 'json', q: 'a' }
|
413
413
|
expect(response).to be_success
|
414
414
|
end
|
415
415
|
end
|
@@ -424,69 +424,69 @@ describe CatalogController do
|
|
424
424
|
SolrDocument.use_extension( Blacklight::Document::Sms )
|
425
425
|
end
|
426
426
|
describe "email" do
|
427
|
-
it "
|
428
|
-
post :email, :id
|
427
|
+
it "gives error if no TO parameter" do
|
428
|
+
post :email, params: { id: doc_id }
|
429
429
|
expect(request.flash[:error]).to eq "You must enter a recipient in order to send this message"
|
430
430
|
end
|
431
|
-
it "
|
432
|
-
post :email, :id
|
431
|
+
it "gives an error if the email address is not valid" do
|
432
|
+
post :email, params: { id: doc_id, to: 'test_bad_email' }
|
433
433
|
expect(request.flash[:error]).to eq "You must enter a valid email address"
|
434
434
|
end
|
435
|
-
it "
|
436
|
-
post :email, :id
|
435
|
+
it "does not give error if no Message parameter is set" do
|
436
|
+
post :email, params: { id: doc_id, to: 'test_email@projectblacklight.org' }
|
437
437
|
expect(request.flash[:error]).to be_nil
|
438
438
|
end
|
439
|
-
it "
|
439
|
+
it "redirects back to the record upon success" do
|
440
440
|
mock_mailer = double
|
441
441
|
allow(mock_mailer).to receive(:deliver)
|
442
442
|
allow(RecordMailer).to receive(:email_record).with(anything, { :to => 'test_email@projectblacklight.org', :message => 'xyz' }, hash_including(:host => 'test.host')).and_return mock_mailer
|
443
443
|
|
444
|
-
post :email, :id
|
444
|
+
post :email, params: { id: doc_id, to: 'test_email@projectblacklight.org', message: 'xyz' }
|
445
445
|
expect(request.flash[:error]).to be_nil
|
446
446
|
expect(request).to redirect_to(solr_document_path(doc_id))
|
447
447
|
end
|
448
|
-
it "
|
449
|
-
|
448
|
+
it "renders email_success for XHR requests" do
|
449
|
+
post :email, xhr: true, params: { id: doc_id, to: 'test_email@projectblacklight.org' }
|
450
450
|
expect(request).to render_template 'email_success'
|
451
451
|
expect(request.flash[:success]).to eq "Email Sent"
|
452
452
|
end
|
453
453
|
end
|
454
454
|
describe "sms" do
|
455
|
-
it "
|
456
|
-
post :sms, :id
|
455
|
+
it "gives error if no phone number is given" do
|
456
|
+
post :sms, params: { id: doc_id, carrier: 'att' }
|
457
457
|
expect(request.flash[:error]).to eq "You must enter a recipient's phone number in order to send this message"
|
458
458
|
end
|
459
|
-
it "
|
460
|
-
post :sms, :id
|
459
|
+
it "gives an error when a carrier is not provided" do
|
460
|
+
post :sms, params: { id: doc_id, to: '5555555555', carrier: '' }
|
461
461
|
expect(request.flash[:error]).to eq "You must select a carrier"
|
462
462
|
end
|
463
|
-
it "
|
464
|
-
post :sms, :id
|
463
|
+
it "gives an error when the phone number is not 10 digits" do
|
464
|
+
post :sms, params: { id: doc_id, to: '555555555', carrier: 'txt.att.net' }
|
465
465
|
expect(request.flash[:error]).to eq "You must enter a valid 10 digit phone number"
|
466
466
|
end
|
467
|
-
it "
|
468
|
-
post :sms, :id
|
467
|
+
it "gives an error when the carrier is not in our list of carriers" do
|
468
|
+
post :sms, params: { id: doc_id, to: '5555555555', carrier: 'no-such-carrier' }
|
469
469
|
expect(request.flash[:error]).to eq "You must enter a valid carrier"
|
470
470
|
end
|
471
|
-
it "
|
472
|
-
post :sms, :id
|
471
|
+
it "allows punctuation in phone number" do
|
472
|
+
post :sms, params: { id: doc_id, to: '(555) 555-5555', carrier: 'txt.att.net' }
|
473
473
|
expect(request.flash[:error]).to be_nil
|
474
474
|
expect(request).to redirect_to(solr_document_path(doc_id))
|
475
475
|
end
|
476
|
-
it "
|
476
|
+
it "sends to the appropriate carrier email address" do
|
477
477
|
mock_mailer = double
|
478
478
|
allow(mock_mailer).to receive(:deliver)
|
479
479
|
expect(RecordMailer).to receive(:sms_record).with(anything, { to: '5555555555@txt.att.net' }, hash_including(:host => 'test.host')).and_return mock_mailer
|
480
|
-
post :sms, :id
|
480
|
+
post :sms, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
|
481
481
|
end
|
482
|
-
it "
|
483
|
-
post :sms, :id
|
482
|
+
it "redirects back to the record upon success" do
|
483
|
+
post :sms, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
|
484
484
|
expect(request.flash[:error]).to eq nil
|
485
485
|
expect(request).to redirect_to(solr_document_path(doc_id))
|
486
486
|
end
|
487
487
|
|
488
|
-
it "
|
489
|
-
|
488
|
+
it "renders sms_success template for XHR requests" do
|
489
|
+
post :sms, xhr: true, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
|
490
490
|
expect(request).to render_template 'sms_success'
|
491
491
|
expect(request.flash[:success]).to eq "SMS Sent"
|
492
492
|
end
|
@@ -494,28 +494,28 @@ describe CatalogController do
|
|
494
494
|
end
|
495
495
|
|
496
496
|
describe "errors" do
|
497
|
-
it "
|
497
|
+
it "returns status 404 for a record that doesn't exist" do
|
498
498
|
@mock_response = double(documents: [])
|
499
499
|
allow(controller).to receive_messages(:find => @mock_response)
|
500
|
-
get :show, :id
|
500
|
+
get :show, params: { id: "987654321" }
|
501
501
|
expect(response.status).to eq 404
|
502
502
|
expect(response.content_type).to eq Mime::HTML
|
503
503
|
end
|
504
|
-
it "
|
504
|
+
it "returns status 404 for a record that doesn't exist even for non-html format" do
|
505
505
|
@mock_response = double(documents: [])
|
506
506
|
allow(controller).to receive_messages(:find => @mock_response)
|
507
507
|
|
508
|
-
get :show, :id
|
508
|
+
get :show, params: { id: "987654321", format: "xml" }
|
509
509
|
expect(response.status).to eq 404
|
510
510
|
expect(response.content_type).to eq Mime::XML
|
511
511
|
end
|
512
512
|
|
513
|
-
it "
|
513
|
+
it "redirects the user to the root url for a bad search" do
|
514
514
|
fake_error = Blacklight::Exceptions::InvalidRequest.new
|
515
515
|
allow(Rails.env).to receive_messages(:test? => false)
|
516
516
|
allow(controller).to receive(:search_results) { |*args| raise fake_error }
|
517
517
|
expect(controller.logger).to receive(:error).with(fake_error)
|
518
|
-
get :index, :q
|
518
|
+
get :index, params: { q: '+' }
|
519
519
|
|
520
520
|
expect(response.redirect_url).to eq root_url
|
521
521
|
expect(request.flash[:notice]).to eq "Sorry, I don't understand your search."
|
@@ -523,12 +523,12 @@ describe CatalogController do
|
|
523
523
|
expect(response.status).to eq 302
|
524
524
|
end
|
525
525
|
|
526
|
-
it "
|
526
|
+
it "returns status 500 if the catalog path is raising an exception" do
|
527
527
|
fake_error = Blacklight::Exceptions::InvalidRequest.new
|
528
528
|
allow(controller).to receive(:search_results) { |*args| raise fake_error }
|
529
529
|
allow(controller.flash).to receive(:sweep)
|
530
530
|
allow(controller).to receive(:flash).and_return(:notice => I18n.t('blacklight.search.errors.request_error'))
|
531
|
-
expect { get :index, q:
|
531
|
+
expect { get :index, params: { q: '+' } }.to raise_error Blacklight::Exceptions::InvalidRequest
|
532
532
|
end
|
533
533
|
|
534
534
|
end
|
@@ -540,7 +540,7 @@ describe CatalogController do
|
|
540
540
|
allow(controller).to receive(:has_user_authentication_provider?) { false }
|
541
541
|
end
|
542
542
|
|
543
|
-
it "
|
543
|
+
it "does not show user util links" do
|
544
544
|
get :index
|
545
545
|
expect(response.body).to_not match /Login/
|
546
546
|
end
|
@@ -548,14 +548,14 @@ describe CatalogController do
|
|
548
548
|
|
549
549
|
describe "facet" do
|
550
550
|
describe "requesting js" do
|
551
|
-
it "
|
552
|
-
|
551
|
+
it "is successful" do
|
552
|
+
get :facet, xhr: true, params: { id: 'format' }
|
553
553
|
expect(response).to be_successful
|
554
554
|
end
|
555
555
|
end
|
556
556
|
describe "requesting html" do
|
557
|
-
it "
|
558
|
-
get :facet, id: 'format'
|
557
|
+
it "is successful" do
|
558
|
+
get :facet, params: { id: 'format' }
|
559
559
|
expect(response).to be_successful
|
560
560
|
expect(assigns[:response]).to be_kind_of Blacklight::Solr::Response
|
561
561
|
expect(assigns[:facet]).to be_kind_of Blacklight::Configuration::FacetField
|
@@ -566,7 +566,7 @@ describe CatalogController do
|
|
566
566
|
describe "requesting json" do
|
567
567
|
render_views
|
568
568
|
it "is successful" do
|
569
|
-
get :facet, id: 'format', format: 'json'
|
569
|
+
get :facet, params: { id: 'format', format: 'json' }
|
570
570
|
expect(response).to be_successful
|
571
571
|
json = JSON.parse(response.body)
|
572
572
|
expect(json["response"]["facets"]["items"].first["value"]).to eq 'Book'
|
@@ -575,7 +575,7 @@ describe CatalogController do
|
|
575
575
|
end
|
576
576
|
|
577
577
|
describe "#add_to_search_history" do
|
578
|
-
it "
|
578
|
+
it "prepends the current search to the list" do
|
579
579
|
session[:history] = []
|
580
580
|
controller.send(:add_to_search_history, double(:id => 1))
|
581
581
|
expect(session[:history]).to have(1).item
|
@@ -585,7 +585,7 @@ describe CatalogController do
|
|
585
585
|
expect(session[:history].first).to eq 2
|
586
586
|
end
|
587
587
|
|
588
|
-
it "
|
588
|
+
it "removes searches from the list when the list gets too big" do
|
589
589
|
allow(controller).to receive(:blacklight_config).and_return(double(:search_history_window => 5))
|
590
590
|
session[:history] = (0..4).to_a.reverse
|
591
591
|
|
@@ -601,7 +601,7 @@ describe CatalogController do
|
|
601
601
|
describe "current_search_session" do
|
602
602
|
let(:parameter_class) { ActionController::Parameters }
|
603
603
|
|
604
|
-
it "
|
604
|
+
it "creates a session if we're on an search action" do
|
605
605
|
allow(controller).to receive_messages(:action_name => "index")
|
606
606
|
allow(controller).to receive_messages(params: parameter_class.new(q: "x", page: 5))
|
607
607
|
session = controller.send(:current_search_session)
|
@@ -609,13 +609,13 @@ describe CatalogController do
|
|
609
609
|
expect(session.query_params).to_not include(:page => 5)
|
610
610
|
end
|
611
611
|
|
612
|
-
it "
|
612
|
+
it "creates a session if a search context was provided" do
|
613
613
|
allow(controller).to receive_messages(params: parameter_class.new(search_context: JSON.dump(:q => "x")))
|
614
614
|
session = controller.send(:current_search_session)
|
615
615
|
expect(session.query_params).to include("q" => "x")
|
616
616
|
end
|
617
617
|
|
618
|
-
it "
|
618
|
+
it "uses an existing session if a search id was provided" do
|
619
619
|
s = Search.create(:query_params => { :q => "x" })
|
620
620
|
session[:history] ||= []
|
621
621
|
session[:history] << s.id
|
@@ -625,7 +625,7 @@ describe CatalogController do
|
|
625
625
|
expect(session).to eq(s)
|
626
626
|
end
|
627
627
|
|
628
|
-
it "
|
628
|
+
it "uses an existing search session if the search is in the uri" do
|
629
629
|
s = Search.create(:query_params => { :q => "x" })
|
630
630
|
session[:search] ||= {}
|
631
631
|
session[:search]['id'] = s.id
|
@@ -669,11 +669,11 @@ describe CatalogController do
|
|
669
669
|
Rails.application.reload_routes!
|
670
670
|
end
|
671
671
|
|
672
|
-
it "
|
672
|
+
it "adds the action to a list" do
|
673
673
|
expect(CatalogController.blacklight_config.show.document_actions).to have_key(:like)
|
674
674
|
end
|
675
675
|
|
676
|
-
it "
|
676
|
+
it "defines the action method" do
|
677
677
|
expect(controller.respond_to?(:like)).to be true
|
678
678
|
end
|
679
679
|
|
@@ -683,7 +683,7 @@ describe CatalogController do
|
|
683
683
|
allow(controller).to receive(:validate_like_params).and_return(true)
|
684
684
|
post :like
|
685
685
|
end
|
686
|
-
it "
|
686
|
+
it "calls the supplied method on post" do
|
687
687
|
expect(controller).to have_received(:perform_like)
|
688
688
|
end
|
689
689
|
end
|
@@ -691,7 +691,7 @@ describe CatalogController do
|
|
691
691
|
describe "with failure" do
|
692
692
|
describe "with invalid params" do
|
693
693
|
before { allow(controller).to receive(:validate_like_params).and_return(false) }
|
694
|
-
it "
|
694
|
+
it "does not call the supplied method if validation failed" do
|
695
695
|
expect(controller).not_to have_received(:perform_like)
|
696
696
|
end
|
697
697
|
end
|
@@ -700,15 +700,15 @@ describe CatalogController do
|
|
700
700
|
end
|
701
701
|
|
702
702
|
describe "search_action_url" do
|
703
|
-
it "
|
704
|
-
get :index, :page
|
703
|
+
it "is the same as the catalog url" do
|
704
|
+
get :index, params: { page: 1 }
|
705
705
|
expect(controller.send(:search_action_url, q: "xyz")).to eq root_url(q: "xyz")
|
706
706
|
end
|
707
707
|
end
|
708
708
|
|
709
709
|
describe "search_facet_url" do
|
710
|
-
it "
|
711
|
-
get :index, :page
|
710
|
+
it "is the same as the catalog url" do
|
711
|
+
get :index, params: { page: 1 }
|
712
712
|
expect(controller.send(:search_facet_url, id: "some_facet", page: 5)).to eq facet_catalog_url(id: "some_facet")
|
713
713
|
end
|
714
714
|
end
|