mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16: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)
|
- [#1340](https://github.com/rails-api/active_model_serializers/pull/1340) Add support for resource-level meta. (@beauby)
|
||||||
|
|
||||||
Fixes:
|
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)
|
- [#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)
|
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.
|
- [#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
|
end
|
||||||
|
|
||||||
polymorphic = (options[:polymorphic] || []).include?(assoc_name.to_sym)
|
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
|
hash
|
||||||
end
|
end
|
||||||
|
|||||||
@ -9,10 +9,50 @@ module ActionController
|
|||||||
parsed_hash = ActiveModelSerializers::Deserialization.jsonapi_parse(params)
|
parsed_hash = ActiveModelSerializers::Deserialization.jsonapi_parse(params)
|
||||||
render json: parsed_hash
|
render json: parsed_hash
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render_polymorphic_parsed_payload
|
||||||
|
parsed_hash = ActiveModelSerializers::Deserialization.jsonapi_parse(
|
||||||
|
params,
|
||||||
|
polymorphic: [:restriction_for, :restricted_to]
|
||||||
|
)
|
||||||
|
render json: parsed_hash
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
tests DeserializationTestController
|
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
|
def test_deserialization
|
||||||
hash = {
|
hash = {
|
||||||
'data' => {
|
'data' => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user