mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-22 22:06:50 +00:00
The JSON API adapater dasherizes every key, but the deserializer left the keys unaltered. Thus, the client had to send underscored keys in the request body in order for Rails to properly match sent values to model attributes. This commit adds automatic key transformation on deserialization. Per default the deserializer transforms the keys to underscore, but this behaviour can also be changed by including `key_transform` in the deserializer options.
73 lines
2.2 KiB
Ruby
73 lines
2.2 KiB
Ruby
require 'test_helper'
|
|
|
|
module ActionController
|
|
module Serialization
|
|
class JsonApi
|
|
class DeserializationTest < ActionController::TestCase
|
|
class DeserializationTestController < ActionController::Base
|
|
def render_parsed_payload
|
|
parsed_hash = ActiveModelSerializers::Deserialization.jsonapi_parse(params)
|
|
render json: parsed_hash
|
|
end
|
|
end
|
|
|
|
tests DeserializationTestController
|
|
|
|
def test_deserialization
|
|
hash = {
|
|
'data' => {
|
|
'type' => 'photos',
|
|
'id' => 'zorglub',
|
|
'attributes' => {
|
|
'title' => 'Ember Hamster',
|
|
'src' => 'http://example.com/images/productivity.png',
|
|
'image-width' => '200',
|
|
'imageHeight' => '200',
|
|
'ImageSize' => '1024'
|
|
},
|
|
'relationships' => {
|
|
'author' => {
|
|
'data' => nil
|
|
},
|
|
'photographer' => {
|
|
'data' => { 'type' => 'people', 'id' => '9' }
|
|
},
|
|
'comments' => {
|
|
'data' => [
|
|
{ 'type' => 'comments', 'id' => '1' },
|
|
{ 'type' => 'comments', 'id' => '2' }
|
|
]
|
|
},
|
|
'related-images' => {
|
|
'data' => [
|
|
{ 'type' => 'image', 'id' => '7' },
|
|
{ 'type' => 'image', 'id' => '8' }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post :render_parsed_payload, params: hash
|
|
|
|
response = JSON.parse(@response.body)
|
|
expected = {
|
|
'id' => 'zorglub',
|
|
'title' => 'Ember Hamster',
|
|
'src' => 'http://example.com/images/productivity.png',
|
|
'image_width' => '200',
|
|
'image_height' => '200',
|
|
'image_size' => '1024',
|
|
'author_id' => nil,
|
|
'photographer_id' => '9',
|
|
'comment_ids' => %w(1 2),
|
|
'related_image_ids' => %w(7 8)
|
|
}
|
|
|
|
assert_equal(expected, response)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|