Skip to content

Commit 1455ed9

Browse files
committed
bad query params to #range_limit action should not result in uncaught exception
1 parent 5bbb8db commit 1455ed9

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

lib/blacklight_range_limit/range_limit_builder.rb

+8
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ def add_range_limit_params(solr_params)
4848
# range_field, range_start, range_end
4949
def fetch_specific_range_limit(solr_params)
5050
field_key = blacklight_params[:range_field] # what field to fetch for
51+
52+
unless blacklight_params[:range_start].present? && blacklight_params[:range_end].present?
53+
raise BlacklightRangeLimit::InvalidRange
54+
end
55+
5156
start = blacklight_params[:range_start].to_i
5257
finish = blacklight_params[:range_end].to_i
5358

@@ -61,6 +66,9 @@ def fetch_specific_range_limit(solr_params)
6166
solr_params[:rows] = 0
6267

6368
return solr_params
69+
rescue BlacklightRangeLimit::InvalidRange
70+
# This will make Rails return a 400
71+
raise ActionController::BadRequest, "invalid range_start (#{blacklight_params[:range_start]}) or range_end (#{blacklight_params[:range_end]})"
6472
end
6573

6674
# hacky polyfill for new Blacklight behavior we need, if we don't have it yet
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
require 'spec_helper'
2+
3+
RSpec.describe CatalogController, type: :controller do
4+
describe "bad params" do
5+
let (:facet_field) { "pub_date_si" }
6+
7+
it "BadRequest without start param present" do
8+
expect {
9+
get :range_limit, params: {
10+
"range_field"=> facet_field,
11+
"range_start"=>"1931"
12+
}
13+
}.to raise_error(ActionController::BadRequest)
14+
end
15+
16+
it "BadRequest without end param" do
17+
expect {
18+
get :range_limit, params: {
19+
"range_field"=> facet_field,
20+
"range_start"=>"1931"
21+
}
22+
}.to raise_error(ActionController::BadRequest)
23+
end
24+
25+
it "BadRequest without either boundary" do
26+
expect {
27+
get :range_limit, params: {
28+
"range_field"=> facet_field,
29+
}
30+
}.to raise_error(ActionController::BadRequest)
31+
end
32+
33+
it "NotFound without a range_field" do
34+
expect {
35+
get :range_limit, params: {}
36+
}.to raise_error(ActionController::RoutingError)
37+
end
38+
39+
it "BadRequest if params out of order" do
40+
expect {
41+
get :range_limit, params: {
42+
"range_field"=> facet_field,
43+
"range_start"=>"1940",
44+
"range_end"=>"1930"
45+
}
46+
}.to raise_error(ActionController::BadRequest)
47+
end
48+
49+
it "BadRequest if one of the params is an array" do
50+
expect {
51+
get :range_limit, params: {
52+
"range_field"=> facet_field,
53+
"range_start"=>"1931",
54+
"range_end"=>["1940"]
55+
}
56+
}.to raise_error(ActionController::BadRequest)
57+
end
58+
end
59+
end

0 commit comments

Comments
 (0)