Skip to content

Commit d3c094b

Browse files
authored
fix: validate type matches resource type for sparse fieldsets (#1461)
1 parent 42a11b7 commit d3c094b

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

lib/jsonapi/request.rb

+1
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ def parse_fields(resource_klass, fields)
309309
if type_resource.nil?
310310
fail JSONAPI::Exceptions::InvalidResource.new(type, error_object_overrides)
311311
else
312+
verify_type(type, type_resource)
312313
unless values.nil?
313314
valid_fields = type_resource.fields.collect { |key| format_key(key) }
314315
values.each do |field|

test/unit/jsonapi_request/jsonapi_request_test.rb

+24
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,30 @@ def test_parse_dasherized_with_underscored_include
171171
assert_equal 'iso_currency is not a valid includable relationship of expense-entries', request.errors[0].detail
172172
end
173173

174+
def test_parse_fields_singular
175+
params = ActionController::Parameters.new(
176+
{
177+
controller: 'expense_entries',
178+
action: 'index',
179+
fields: {expense_entry: 'iso_currency'}
180+
}
181+
)
182+
183+
request = JSONAPI::Request.new(
184+
params,
185+
{
186+
context: nil,
187+
key_formatter: JSONAPI::Formatter.formatter_for(:underscored_key)
188+
}
189+
)
190+
191+
e = assert_raises JSONAPI::Exceptions::InvalidResource do
192+
request.parse_fields(ExpenseEntryResource, params[:fields])
193+
end
194+
refute e.errors.empty?
195+
assert_equal 'expense_entry is not a valid resource.', e.errors[0].detail
196+
end
197+
174198
def test_parse_fields_underscored
175199
params = ActionController::Parameters.new(
176200
{

0 commit comments

Comments
 (0)