blacklight 6.2.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|