mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
Fix deserialization of nil relationships
failing test use try for when the assoc_data is possibly nil rubocop test/action_controller/json_api/deserialization_test.rb -a attempt to work on rails-master account for rails/master having instead of nil for assoc_data added changelog
This commit is contained in:
parent
96c5516d21
commit
5be33afbfb
@ -34,6 +34,7 @@ Features:
|
||||
- [#1340](https://github.com/rails-api/active_model_serializers/pull/1340) Add support for resource-level meta. (@beauby)
|
||||
|
||||
Fixes:
|
||||
- [#1651](https://github.com/rails-api/active_model_serializers/pull/1651) Fix deserialization of nil relationships. (@NullVoxPopuli)
|
||||
- [#1480](https://github.com/rails-api/active_model_serializers/pull/1480) Fix setting of cache_store from Rails configuration. (@bf4)
|
||||
Fix uninentional mutating of value in memory cache store. (@groyoh)
|
||||
- [#1622](https://github.com/rails-api/active_model_serializers/pull/1622) Fragment cache changed from per-record to per-serializer.
|
||||
|
||||
@ -188,7 +188,9 @@ module ActiveModelSerializers
|
||||
end
|
||||
|
||||
polymorphic = (options[:polymorphic] || []).include?(assoc_name.to_sym)
|
||||
hash["#{prefix_key}_type".to_sym] = assoc_data[:type] if polymorphic
|
||||
if polymorphic
|
||||
hash["#{prefix_key}_type".to_sym] = assoc_data.present? ? assoc_data[:type] : nil
|
||||
end
|
||||
|
||||
hash
|
||||
end
|
||||
|
||||
@ -9,10 +9,50 @@ module ActionController
|
||||
parsed_hash = ActiveModelSerializers::Deserialization.jsonapi_parse(params)
|
||||
render json: parsed_hash
|
||||
end
|
||||
|
||||
def render_polymorphic_parsed_payload
|
||||
parsed_hash = ActiveModelSerializers::Deserialization.jsonapi_parse(
|
||||
params,
|
||||
polymorphic: [:restriction_for, :restricted_to]
|
||||
)
|
||||
render json: parsed_hash
|
||||
end
|
||||
end
|
||||
|
||||
tests DeserializationTestController
|
||||
|
||||
def test_deserialization_of_relationship_only_object
|
||||
hash = {
|
||||
'data' => {
|
||||
'type' => 'restraints',
|
||||
'relationships' => {
|
||||
'restriction_for' => {
|
||||
'data' => {
|
||||
'type' => 'discounts',
|
||||
'id' => '67'
|
||||
}
|
||||
},
|
||||
'restricted_to' => {
|
||||
'data' => nil
|
||||
}
|
||||
}
|
||||
},
|
||||
'restraint' => {}
|
||||
}
|
||||
|
||||
post :render_polymorphic_parsed_payload, params: hash
|
||||
|
||||
response = JSON.parse(@response.body)
|
||||
expected = {
|
||||
'restriction_for_id' => '67',
|
||||
'restriction_for_type' => 'discounts',
|
||||
'restricted_to_id' => nil,
|
||||
'restricted_to_type' => nil
|
||||
}
|
||||
|
||||
assert_equal(expected, response)
|
||||
end
|
||||
|
||||
def test_deserialization
|
||||
hash = {
|
||||
'data' => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user