diff --git a/lib/topic_query.rb b/lib/topic_query.rb index 6fdf2280d4f..5592a29bb79 100644 --- a/lib/topic_query.rb +++ b/lib/topic_query.rb @@ -17,14 +17,20 @@ class TopicQuery Integer === x && x >= 0 end - array_int = lambda do |x| - Array === x && x.length > 0 && x.all? { |i| Integer === i || i.match?(/^-?[0-9]+$/) } + int = lambda do |x| + Integer === x || (String === x && x.match?(/^-?[0-9]+$/)) + end + + array_int_or_int = lambda do |x| + int.call(x) || ( + Array === x && x.length > 0 && x.all?(&int) + ) end { max_posts: zero_or_more, min_posts: zero_or_more, - exclude_category_ids: array_int + exclude_category_ids: array_int_or_int } end end diff --git a/spec/requests/list_controller_spec.rb b/spec/requests/list_controller_spec.rb index 76c216cd86e..e9c863d82f4 100644 --- a/spec/requests/list_controller_spec.rb +++ b/spec/requests/list_controller_spec.rb @@ -33,6 +33,9 @@ RSpec.describe ListController do it "returns 200 for legit requests" do get "/latest.json?exclude_category_ids%5B%5D=69&exclude_category_ids%5B%5D=70&no_definitions=true&no_subcategories=false&page=1&_=1534296100767" expect(response.status).to eq(200) + + get "/latest.json?exclude_category_ids=-1" + expect(response.status).to eq(200) end it "doesn't throw an error with page params as an array" do