Raise correct error on bad include even for serializer without any relationships

before:

> NoMethodError: undefined method `[]' for nil:NilClass

now:

> JSONAPI::Serializer::UnsupportedIncludeError: bad_include is not specified as a relationship
This commit is contained in:
Markus Doits 2020-11-21 15:31:37 +01:00
parent 963cd77900
commit 79510d33e7
No known key found for this signature in database
GPG Key ID: 7D8D679F5AF2A284
2 changed files with 13 additions and 2 deletions

View File

@ -341,7 +341,7 @@ module FastJsonapi
return if includes.blank? return if includes.blank?
parse_includes_list(includes).keys.each do |include_item| parse_includes_list(includes).keys.each do |include_item|
relationship_to_include = relationships_to_serialize[include_item] relationship_to_include = relationships_to_serialize && relationships_to_serialize[include_item]
raise(JSONAPI::Serializer::UnsupportedIncludeError.new(include_item, name)) unless relationship_to_include raise(JSONAPI::Serializer::UnsupportedIncludeError.new(include_item, name)) unless relationship_to_include
relationship_to_include.static_serializer # called for a side-effect to check for a known serializer class. relationship_to_include.static_serializer # called for a side-effect to check for a known serializer class.

View File

@ -15,11 +15,22 @@ RSpec.describe JSONAPI::Serializer do
) )
end end
it do it 'raises correct error on bad include for serializer with other relationships' do
expect(ActorSerializer.relationships_to_serialize).to be_present
expect { ActorSerializer.new(actor, include: ['bad_include']) } expect { ActorSerializer.new(actor, include: ['bad_include']) }
.to raise_error( .to raise_error(
JSONAPI::Serializer::UnsupportedIncludeError, /bad_include is not specified as a relationship/ JSONAPI::Serializer::UnsupportedIncludeError, /bad_include is not specified as a relationship/
) )
end end
it 'raises correct error on bad include for serializer with no relationships at all' do
expect(UserSerializer.relationships_to_serialize).to be_nil
expect { UserSerializer.new(actor, include: ['bad_include']) }
.to raise_error(
JSONAPI::Serializer::UnsupportedIncludeError, /bad_include is not specified as a relationship/
)
end
end end
end end