Skip to content

Commit 3a691b2

Browse files
hidde-janlgebhardt
authored andcommitted
Verify filters that are passed to show_related_resources (#971)
(cherry picked from commit 2480458)
1 parent b1277ab commit 3a691b2

5 files changed

Lines changed: 18 additions & 1 deletion

File tree

lib/jsonapi/processor.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,10 @@ def show_related_resources
166166
include_directives = params[:include_directives]
167167

168168
source_resource ||= source_klass.find_by_key(source_id, context: context, fields: fields)
169+
verified_filters = resource_klass.verify_filters(filters, context)
169170

170171
rel_opts = {
171-
filters: filters,
172+
filters: verified_filters,
172173
sort_criteria: sort_criteria,
173174
paginator: paginator,
174175
fields: fields,

lib/jsonapi/resource.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,9 @@ def records(_options = {})
808808

809809
def verify_filters(filters, context = nil)
810810
verified_filters = {}
811+
812+
return verified_filters if filters.nil?
813+
811814
filters.each do |filter, raw_value|
812815
verified_filter = verify_filter(filter, raw_value, context)
813816
verified_filters[verified_filter[0]] = verified_filter[1]

test/controllers/controller_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2438,6 +2438,17 @@ def test_invalid_filter_value
24382438
assert_response :bad_request
24392439
end
24402440

2441+
def test_invalid_filter_value_for_get_related_resources
2442+
assert_cacheable_get :get_related_resources, params: {
2443+
hair_cut_id: 1,
2444+
relationship: 'people',
2445+
source: 'hair_cuts',
2446+
filter: {name: 'L'}
2447+
}
2448+
2449+
assert_response :bad_request
2450+
end
2451+
24412452
def test_valid_filter_value
24422453
assert_cacheable_get :index, params: {filter: {name: 'Joe Author'}}
24432454
assert_response :success

test/fixtures/active_record.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ class Section < ActiveRecord::Base
394394
end
395395

396396
class HairCut < ActiveRecord::Base
397+
has_many :people
397398
end
398399

399400
class Property < ActiveRecord::Base

test/test_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ class CatResource < JSONAPI::Resource
229229
jsonapi_resources :comments
230230
jsonapi_resources :firms
231231
jsonapi_resources :tags
232+
jsonapi_resources :hair_cuts
232233
jsonapi_resources :posts do
233234
jsonapi_relationships
234235
jsonapi_links :special_tags

0 commit comments

Comments
 (0)